summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-07-20 20:32:33 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-08-24 19:48:13 +0200
commitdba8ee7e56896924f63c86f88400f3f6ced2d80a (patch)
tree2a246fd3cc3dba41871938b72423390bae55f5f8
parent791b5d1e443f97adc756264878c3aae41ca0f748 (diff)
Fix reporting of experiment failures
This change fixes an issue where exceptions thrown during a simulation run are swallowed by the experiment runner.
-rw-r--r--simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/reporter/ConsoleExperimentReporter.kt10
-rw-r--r--simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ExperimentScheduler.kt3
-rw-r--r--simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ThreadPoolExperimentScheduler.kt5
3 files changed, 12 insertions, 6 deletions
diff --git a/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/reporter/ConsoleExperimentReporter.kt b/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/reporter/ConsoleExperimentReporter.kt
index f59402d5..b446abc8 100644
--- a/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/reporter/ConsoleExperimentReporter.kt
+++ b/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/reporter/ConsoleExperimentReporter.kt
@@ -30,6 +30,7 @@ import com.atlarge.opendc.experiments.sc20.runner.execution.ExperimentExecutionL
import com.atlarge.opendc.experiments.sc20.runner.execution.ExperimentExecutionResult
import me.tongfei.progressbar.ProgressBar
import me.tongfei.progressbar.ProgressBarBuilder
+import mu.KotlinLogging
/**
* A reporter that reports the experiment progress to the console.
@@ -46,6 +47,11 @@ public class ConsoleExperimentReporter : ExperimentExecutionListener {
private var total = 0
/**
+ * The logger for this reporter.
+ */
+ private val logger = KotlinLogging.logger {}
+
+ /**
* The progress bar to keep track of the progress.
*/
private val pb: ProgressBar = ProgressBarBuilder()
@@ -69,6 +75,10 @@ public class ConsoleExperimentReporter : ExperimentExecutionListener {
pb.close()
}
}
+
+ if (result is ExperimentExecutionResult.Failed) {
+ logger.warn(result.throwable) { "Descriptor $descriptor failed" }
+ }
}
override fun executionStarted(descriptor: ExperimentDescriptor) {}
diff --git a/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ExperimentScheduler.kt b/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ExperimentScheduler.kt
index 0346a7f8..96678abf 100644
--- a/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ExperimentScheduler.kt
+++ b/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ExperimentScheduler.kt
@@ -49,11 +49,10 @@ interface ExperimentScheduler : Closeable {
*
* @param descriptor The descriptor to execute.
* @param context The context to execute the descriptor in.
- * @return The results of the experiment trial.
*/
suspend operator fun invoke(
descriptor: ExperimentDescriptor,
context: ExperimentExecutionContext
- ): ExperimentExecutionResult
+ )
}
}
diff --git a/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ThreadPoolExperimentScheduler.kt b/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ThreadPoolExperimentScheduler.kt
index a7c8ba4d..a8ee59a8 100644
--- a/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ThreadPoolExperimentScheduler.kt
+++ b/simulator/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/runner/execution/ThreadPoolExperimentScheduler.kt
@@ -47,7 +47,7 @@ class ThreadPoolExperimentScheduler(parallelism: Int = Runtime.getRuntime().avai
override suspend fun invoke(
descriptor: ExperimentDescriptor,
context: ExperimentExecutionContext
- ): ExperimentExecutionResult = supervisorScope {
+ ) = supervisorScope {
val listener =
object : ExperimentExecutionListener {
override fun descriptorRegistered(descriptor: ExperimentDescriptor) {
@@ -70,10 +70,7 @@ class ThreadPoolExperimentScheduler(parallelism: Int = Runtime.getRuntime().avai
try {
withContext(dispatcher) {
descriptor(newContext)
- ExperimentExecutionResult.Success
}
- } catch (e: Throwable) {
- ExperimentExecutionResult.Failed(e)
} finally {
tickets.release()
}