diff --git a/server/src/main/java/com/arcadedb/server/ArcadeDBServer.java b/server/src/main/java/com/arcadedb/server/ArcadeDBServer.java index 1eee05a7e..2f8e68a1d 100644 --- a/server/src/main/java/com/arcadedb/server/ArcadeDBServer.java +++ b/server/src/main/java/com/arcadedb/server/ArcadeDBServer.java @@ -332,11 +332,11 @@ public boolean existsDatabase(final String databaseName) { return databases.containsKey(databaseName); } - public DatabaseInternal createDatabase(final String databaseName, final ComponentFile.MODE mode) { - DatabaseInternal db; + public ServerDatabase createDatabase(final String databaseName, final ComponentFile.MODE mode) { + ServerDatabase serverDatabase; synchronized (databases) { - db = databases.get(databaseName); - if (db != null) + serverDatabase = databases.get(databaseName); + if (serverDatabase != null) throw new IllegalArgumentException("Database '" + databaseName + "' already exists"); final DatabaseFactory factory = new DatabaseFactory( @@ -345,23 +345,22 @@ public DatabaseInternal createDatabase(final String databaseName, final Componen if (factory.exists()) throw new IllegalArgumentException("Database '" + databaseName + "' already exists"); - db = (DatabaseInternal) factory.create(); + DatabaseInternal embeddedDatabase = (DatabaseInternal) factory.create(); if (mode == READ_ONLY) { - db.close(); - db = (DatabaseInternal) factory.open(mode); + embeddedDatabase.close(); + embeddedDatabase = (DatabaseInternal) factory.open(mode); } if (configuration.getValueAsBoolean(GlobalConfiguration.HA_ENABLED)) - db = new ReplicatedDatabase(this, (EmbeddedDatabase) db); + embeddedDatabase = new ReplicatedDatabase(this, (EmbeddedDatabase) embeddedDatabase); - db = new ServerDatabase(db); + serverDatabase = new ServerDatabase(embeddedDatabase); // FORCE LOADING INTO THE SERVER - databases.put(databaseName, (ServerDatabase) db); + databases.put(databaseName, serverDatabase); + return serverDatabase; } - - return db; } public Set getDatabaseNames() { diff --git a/server/src/main/java/com/arcadedb/server/http/handler/PostCreateDatabaseHandler.java b/server/src/main/java/com/arcadedb/server/http/handler/PostCreateDatabaseHandler.java index 5949b1be4..5de811831 100644 --- a/server/src/main/java/com/arcadedb/server/http/handler/PostCreateDatabaseHandler.java +++ b/server/src/main/java/com/arcadedb/server/http/handler/PostCreateDatabaseHandler.java @@ -63,8 +63,10 @@ public ExecutionResponse execute(final HttpServerExchange exchange, final Server final DatabaseInternal db = server.createDatabase(databaseName, ComponentFile.MODE.READ_WRITE); - if (server.getConfiguration().getValueAsBoolean(GlobalConfiguration.HA_ENABLED)) - ((ReplicatedDatabase) db).createInReplicas(); + if (server.getConfiguration().getValueAsBoolean(GlobalConfiguration.HA_ENABLED)) { + final ReplicatedDatabase replicatedDatabase = (ReplicatedDatabase) db.getEmbedded(); + replicatedDatabase.createInReplicas(); + } return new ExecutionResponse(200, "{ \"result\" : \"ok\"}"); } diff --git a/server/src/main/java/com/arcadedb/server/http/handler/PostServerCommandHandler.java b/server/src/main/java/com/arcadedb/server/http/handler/PostServerCommandHandler.java index ccb65bb08..bf5fd9da9 100644 --- a/server/src/main/java/com/arcadedb/server/http/handler/PostServerCommandHandler.java +++ b/server/src/main/java/com/arcadedb/server/http/handler/PostServerCommandHandler.java @@ -28,6 +28,7 @@ import com.arcadedb.serializer.json.JSONArray; import com.arcadedb.serializer.json.JSONObject; import com.arcadedb.server.ArcadeDBServer; +import com.arcadedb.server.ServerDatabase; import com.arcadedb.server.ha.HAServer; import com.arcadedb.server.ha.Leader2ReplicaNetworkExecutor; import com.arcadedb.server.ha.Replica2LeaderNetworkExecutor; @@ -173,10 +174,12 @@ private void createDatabase(final String command) { final ArcadeDBServer server = httpServer.getServer(); server.getServerMetrics().meter("http.create-database").hit(); - final DatabaseInternal db = server.createDatabase(databaseName, ComponentFile.MODE.READ_WRITE); + final ServerDatabase db = server.createDatabase(databaseName, ComponentFile.MODE.READ_WRITE); - if (server.getConfiguration().getValueAsBoolean(GlobalConfiguration.HA_ENABLED)) - ((ReplicatedDatabase) db).createInReplicas(); + if (server.getConfiguration().getValueAsBoolean(GlobalConfiguration.HA_ENABLED)) { + final ReplicatedDatabase replicatedDatabase = (ReplicatedDatabase) db.getEmbedded(); + replicatedDatabase.createInReplicas(); + } } private ExecutionResponse getServerEvents(final String command) {