Skip to content

Commit fc5235a

Browse files
timwtglman
authored andcommitted
Detect when distributed plugin startup is complete.
1 parent a93ff93 commit fc5235a

2 files changed

Lines changed: 34 additions & 9 deletions

File tree

distributed/src/main/java/com/orientechnologies/orient/distributed/db/OrientDBDistributed.java

Lines changed: 30 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@
2525
import com.orientechnologies.orient.core.db.OrientDBEmbedded;
2626
import com.orientechnologies.orient.core.db.document.ODatabaseDocumentEmbedded;
2727
import com.orientechnologies.orient.core.exception.ODatabaseException;
28+
import com.orientechnologies.orient.core.metadata.security.auth.OAuthenticationInfo;
2829
import com.orientechnologies.orient.core.storage.OStorage;
2930
import com.orientechnologies.orient.core.storage.disk.OLocalPaginatedStorage;
3031
import com.orientechnologies.orient.core.storage.impl.local.OAbstractPaginatedStorage;
@@ -58,12 +59,15 @@
5859
import java.util.Map.Entry;
5960
import java.util.Set;
6061
import java.util.concurrent.ConcurrentHashMap;
62+
import java.util.concurrent.CountDownLatch;
63+
import java.util.concurrent.TimeUnit;
6164

6265
/** Created by tglman on 08/08/17. */
6366
public class OrientDBDistributed extends OrientDBEmbedded implements OServerAware {
6467

6568
private volatile OServer server;
6669
private volatile ODistributedPlugin plugin;
70+
private final CountDownLatch pluginStartupLatch = new CountDownLatch(1);
6771
protected final ConcurrentHashMap<String, ODistributedDatabaseImpl> databases =
6872
new ConcurrentHashMap<String, ODistributedDatabaseImpl>();
6973
protected final ConcurrentHashMap<String, ODistributedConfigurationManager> configurations =
@@ -103,10 +107,33 @@ public void loadAllDatabases() {
103107
}
104108
}
105109

106-
public synchronized ODistributedPlugin getPlugin() {
107-
if (plugin == null) {
108-
if (server != null && server.isActive()) plugin = server.getPlugin("cluster");
110+
private void waitForPluginStartup() {
111+
if (isDistributedPluginEnabled() && plugin == null) {
112+
try {
113+
OLogManager.instance().info(this, "Waiting for plugin startup");
114+
if (!pluginStartupLatch.await(10, TimeUnit.SECONDS)) {
115+
throw new OOfflineNodeException("Distributed manager is offline on " + server.getServerId());
116+
}
117+
OLogManager.instance().info(this, "Plugin startup complete");
118+
} catch (InterruptedException ignored) {
119+
}
120+
}
121+
}
122+
123+
public void setPlugin(ODistributedPlugin plugin) {
124+
OLogManager.instance().info(this, "Setting plugin");
125+
this.plugin = plugin;
126+
this.pluginStartupLatch.countDown();
109127
}
128+
129+
public ODistributedPlugin getPlugin() {
130+
OLogManager.instance()
131+
.info(
132+
this,
133+
"Getting plugin, server?=%s, server.active?=%s",
134+
server != null,
135+
server.isActive());
136+
waitForPluginStartup();
110137
return plugin;
111138
}
112139

@@ -164,10 +191,6 @@ protected ODatabaseDocumentEmbedded newPooledSessionInstance(
164191
return embedded;
165192
}
166193

167-
public void setPlugin(ODistributedPlugin plugin) {
168-
this.plugin = plugin;
169-
}
170-
171194
public OStorage fullSync(String dbName, InputStream backupStream, OrientDBConfig config) {
172195
OAbstractPaginatedStorage storage = null;
173196
ODatabaseDocumentEmbedded embedded;

distributed/src/main/java/com/orientechnologies/orient/server/distributed/impl/ODistributedPlugin.java

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -285,8 +285,6 @@ public void setDefaultDatabaseConfigFile(final String iFile) {
285285
@Override
286286
public void startup() {
287287
if (!enabled) return;
288-
if (serverInstance.getDatabases() instanceof OrientDBDistributed)
289-
((OrientDBDistributed) serverInstance.getDatabases()).setPlugin(this);
290288

291289
// REGISTER TEMPORARY USER FOR REPLICATION PURPOSE
292290
serverInstance.addTemporaryUser(REPLICATOR_USER, "" + new SecureRandom().nextLong(), "*");
@@ -342,6 +340,10 @@ public void onSignal(final Signal signal) {
342340
new ODistributedStartupException("Error on starting distributed plugin"), e);
343341
}
344342

343+
// TODO: Might need to separate plugin setting and plugin startup completed flag...
344+
if (serverInstance.getDatabases() instanceof OrientDBDistributed)
345+
((OrientDBDistributed) serverInstance.getDatabases()).setPlugin(this);
346+
345347
dumpServersStatus();
346348
}
347349

0 commit comments

Comments
 (0)