2020import java .io .IOException ;
2121import java .util .*;
2222import java .util .concurrent .ConcurrentLinkedQueue ;
23+ import java .util .concurrent .atomic .AtomicReference ;
2324import java .util .stream .Collectors ;
2425
2526/**
2627 * Main Photon application.
2728 */
2829public 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