summaryrefslogtreecommitdiff
path: root/opendc-web
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-09-10 17:10:42 +0200
committerGitHub <noreply@github.com>2021-09-10 17:10:42 +0200
commitcae193284570d6ee9dbacdde57b3e4e367aa9d9f (patch)
tree205bf08e503bc8b8bb2d5af77f0b4aee819f862b /opendc-web
parent58ac6e203f38ea0122d08c74adf7644c478c3afe (diff)
parentf142be8c2afd1f19bdec183f1169639b7cd1a472 (diff)
merge: Integrate fault injector into compute simulator
This pull request integrates the fault injector into the `opendc-compute-simulator` module, where it is now specialized to inject faults into `SimHost` instances. The previous fault injector implementation supported generic targets, but this caused the implementation to be more complex. Since the fault injector was only used for `SimHost` instances, we have decided to specialize it to `SimHost` for now. - Support generic distribution in fault injector - Terminate servers after reaching deadline - Integrate fault injection into compute simulator - Clarify terminology in compute service ** External Dependencies** - Apache commons-math3 **Breaking API Changes** - Removal of `opendc-simulator-failures` and its corresponding interfaces/classes.
Diffstat (limited to 'opendc-web')
-rw-r--r--opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/Main.kt20
1 files changed, 9 insertions, 11 deletions
diff --git a/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/Main.kt b/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/Main.kt
index 5d481270..b565e90d 100644
--- a/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/Main.kt
+++ b/opendc-web/opendc-web-runner/src/main/kotlin/org/opendc/web/runner/Main.kt
@@ -30,8 +30,8 @@ import io.opentelemetry.api.metrics.MeterProvider
import io.opentelemetry.sdk.metrics.SdkMeterProvider
import io.opentelemetry.sdk.metrics.export.MetricProducer
import kotlinx.coroutines.*
-import kotlinx.coroutines.channels.Channel
import mu.KotlinLogging
+import org.opendc.compute.simulator.SimHost
import org.opendc.experiments.capelin.*
import org.opendc.experiments.capelin.env.EnvironmentReader
import org.opendc.experiments.capelin.env.MachineDef
@@ -188,8 +188,6 @@ class RunnerCli : CliktCommand(name = "runner") {
val seeder = Random(seed)
- val chan = Channel<Unit>(Channel.CONFLATED)
-
val meterProvider: MeterProvider = SdkMeterProvider
.builder()
.setClock(clock.toOtelClock())
@@ -207,31 +205,31 @@ class RunnerCli : CliktCommand(name = "runner") {
val failureFrequency = if (operational.failuresEnabled) 24.0 * 7 else 0.0
withComputeService(clock, meterProvider, environment, allocationPolicy, interferenceModel) { scheduler ->
- val failureDomain = if (failureFrequency > 0) {
+ val faultInjector = if (failureFrequency > 0) {
logger.debug { "ENABLING failures" }
- createFailureDomain(
- this,
+ createFaultInjector(
+ coroutineContext,
clock,
+ scheduler.hosts.map { it as SimHost }.toSet(),
seeder.nextInt(),
failureFrequency,
- scheduler,
- chan
)
} else {
null
}
withMonitor(scheduler, clock, meterProvider as MetricProducer, monitor) {
+ faultInjector?.start()
+
processTrace(
clock,
trace,
scheduler,
- chan,
monitor
)
- }
- failureDomain?.cancel()
+ faultInjector?.close()
+ }
}
val monitorResults = collectServiceMetrics(clock.millis(), metricProducer)