Skip to content

Commit a95af9d

Browse files
committed
avoid race condition during ES shutdown
1 parent 1800cd4 commit a95af9d

File tree

2 files changed

+17
-17
lines changed
  • app/es_embedded/src/main/java/de/komoot/photon
  • src/main/java/de/komoot/photon

2 files changed

+17
-17
lines changed

app/es_embedded/src/main/java/de/komoot/photon/Server.java

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,8 +25,6 @@
2525
import java.io.File;
2626
import java.io.IOException;
2727
import java.net.InetSocketAddress;
28-
import java.net.URISyntaxException;
29-
import java.net.URL;
3028
import java.nio.file.Files;
3129
import java.nio.file.StandardCopyOption;
3230
import java.time.Instant;
@@ -64,7 +62,7 @@ public class Server {
6462

6563
protected Client esClient;
6664

67-
private File esDirectory;
65+
private final File esDirectory;
6866

6967
protected static class MyNode extends Node {
7068
public MyNode(Settings preparedSettings, Collection<Class<? extends Plugin>> classpathPlugins) {

src/main/java/de/komoot/photon/App.java

Lines changed: 16 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -20,14 +20,15 @@
2020
import java.io.IOException;
2121
import java.util.*;
2222
import java.util.concurrent.ConcurrentLinkedQueue;
23+
import java.util.concurrent.atomic.AtomicReference;
2324
import java.util.stream.Collectors;
2425

2526
/**
2627
* Main Photon application.
2728
*/
2829
public class App {
2930
private static final Logger LOGGER = LogManager.getLogger();
30-
private static Server esServer;
31+
private static final AtomicReference<Server> esServer = new AtomicReference<>();
3132
private static Javalin photonServer;
3233

3334
public static void main(String[] rawArgs) throws Exception {
@@ -50,9 +51,9 @@ public static void shutdown() {
5051
photonServer.stop();
5152
photonServer = null;
5253
}
53-
if (esServer != null) {
54-
esServer.shutdown();
55-
esServer = null;
54+
final Server temp = esServer.getAndSet(null);
55+
if (temp != null) {
56+
temp.shutdown();
5657
}
5758
}
5859

@@ -67,29 +68,29 @@ private static boolean runPhoton(CommandLineArgs args) throws IOException {
6768
return true;
6869
}
6970

70-
esServer = new Server(args.getDataDirectory());
71+
esServer.set(new Server(args.getDataDirectory()));
7172

7273
LOGGER.info("Start up database cluster, this might take some time.");
73-
esServer.start(args.getCluster(), args.getTransportAddresses(), args.isNominatimImport());
74+
esServer.get().start(args.getCluster(), args.getTransportAddresses(), args.isNominatimImport());
7475
LOGGER.info("Database cluster is now ready.");
7576

7677
if (args.isNominatimImport()) {
77-
startNominatimImport(args, esServer);
78+
startNominatimImport(args, esServer.get());
7879
return true;
7980
}
8081

8182
// Working on an existing installation.
8283
// Update the index settings in case there are any changes.
83-
esServer.updateIndexSettings(args.getSynonymFile());
84-
esServer.refreshIndexes();
84+
esServer.get().updateIndexSettings(args.getSynonymFile());
85+
esServer.get().refreshIndexes();
8586

8687
if (args.isNominatimUpdate()) {
87-
startNominatimUpdate(setupNominatimUpdater(args, esServer), esServer);
88+
startNominatimUpdate(setupNominatimUpdater(args, esServer.get()), esServer.get());
8889
return true;
8990
}
9091

9192
// No special action specified -> normal mode: start search API
92-
startApi(args, esServer);
93+
startApi(args, esServer.get());
9394

9495
return false;
9596
}
@@ -371,9 +372,10 @@ private static void startApi(CommandLineArgs args, Server server) throws IOExcep
371372
);
372373

373374
photonServer.events(event -> event.serverStopped(() -> {
374-
LOGGER.info("Server has been stopped.");
375-
if (esServer != null) {
376-
esServer.shutdown();
375+
final Server temp = esServer.getAndSet(null);
376+
if (temp != null) {
377+
LOGGER.info("Server has been stopped. Shutting down node.");
378+
temp.shutdown();
377379
}
378380
}));
379381

0 commit comments

Comments
 (0)