From b293bbfef806967cc2c542ec08fc25a2eb1a91c5 Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Wed, 17 Nov 2021 10:11:13 +0100 Subject: [PATCH 1/4] cutting unnecessary prefix from hardware id --- .../adapter/planexecutor/colosseum/NodeTaskExecutor.java | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java b/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java index 559800a51..25aa1da05 100644 --- a/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java +++ b/adapter/src/main/java/eu/melodic/upperware/adapter/planexecutor/colosseum/NodeTaskExecutor.java @@ -59,11 +59,16 @@ public class NodeTaskExecutor extends RunnableTaskExecutor { nodeJSON.put("taskName", taskBody.getTaskName()); nodeJSON.put("nodeName", taskBody.getNodeName()); JSONObject nodeCandidateInformationJSON = new JSONObject(); + if(taskBody.getNodeCandidate().getCloud().getApi().getProviderName().equals("openstack")){ + nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId().substring(4), "hardwareProviderId")); + }else{ + nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId(), "hardwareProviderId")); + } + nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId(), "hardwareProviderId")); nodeCandidateInformationJSON.put("ID", checkEmptiness(taskBody.getNodeCandidate().getId(), "ID")); nodeCandidateInformationJSON.put("cloudID", checkEmptiness(taskBody.getNodeCandidate().getCloud().getId(), "cloudID")); nodeCandidateInformationJSON.put("locationName", checkEmptiness(taskBody.getNodeCandidate().getLocation().getName(), "locationName")); nodeCandidateInformationJSON.put("imageProviderId", checkEmptiness(taskBody.getNodeCandidate().getImage().getProviderId(), "imageProviderId")); - nodeCandidateInformationJSON.put("hardwareProviderId", checkEmptiness(taskBody.getNodeCandidate().getHardware().getProviderId(), "hardwareProviderId")); nodeJSON.put("nodeCandidateInformation", nodeCandidateInformationJSON); nodesJSONArray.put(nodeJSON); log.info("NodeTaskExecutor->addIAASNode: [application id: {}] ProActive node(s) (JSONArray): \n{}", applicationId, nodesJSONArray); -- GitLab From 1e30a89f1dec0c455fceb7f49080468adbc04ecf Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Fri, 19 Nov 2021 09:19:23 +0100 Subject: [PATCH 2/4] Adding new cloud type- BYON --- .../eu/passage/upperware/commons/model/internal/CloudType.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/melodic-commons/src/main/java/eu/passage/upperware/commons/model/internal/CloudType.java b/melodic-commons/src/main/java/eu/passage/upperware/commons/model/internal/CloudType.java index 06dc85b9b..e427760ca 100644 --- a/melodic-commons/src/main/java/eu/passage/upperware/commons/model/internal/CloudType.java +++ b/melodic-commons/src/main/java/eu/passage/upperware/commons/model/internal/CloudType.java @@ -3,5 +3,6 @@ package eu.passage.upperware.commons.model.internal; public enum CloudType { PRIVATE, PUBLIC, - SIMULATION; + SIMULATION, + BYON; } -- GitLab From 5a57ea64be3e7ab88a1a6893ee82c795d4d3ee1b Mon Sep 17 00:00:00 2001 From: ipatini Date: Wed, 24 Nov 2021 11:19:51 +0200 Subject: [PATCH 3/4] EMS: Control Service: Added EMS server exit endpoint. Modified run.* to support restart --- event-management/bin/run.bat | 9 +++++++ event-management/bin/run.sh | 16 +++++++++---- .../control/ControlServiceApplication.java | 24 ++++++++++++------- .../control/ControlServiceController.java | 22 +++++++++++++---- .../control/ControlServiceCoordinator.java | 7 +++++- 5 files changed, 59 insertions(+), 19 deletions(-) diff --git a/event-management/bin/run.bat b/event-management/bin/run.bat index 705597fad..d156520fa 100644 --- a/event-management/bin/run.bat +++ b/event-management/bin/run.bat @@ -62,12 +62,21 @@ rem set JAVA_OPTS=-Djavax.net.debug=all echo MELODIC_CONFIG_DIR=%MELODIC_CONFIG_DIR% echo Starting EMS server... +IF NOT DEFINED RESTART_EXIT_CODE set RESTART_EXIT_CODE=99 +:_restart_ems + rem Use when Esper is packaged in control-service.jar rem java %JAVA_OPTS% -Djasypt.encryptor.password=%JASYPT_PASSWORD% -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -jar %JARS_DIR%\control-service.jar --logging.config=file:%LOG_CONFIG_FILE% rem Use when Esper is NOT packaged in control-service.jar java %JAVA_OPTS% -Djasypt.encryptor.password=%JASYPT_PASSWORD% -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -cp %JARS_DIR%\control-service.jar -Dloader.path=%JARS_DIR%\esper-7.1.0.jar org.springframework.boot.loader.PropertiesLauncher -nolog --logging.config=file:%LOG_CONFIG_FILE% %* +if errorlevel %RESTART_EXIT_CODE% ( + echo Restarting EMS server... + goto :_restart_ems +) +echo EMS server exited + rem e.g. --spring.config.location=%MELODIC_CONFIG_DIR%\ rem e.g. --spring.config.name=application.properties diff --git a/event-management/bin/run.sh b/event-management/bin/run.sh index bf17867e3..7aef86f03 100755 --- a/event-management/bin/run.sh +++ b/event-management/bin/run.sh @@ -66,11 +66,19 @@ fi echo "MELODIC_CONFIG_DIR=${MELODIC_CONFIG_DIR}" echo "Starting EMS server..." -# Use when Esper is packaged in control-service.jar -# java $JAVA_OPTS -Djasypt.encryptor.password=$JASYPT_PASSWORD -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -jar $JARS_DIR/control-service/target/control-service.jar --logging.config=file:$LOG_CONFIG_FILE +if [[ -z $RESTART_EXIT_CODE ]]; then RESTART_EXIT_CODE=99; export RESTART_EXIT_CODE; fi +retCode=$RESTART_EXIT_CODE +while :; do + # Use when Esper is packaged in control-service.jar + # java $JAVA_OPTS -Djasypt.encryptor.password=$JASYPT_PASSWORD -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -jar $JARS_DIR/control-service/target/control-service.jar --logging.config=file:$LOG_CONFIG_FILE -# Use when Esper is NOT packaged in control-service.jar -java $JAVA_OPTS -Djasypt.encryptor.password=$JASYPT_PASSWORD -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -cp ${JARS_DIR}/control-service.jar -Dloader.path=${JARS_DIR}/esper-7.1.0.jar org.springframework.boot.loader.PropertiesLauncher --logging.config=file:$LOG_CONFIG_FILE $* + # Use when Esper is NOT packaged in control-service.jar + java $JAVA_OPTS -Djasypt.encryptor.password=$JASYPT_PASSWORD -Duser.timezone=Europe/Warsaw -Djava.security.egd=file:/dev/urandom -cp ${JARS_DIR}/control-service.jar -Dloader.path=${JARS_DIR}/esper-7.1.0.jar org.springframework.boot.loader.PropertiesLauncher --logging.config=file:$LOG_CONFIG_FILE $* + + retCode=$? + if [[ $retCode -eq $RESTART_EXIT_CODE ]]; then echo "Restarting EMS server..."; else break; fi +done +echo "EMS server exited" # Extra parameters # e.g. --spring.config.location=$MELODIC_CONFIG_DIR diff --git a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceApplication.java b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceApplication.java index 3913e1cde..923581db5 100644 --- a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceApplication.java +++ b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceApplication.java @@ -91,22 +91,28 @@ public class ControlServiceApplication implements ApplicationContextAware { synchronized static void exitApp(int exitCode, long gracePeriod) { if (exitTimer==null) { - // Close SpringBoot application - log.info("ControlServiceApplication.exitApp(): Closing application context..."); - ExitCodeGenerator exitCodeGenerator = () -> exitCode; - SpringApplication.exit(applicationContext, exitCodeGenerator); - - // Wait for 'gracePeriod' seconds before force JVM to exit + // Wait for 'gracePeriod' seconds before forcing JVM to exit log.info("ControlServiceApplication.exitApp(): Wait for {}sec before exit", gracePeriod); - exitTimer = new Timer("exit-app-grace-period-timer", true); + exitTimer = new Timer("exit-timer", true); exitTimer.schedule(new TimerTask() { @Override public void run() { - log.info("ControlServiceApplication.exitApp(): Exiting..."); + log.info("ControlServiceApplication.exitApp(): exit-timer: Exiting with code: {}", exitCode); System.exit(exitCode); - log.info("ControlServiceApplication.exitApp(): Bye"); + log.info("ControlServiceApplication.exitApp(): exit-timer: Bye"); } }, gracePeriod * 1000); + + // Close SpringBoot application + log.info("ControlServiceApplication.exitApp(): Closing application context..."); + ExitCodeGenerator exitCodeGenerator = () -> { + log.info("ControlServiceApplication.exitApp(): exitCodeGenerator: Exit code: {}", exitCode); + return exitCode; + }; + SpringApplication.exit(applicationContext, exitCodeGenerator); + log.info("ControlServiceApplication.exitApp(): Exiting with code: {}", exitCode); + System.exit(exitCode); + } else { log.warn("ControlServiceApplication.exitApp(): Exit timer has already started: {}", exitTimer); } diff --git a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceController.java b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceController.java index 87d88092a..9d0b932d7 100644 --- a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceController.java +++ b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceController.java @@ -433,15 +433,27 @@ public class ControlServiceController { // EMS status and information query methods // ------------------------------------------------------------------------------------------------------------ - @RequestMapping(value = { "/ems/shutdown", "/ems/shutdown/{exitApp}" }, method = {GET, POST}) - public String emsShutdown(@PathVariable Optional exitApp) { - boolean _exitApp = exitApp.orElse(false); - log.info("ControlServiceController.emsShutdown(): exitApp={}", _exitApp); + @RequestMapping(value = "/ems/shutdown", method = {GET, POST}) + public String emsShutdown() { + log.info("ControlServiceController.emsShutdown(): "); coordinator.emsShutdown(); - if (_exitApp) coordinator.emsExit(); return "OK"; } + @RequestMapping(value = { "/ems/exit", "/ems/exit/{exitCode}" }, method = {GET, POST}) + public String emsExit(@PathVariable Optional exitCode) { + if (properties.isExitAllowed()) { + int _exitCode = exitCode.orElse(properties.getExitCode()); + log.info("ControlServiceController.emsExit(): exitCode={}", _exitCode); + coordinator.emsShutdown(); + coordinator.emsExit(_exitCode); + return "OK"; + } else { + log.info("ControlServiceController.emsExit(): Exiting EMS is not allowed"); + return "NOT ALLOWED"; + } + } + @RequestMapping(value = "/ems/status", method = {GET, POST}, produces = MediaType.APPLICATION_JSON_UTF8_VALUE) public String emsStatus() { diff --git a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceCoordinator.java b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceCoordinator.java index 3fa702d22..9f528cdda 100644 --- a/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceCoordinator.java +++ b/event-management/control-service/src/main/java/eu/melodic/event/control/ControlServiceCoordinator.java @@ -685,10 +685,15 @@ public class ControlServiceCoordinator { @Async synchronized void emsExit() { + emsExit(properties.getExitCode()); + } + + @Async + synchronized void emsExit(int exitCode) { if (properties.isExitAllowed()) { // Signal SpringBootApp to exit log.info("ControlServiceCoordinator.emsExit(): Signaling exit..."); - ControlServiceApplication.exitApp(properties.getExitCode(), properties.getExitGracePeriod()); + ControlServiceApplication.exitApp(exitCode, properties.getExitGracePeriod()); log.info("ControlServiceCoordinator.emsExit(): Signaling exit... done"); } else { log.warn("ControlServiceCoordinator.emsExit(): Exit is not allowed"); -- GitLab From 3e792223afa4f4836340ad9668e4bda6aaf7f70e Mon Sep 17 00:00:00 2001 From: Jan Marchel Date: Fri, 26 Nov 2021 11:26:13 +0100 Subject: [PATCH 4/4] cleaning byon nodes from sal --- .../proactive/ProactiveClientServiceGUI.java | 2 ++ .../proactive/ProactiveClientServiceGUIImpl.java | 5 +++++ .../guibackend/controller/byon/ByonController.java | 8 ++++++++ .../upperware/guibackend/service/byon/ByonService.java | 10 ++++++++++ 4 files changed, 25 insertions(+) diff --git a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUI.java b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUI.java index b0d71ce8a..180b8c27e 100644 --- a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUI.java +++ b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUI.java @@ -26,4 +26,6 @@ public interface ProactiveClientServiceGUI extends IProactiveClientServiceConnec List getAllNodes(); List getAllMonitors(); + + boolean deleteByonNode(String byonId); } diff --git a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUIImpl.java b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUIImpl.java index 484522982..440ea1104 100644 --- a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUIImpl.java +++ b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/communication/proactive/ProactiveClientServiceGUIImpl.java @@ -64,4 +64,9 @@ public class ProactiveClientServiceGUIImpl extends ProactiveClientServiceConnect public List getAllMonitors() { return getPAGateway().map(PAGateway::getMonitorsList).orElse(Collections.emptyList()); } + + @Override + public boolean deleteByonNode(String byonId) { + return getPAGateway().map(paGateway -> paGateway.deleteByonNode(byonId)).orElse(false); + } } diff --git a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/controller/byon/ByonController.java b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/controller/byon/ByonController.java index 15ab5cded..3246e260f 100644 --- a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/controller/byon/ByonController.java +++ b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/controller/byon/ByonController.java @@ -95,4 +95,12 @@ public class ByonController { log.info("GET request for byon enums"); return byonService.getByonEnums(); } + + @PutMapping("/cleanByon") + @ResponseStatus(HttpStatus.NO_CONTENT) + public void cleanByonNodes() { + log.info("Put request for byon nodes purging"); + byonService.cleanByon(); + log.info("Put request for byon nodes purging finished"); + } } diff --git a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/service/byon/ByonService.java b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/service/byon/ByonService.java index 9ef14da97..111587778 100644 --- a/gui-backend/src/main/java/eu/melodic/upperware/guibackend/service/byon/ByonService.java +++ b/gui-backend/src/main/java/eu/melodic/upperware/guibackend/service/byon/ByonService.java @@ -199,4 +199,14 @@ public class ByonService { return byonNodes; } + + public void cleanByon() { + log.info("[ByonService]: cleanByon starting"); + List byonNodeList = getAllByonNodesList(); + for(ByonNode byonNode : byonNodeList) { + String byonId = byonNode.getId(); + log.info("[ByonService]: deletingByon for id: {}", byonId); + proactiveClientServiceGUI.deleteByonNode(byonId); + } + } } -- GitLab