From d38b53503149a2bdf9c3568ca79df84c0195e814 Mon Sep 17 00:00:00 2001
From: lorenz <stu203404@mail.uni-kiel.de>
Date: Thu, 25 Mar 2021 19:13:17 +0100
Subject: [PATCH] Fix isRunning + Refactoring

---
 .../theodolite/execution/BenchmarkExecutor.kt |  2 +-
 .../kotlin/theodolite/execution/Shutdown.kt   |  2 +-
 .../execution/TheodoliteController.kt         | 51 +++++++++++--------
 .../execution/TheodoliteExecutor.kt           |  2 +-
 4 files changed, 34 insertions(+), 23 deletions(-)

diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutor.kt
index cbe59dd22..86b6e9416 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutor.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/BenchmarkExecutor.kt
@@ -61,7 +61,7 @@ abstract class BenchmarkExecutor(
             }
         }
 
-        logger.info { "Exucutor shutdown gracefully" }
+        logger.debug { "Executor shutdown gracefully" }
 
     }
 }
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt
index 9ca7e70f6..fe4b983bc 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/Shutdown.kt
@@ -20,7 +20,7 @@ class Shutdown(private val benchmarkExecution: BenchmarkExecution, private val b
                 res = Resource(0, emptyList()),
                 configurationOverrides = benchmarkExecution.configOverrides
             )
-        logger.info { "Teardown the everything deployed" }
+        logger.info { "Teardown everything deployed" }
         deployment.teardown()
         logger.info { "Teardown completed" }
     }
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteController.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteController.kt
index 77f667188..ec5f77637 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteController.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteController.kt
@@ -42,8 +42,8 @@ class TheodoliteController(
                 if (::executor.isInitialized && executor.getExecution().name == newExecution.metadata.name) {
                     logger.info { "restart current benchmark with new version" }
                     executor.stop()
-                    executor = TheodoliteExecutor(config = newExecution, kubernetesBenchmark = executor.getBenchmark())
-                    executor.run()
+                    sleep(2000)
+                    startBenchmark(execution = newExecution, benchmark = executor.getBenchmark())
                 } else {
                     onDelete(oldExecution, false)
                     onAdd(newExecution)
@@ -70,10 +70,11 @@ class TheodoliteController(
             override fun onUpdate(oldBenchmark: KubernetesBenchmark, newBenchmark: KubernetesBenchmark) {
                 logger.info { "Update benchmark ${newBenchmark.metadata.name}" }
                 if (::executor.isInitialized && executor.getBenchmark().name == oldBenchmark.metadata.name) {
+
                     logger.info { "restart current benchmark with new version" }
                     executor.stop()
-                    executor = TheodoliteExecutor(config = executor.getExecution(), kubernetesBenchmark = newBenchmark)
-                    executor.run()
+                    sleep(2000)
+                    startBenchmark(execution = executor.getExecution(), benchmark = newBenchmark)
                 } else {
                     onAdd(newBenchmark)
                 }
@@ -94,8 +95,10 @@ class TheodoliteController(
         while (true) {
             try {
                 reconcile()
-                logger.info { "Theodolite is waiting for new jobs" }
-                sleep(1000)
+                if (this::executor.isInitialized && !executor.isRunning) {
+                    logger.info { "Theodolite is waiting for new jobs" }
+                    sleep(1000)
+                }
             } catch (e: InterruptedException) {
                 logger.error { "Execution interrupted with error: $e" }
             }
@@ -114,21 +117,29 @@ class TheodoliteController(
                 logger.debug { "No benchmark found for execution ${execution.benchmark}" }
                 sleep(1000)
             } else {
-                logger.info { "Start execution ${execution.name} with benchmark ${benchmark.name}" }
-                executor = TheodoliteExecutor(config = execution, kubernetesBenchmark = benchmark)
-                executor.run()
-                // wait until executions is deleted
-                try {
-                    client.customResource(executionContext).delete(client.namespace, execution.metadata.name)
-                    while (executionsQueue.contains(execution)) {
-                        logger.info { "sleep" }
-                        sleep(1000)
-                    }
-                } catch (e: Exception) {
-                    logger.error { "Error while delete current execution: $e" }
-                }
-                logger.info { "Execution is finally stopped for execution ${execution.name}" }
+                startBenchmark(execution, benchmark)
+            }
+        }
+    }
+
+
+    fun startBenchmark(execution: BenchmarkExecution, benchmark: KubernetesBenchmark) {
+
+        logger.info { "Start execution ${execution.name} with benchmark ${benchmark.name}" }
+        executor = TheodoliteExecutor(config = execution, kubernetesBenchmark = benchmark)
+        executor.run()
+        // wait until execution is deleted
+        try {
+            client.customResource(executionContext).delete(client.namespace, execution.metadata.name)
+            sleep(1000)
+            while (executionsQueue.contains(execution)) {
+                sleep(2000)
+                logger.info { "Delete of execution: ${execution.name} failed. Retrying in 2 second." }
+                client.customResource(executionContext).delete(client.namespace, execution.metadata.name)
             }
+        } catch (e: Exception) {
+            logger.error { "Error while delete current execution: $e" }
         }
+        logger.info { "Execution of ${execution.name} is finally stopped" }
     }
 }
diff --git a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
index e831bcc1d..2ed356a79 100644
--- a/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
+++ b/theodolite-quarkus/src/main/kotlin/theodolite/execution/TheodoliteExecutor.kt
@@ -103,11 +103,11 @@ class TheodoliteExecutor(
                 }
             }
             logger.info { "Stop Thread" }
+            isRunning = false
         }
     }
 
     fun stop() {
-        // TODO call shutdown hook
         isRunning = false
         try {
             executor.stop()
-- 
GitLab