Fixed possible ExecutorService leak in BukkitImporter

This commit is contained in:
Rsl1122 2019-02-15 10:42:05 +02:00
parent 4f68a59dcb
commit 9616d5b6f0

View File

@ -89,17 +89,12 @@ public abstract class BukkitImporter implements Importer {
public final void processImport() { public final void processImport() {
ExecutorService service = Executors.newCachedThreadPool(); ExecutorService service = Executors.newCachedThreadPool();
try {
submitTo(service, this::processServerData); submitTo(service, this::processServerData);
submitTo(service, this::processUserData); submitTo(service, this::processUserData);
} finally {
service.shutdown(); shutdownService(service);
try {
service.awaitTermination(20, TimeUnit.MINUTES);
} catch (InterruptedException e) {
service.shutdownNow();
Thread.currentThread().interrupt();
} }
} }
private void processServerData() { private void processServerData() {
@ -111,16 +106,12 @@ public abstract class BukkitImporter implements Importer {
ExecutorService service = Executors.newCachedThreadPool(); ExecutorService service = Executors.newCachedThreadPool();
try {
SaveOperations save = dbSystem.getDatabase().save(); SaveOperations save = dbSystem.getDatabase().save();
submitTo(service, () -> save.insertTPS(ImmutableMap.of(serverUUID.get(), serverImportData.getTpsData()))); submitTo(service, () -> save.insertTPS(ImmutableMap.of(serverUUID.get(), serverImportData.getTpsData())));
submitTo(service, () -> save.insertCommandUsage(ImmutableMap.of(serverUUID.get(), serverImportData.getCommandUsages()))); submitTo(service, () -> save.insertCommandUsage(ImmutableMap.of(serverUUID.get(), serverImportData.getCommandUsages())));
} finally {
service.shutdown(); shutdownService(service);
try {
service.awaitTermination(20, TimeUnit.MINUTES);
} catch (InterruptedException e) {
service.shutdownNow();
Thread.currentThread().interrupt();
} }
} }
@ -165,6 +156,7 @@ public abstract class BukkitImporter implements Importer {
ExecutorService service = Executors.newCachedThreadPool(); ExecutorService service = Executors.newCachedThreadPool();
try {
SaveOperations save = dbSystem.getDatabase().save(); SaveOperations save = dbSystem.getDatabase().save();
// TODO Replace with a transaction // TODO Replace with a transaction
@ -174,10 +166,17 @@ public abstract class BukkitImporter implements Importer {
submitTo(service, () -> save.insertUserInfo(ImmutableMap.of(serverUUID.get(), userInfo))); submitTo(service, () -> save.insertUserInfo(ImmutableMap.of(serverUUID.get(), userInfo)));
submitTo(service, () -> save.insertNicknames(ImmutableMap.of(serverUUID.get(), nickNames))); submitTo(service, () -> save.insertNicknames(ImmutableMap.of(serverUUID.get(), nickNames)));
submitTo(service, () -> save.insertAllGeoInfo(geoInfo)); submitTo(service, () -> save.insertAllGeoInfo(geoInfo));
} finally {
shutdownService(service);
}
}
private void shutdownService(ExecutorService service) {
service.shutdown(); service.shutdown();
try { try {
service.awaitTermination(20, TimeUnit.MINUTES); if (!service.awaitTermination(20, TimeUnit.MINUTES)) {
service.shutdownNow();
}
} catch (InterruptedException e) { } catch (InterruptedException e) {
service.shutdownNow(); service.shutdownNow();
Thread.currentThread().interrupt(); Thread.currentThread().interrupt();