summaryrefslogtreecommitdiff
path: root/simulator/opendc-harness
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-01-11 22:28:31 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-01-12 13:15:52 +0100
commit6e4a9dd6af6b768468194b5a2aeffd60836e6407 (patch)
treede5f4f0d2ee1571facea6b5319853b189aa35c0a /simulator/opendc-harness
parentce4b9bd28d9cb24b112a3a4723252c5bbca2fe5b (diff)
Refactor SC18 experiments to use new experiment harness
Diffstat (limited to 'simulator/opendc-harness')
-rw-r--r--simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt21
1 files changed, 4 insertions, 17 deletions
diff --git a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt
index db2cd191..65a0604d 100644
--- a/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt
+++ b/simulator/opendc-harness/src/main/kotlin/org/opendc/harness/engine/ExperimentEngine.kt
@@ -22,13 +22,11 @@
package org.opendc.harness.engine
-import kotlinx.coroutines.CancellationException
+import kotlinx.coroutines.*
import kotlinx.coroutines.flow.asFlow
import kotlinx.coroutines.flow.buffer
import kotlinx.coroutines.flow.collect
import kotlinx.coroutines.flow.map
-import kotlinx.coroutines.launch
-import kotlinx.coroutines.supervisorScope
import org.opendc.harness.api.ExperimentDefinition
import org.opendc.harness.api.Trial
import org.opendc.harness.engine.scheduler.ExperimentScheduler
@@ -53,6 +51,7 @@ public class ExperimentEngine(
*
* @param root The experiment to execute.
*/
+ @OptIn(InternalCoroutinesApi::class)
public suspend fun execute(root: ExperimentDefinition): Unit = supervisorScope {
listener.experimentStarted(root)
@@ -75,25 +74,13 @@ public class ExperimentEngine(
listener.trialFinished(trial, null)
} catch (e: Throwable) {
listener.trialFinished(trial, e)
- throw e
}
}
}
launch {
- var error: Throwable? = null
- for (job in jobs) {
- try {
- job.join()
- } catch (e: CancellationException) {
- // Propagate cancellation
- throw e
- } catch (e: Throwable) {
- error = e
- }
- }
-
- listener.scenarioFinished(scenario, error)
+ jobs.joinAll()
+ listener.scenarioFinished(scenario, null)
}
}
listener.experimentFinished(root, null)