Fix deadlocks caused by waiting for async operations to complete before the scheduler has started
This commit is contained in:
@@ -83,11 +83,8 @@ public class AbstractDatastore implements Datastore {
|
||||
}
|
||||
|
||||
@Override
|
||||
public LPFuture<Void> init() {
|
||||
return makeFuture(() -> {
|
||||
backing.init();
|
||||
return null;
|
||||
});
|
||||
public void init() {
|
||||
backing.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -56,7 +56,7 @@ public interface Datastore {
|
||||
return this;
|
||||
}
|
||||
|
||||
LPFuture<Void> init();
|
||||
void init();
|
||||
LPFuture<Void> shutdown();
|
||||
LPFuture<Boolean> logAction(LogEntry entry);
|
||||
LPFuture<Log> getLog();
|
||||
|
||||
@@ -69,22 +69,16 @@ public class SplitBacking implements Datastore {
|
||||
}
|
||||
|
||||
@Override
|
||||
public LPFuture<Void> init() {
|
||||
AbstractFuture<Void> future = new AbstractFuture<>();
|
||||
doAsync(() -> {
|
||||
boolean success = true;
|
||||
backing.values().forEach(Datastore::init);
|
||||
for (Datastore ds : backing.values()) {
|
||||
if (!ds.isAcceptingLogins()) {
|
||||
success = false;
|
||||
}
|
||||
public void init() {
|
||||
boolean success = true;
|
||||
backing.values().forEach(Datastore::init);
|
||||
for (Datastore ds : backing.values()) {
|
||||
if (!ds.isAcceptingLogins()) {
|
||||
success = false;
|
||||
}
|
||||
}
|
||||
|
||||
setAcceptingLogins(success);
|
||||
future.complete(null);
|
||||
});
|
||||
return future;
|
||||
|
||||
setAcceptingLogins(success);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
@@ -77,7 +77,7 @@ public class StorageFactory {
|
||||
}
|
||||
|
||||
plugin.getLog().info("Initialising datastore...");
|
||||
datastore.init().getOrDefault(null);
|
||||
datastore.init();
|
||||
return datastore;
|
||||
}
|
||||
|
||||
|
||||
@@ -75,13 +75,8 @@ public class TolerantDatastore implements Datastore {
|
||||
}
|
||||
|
||||
@Override
|
||||
public LPFuture<Void> init() {
|
||||
phaser.register();
|
||||
try {
|
||||
return backing.init();
|
||||
} finally {
|
||||
phaser.arriveAndDeregister();
|
||||
}
|
||||
public void init() {
|
||||
backing.init();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
||||
Reference in New Issue
Block a user