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