diff --git a/src/main/java/eu/openaire/urls_controller/controllers/ShutdownController.java b/src/main/java/eu/openaire/urls_controller/controllers/ShutdownController.java index f71d0db..992d6ec 100644 --- a/src/main/java/eu/openaire/urls_controller/controllers/ShutdownController.java +++ b/src/main/java/eu/openaire/urls_controller/controllers/ShutdownController.java @@ -35,24 +35,29 @@ public class ShutdownController { if ( responseEntity != null ) return responseEntity; - String finalMsg = ""; - if ( shouldShutdownService ) - finalMsg = "The controller has already received a \"shutdownService\" (which was not canceled afterwards)."; - else { + String endingMsg; + if ( shouldShutdownService ) { + endingMsg = "The controller has already received a \"shutdownService\" (which was not canceled afterwards)."; + logger.info(initMsg + endingMsg); + } else { shouldShutdownService = true; - // Send "shutdownWorker" requests to all Workers. + endingMsg = "The service will shutdown, after finishing current work."; + logger.info(initMsg + endingMsg); + + // Send "shutdownWorker" requests to all active Workers. for ( String workerId : UrlsController.workersInfoMap.keySet() ) { - if ( ! UrlsController.workersInfoMap.get(workerId).getHasShutdown() ) - shutdownService.postShutdownOrCancelRequestToWorker(workerId, UrlsController.workersInfoMap.get(workerId).getWorkerIP(), false); + WorkerInfo workerInfo = UrlsController.workersInfoMap.get(workerId); + if ( ! workerInfo.getHasShutdown() ) // A worker may have shutdown on its own (by sending it a shutDown request manually), so it will have told the Controller when it shut down. In case of a Worker-crash, the Controller will not know about it. + shutdownService.postShutdownOrCancelRequestToWorker(workerId, workerInfo.getWorkerIP(), false); + else + logger.warn("Will not post ShutdownRequest to Worker \"" + workerId + "\", since is it has already shutdown."); } // That's it for now. The workers may take some hours to finish their work (including delivering the full-text files). // A scheduler monitors the shutdown of the workers. Once all worker have shutdown, the Controller shuts down as well. } - finalMsg += "The service will shutdown, after finishing current work."; - logger.info(initMsg + finalMsg); - return ResponseEntity.ok().body(finalMsg + "\n"); + return ResponseEntity.ok().body(endingMsg + "\n"); } @@ -65,13 +70,19 @@ public class ShutdownController { return responseEntity; shouldShutdownService = false; - // Send "cancelShutdownWorker" requests to all Workers. - for ( String workerId : UrlsController.workersInfoMap.keySet() ) - shutdownService.postShutdownOrCancelRequestToWorker(workerId, UrlsController.workersInfoMap.get(workerId).getWorkerIP(), true); + String endingMsg = "Any previous \"shutdownService\"-request is canceled."; + logger.info(initMsg + endingMsg); - String finalMsg = "Any previous \"shutdownService\"-request is canceled."; - logger.info(initMsg + finalMsg); - return ResponseEntity.ok().body(finalMsg + "\n"); + // Send "cancelShutdownWorker" requests to all active Workers. + for ( String workerId : UrlsController.workersInfoMap.keySet() ) { + WorkerInfo workerInfo = UrlsController.workersInfoMap.get(workerId); + if ( ! workerInfo.getHasShutdown() ) // A worker may have shutdown on its own (by sending it a shutDown request manually), so it will have told the Controller when it shut down. In case of a Worker-crash, the Controller will not know about it. + shutdownService.postShutdownOrCancelRequestToWorker(workerId, workerInfo.getWorkerIP(), true); + else + logger.warn("Will not post CancelShutdownRequest to Worker \"" + workerId + "\", since is it has already shutdown."); + } + + return ResponseEntity.ok().body(endingMsg + "\n"); }