diff --git a/src/main/java/eu/openaire/urls_controller/components/ScheduledTasks.java b/src/main/java/eu/openaire/urls_controller/components/ScheduledTasks.java index 971f17b..2bd029f 100644 --- a/src/main/java/eu/openaire/urls_controller/components/ScheduledTasks.java +++ b/src/main/java/eu/openaire/urls_controller/components/ScheduledTasks.java @@ -54,9 +54,8 @@ public class ScheduledTasks { return; // Immediately delete the selected tasks form the global list, so that if these tasks are not finished before the scheduler runs again, they will not be re-executed. - for ( Callable selectedTask : tempList ) { + for ( Callable selectedTask : tempList ) UrlsController.backgroundCallableTasks.remove(selectedTask); - } logger.debug(numOfTasks + " background tasks were found inside the \"backgroundCallableTasks\" list and are about to be executed."); // Execute the tasks and wait for them to finish. @@ -82,7 +81,7 @@ public class ScheduledTasks { } - @Scheduled(initialDelay = 60_000, fixedDelay = 7_200_000) // Check every 2 hours. + @Scheduled(initialDelay = 600_000, fixedDelay = 7_200_000) // Check every 2 hours. The initial delay is 10 minutes, to allow to shut down quickly in case of problem when starting, but also account for the initial communication with the Workers, where a problem may appear. //@Scheduled(initialDelay = 60_000, fixedDelay = 20_000) // Just for testing (every 20 secs). public void checkIfServiceIsReadyForShutdown() { @@ -91,10 +90,9 @@ public class ScheduledTasks { // If the workers have shutdown on their own, without been instructed to by the Controller, then the Controller will keep running. - for ( String workerId : UrlsController.workersInfoMap.keySet() ) { + for ( String workerId : UrlsController.workersInfoMap.keySet() ) if ( ! UrlsController.workersInfoMap.get(workerId).getHasShutdown() ) // The workerId is certainly inside the map and has a workerInfo value. return; // If at least 1 worker is still active, then do not shut down the server. - } logger.info("All workers have already shutdown. Shutting down the Controller.."); Application.gentleAppShutdown(); 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 992d6ec..50bcfae 100644 --- a/src/main/java/eu/openaire/urls_controller/controllers/ShutdownController.java +++ b/src/main/java/eu/openaire/urls_controller/controllers/ShutdownController.java @@ -2,6 +2,7 @@ package eu.openaire.urls_controller.controllers; import eu.openaire.urls_controller.models.WorkerInfo; import eu.openaire.urls_controller.services.ShutdownService; +import eu.openaire.urls_controller.util.GenericUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; @@ -97,10 +98,7 @@ public class ShutdownController { return ResponseEntity.badRequest().body(errorMsg); } - String remoteAddr = request.getHeader("X-FORWARDED-FOR"); - if ( remoteAddr == null || remoteAddr.isEmpty() ) - remoteAddr = request.getRemoteAddr(); - + String remoteAddr = GenericUtils.getRequestorAddress(request); if ( ! remoteAddr.equals(workerInfo.getWorkerIP()) ) { logger.error(initMsg + " The request came from another IP: " + remoteAddr + " | while this worker was registered with the IP: " + workerInfo.getWorkerIP()); return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); diff --git a/src/main/java/eu/openaire/urls_controller/controllers/UrlsController.java b/src/main/java/eu/openaire/urls_controller/controllers/UrlsController.java index 82c7469..7aef602 100644 --- a/src/main/java/eu/openaire/urls_controller/controllers/UrlsController.java +++ b/src/main/java/eu/openaire/urls_controller/controllers/UrlsController.java @@ -5,6 +5,7 @@ import eu.openaire.urls_controller.models.WorkerInfo; import eu.openaire.urls_controller.payloads.requests.WorkerReport; import eu.openaire.urls_controller.services.UrlsService; import eu.openaire.urls_controller.util.FileUtils; +import eu.openaire.urls_controller.util.GenericUtils; import eu.openaire.urls_controller.util.ParquetFileUtils; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -103,9 +104,7 @@ public class UrlsController { logger.error("The \"HttpServletRequest\" is null!"); return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).build(); } - String remoteAddr = request.getHeader("X-FORWARDED-FOR"); - if ( (remoteAddr == null) || remoteAddr.isEmpty() ) - remoteAddr = request.getRemoteAddr(); + String remoteAddr = GenericUtils.getRequestorAddress(request); WorkerInfo workerInfo = workersInfoMap.get(workerId); if ( workerInfo != null ) { // This worker has already been identified. diff --git a/src/main/java/eu/openaire/urls_controller/services/ShutdownServiceImpl.java b/src/main/java/eu/openaire/urls_controller/services/ShutdownServiceImpl.java index 2e86977..a5f891b 100644 --- a/src/main/java/eu/openaire/urls_controller/services/ShutdownServiceImpl.java +++ b/src/main/java/eu/openaire/urls_controller/services/ShutdownServiceImpl.java @@ -1,6 +1,7 @@ package eu.openaire.urls_controller.services; import eu.openaire.urls_controller.controllers.UrlsController; +import eu.openaire.urls_controller.util.GenericUtils; import eu.openaire.urls_controller.util.UriBuilder; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -27,9 +28,7 @@ public class ShutdownServiceImpl implements ShutdownService { logger.error(initMsg + "The \"HttpServletRequest\" is null!"); return ResponseEntity.internalServerError().build(); } - String remoteAddr = request.getHeader("X-FORWARDED-FOR"); - if ( remoteAddr == null || remoteAddr.isEmpty() ) - remoteAddr = request.getRemoteAddr(); + String remoteAddr = GenericUtils.getRequestorAddress(request); // In case the Controller is running inside a docker container, and we want to send the "shutdownServiceRequest" from the terminal (with curl), without entering inside the container, // then the request will appear coming from a local IP (192.168.X.Y), instead of localhost. diff --git a/src/main/java/eu/openaire/urls_controller/util/GenericUtils.java b/src/main/java/eu/openaire/urls_controller/util/GenericUtils.java index a578312..9e6cc85 100644 --- a/src/main/java/eu/openaire/urls_controller/util/GenericUtils.java +++ b/src/main/java/eu/openaire/urls_controller/util/GenericUtils.java @@ -1,5 +1,6 @@ package eu.openaire.urls_controller.util; +import javax.servlet.http.HttpServletRequest; import java.text.SimpleDateFormat; import java.util.Date; @@ -30,4 +31,13 @@ public class GenericUtils { return sb.toString(); } + + public static String getRequestorAddress(HttpServletRequest request) + { + String remoteAddr = request.getHeader("X-FORWARDED-FOR"); // This retrieves the original IP address, if the request passes through a proxy server. + if ( remoteAddr == null ) + remoteAddr = request.getRemoteAddr(); + return remoteAddr; + } + }