summaryrefslogtreecommitdiff
path: root/opendc-experiments/opendc-experiments-base/src/main
diff options
context:
space:
mode:
authorDante Niewenhuis <d.niewenhuis@hotmail.com>2024-09-12 15:32:47 +0200
committerGitHub <noreply@github.com>2024-09-12 15:32:47 +0200
commit5047e4a25a0814f96852882f02c4017e1d5f81e7 (patch)
tree348f064fd8e03a2a64fc5b30406e992586b4aac0 /opendc-experiments/opendc-experiments-base/src/main
parentad8051faa1f0a6e7f78384e9e0607e847848c033 (diff)
Added max number of failures (#254)
* Added a max failure for tasks. If tasks fail more times, they get cancelled * Added maxNumFailures to the frontend * Updated tests
Diffstat (limited to 'opendc-experiments/opendc-experiments-base/src/main')
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt7
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt1
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ExperimentFactories.kt13
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt13
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ExperimentSpec.kt8
-rw-r--r--opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenarioSpec.kt1
6 files changed, 22 insertions, 21 deletions
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt
index f5829f6d..49fa409e 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioReplayer.kt
@@ -125,13 +125,6 @@ public suspend fun ComputeService.replay(
val checkpointDuration = checkpointModelSpec?.checkpointDuration ?: 0L
val checkpointIntervalScaling = checkpointModelSpec?.checkpointIntervalScaling ?: 1.0
-// val workload = SimRuntimeWorkload(
-// entry.duration,
-// 1.0,
-// checkpointTime,
-// checkpointWait
-// )
-
val workload = entry.trace.createWorkload(start, checkpointInterval, checkpointDuration, checkpointIntervalScaling)
val meta = mutableMapOf<String, Any>("workload" to workload)
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
index 074fe49c..2bd9dfa3 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/runner/ScenarioRunner.kt
@@ -87,6 +87,7 @@ public fun runScenario(
setupComputeService(
serviceDomain,
{ createComputeScheduler(scenario.allocationPolicySpec.policyType, Random(it.seeder.nextLong())) },
+ maxNumFailures = scenario.maxNumFailures,
),
setupHosts(serviceDomain, topology, optimize = true),
)
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ExperimentFactories.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ExperimentFactories.kt
index b364ffe6..ca0578a2 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ExperimentFactories.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/ExperimentFactories.kt
@@ -71,18 +71,19 @@ public fun getExperiment(experimentSpec: ExperimentSpec): List<Scenario> {
val scenario =
Scenario(
id = scenarioID,
+ name = scenarioID.toString(),
+ outputFolder = outputFolder,
+ runs = experimentSpec.runs,
+ initialSeed = experimentSpec.initialSeed,
+ computeExportConfig = scenarioSpec.computeExportConfig,
topologySpec = scenarioSpec.topology,
workloadSpec = scenarioSpec.workload,
allocationPolicySpec = scenarioSpec.allocationPolicy,
+ exportModelSpec = scenarioSpec.exportModel,
failureModelSpec = scenarioSpec.failureModel,
checkpointModelSpec = scenarioSpec.checkpointModel,
carbonTracePath = scenarioSpec.carbonTracePath,
- exportModelSpec = scenarioSpec.exportModel,
- outputFolder = outputFolder,
- name = scenarioID.toString(),
- runs = experimentSpec.runs,
- initialSeed = experimentSpec.initialSeed,
- computeExportConfig = scenarioSpec.computeExportConfig,
+ maxNumFailures = scenarioSpec.maxNumFailures,
)
trackScenario(scenarioSpec, outputFolder)
scenarios.add(scenario)
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt
index c31f0300..91cd09ba 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/Scenario.kt
@@ -46,16 +46,17 @@ import org.opendc.experiments.base.scenario.specs.WorkloadSpec
*/
public data class Scenario(
var id: Int = -1,
+ val name: String = "",
+ val outputFolder: String = "output",
+ val runs: Int = 1,
+ val initialSeed: Int = 0,
+ val computeExportConfig: ComputeExportConfig,
val topologySpec: ScenarioTopologySpec,
val workloadSpec: WorkloadSpec,
val allocationPolicySpec: AllocationPolicySpec,
+ val exportModelSpec: ExportModelSpec = ExportModelSpec(),
val failureModelSpec: FailureModelSpec?,
val checkpointModelSpec: CheckpointModelSpec?,
val carbonTracePath: String? = null,
- val exportModelSpec: ExportModelSpec = ExportModelSpec(),
- val outputFolder: String = "output",
- val computeExportConfig: ComputeExportConfig,
- val name: String = "",
- val runs: Int = 1,
- val initialSeed: Int = 0,
+ val maxNumFailures: Int = 10,
)
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ExperimentSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ExperimentSpec.kt
index db26849e..67d45e89 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ExperimentSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ExperimentSpec.kt
@@ -57,6 +57,7 @@ public data class ExperimentSpec(
val checkpointModels: Set<CheckpointModelSpec?> = setOf(null),
val carbonTracePaths: Set<String?> = setOf(null),
val computeExportConfig: ComputeExportConfig = ComputeExportConfig.ALL_COLUMNS,
+ val maxNumFailures: Set<Int> = setOf(10),
) {
init {
require(runs > 0) { "The number of runs should always be positive" }
@@ -73,7 +74,8 @@ public data class ExperimentSpec(
public fun getCartesian(): Sequence<ScenarioSpec> {
return sequence {
- val checkpointDiv = carbonTracePaths.size
+ val carbonTracePathDiv = maxNumFailures.size
+ val checkpointDiv = carbonTracePathDiv * carbonTracePaths.size
val failureDiv = checkpointDiv * checkpointModels.size
val exportDiv = failureDiv * failureModels.size
val allocationDiv = exportDiv * exportModels.size
@@ -88,6 +90,7 @@ public data class ExperimentSpec(
val failureModelList = failureModels.toList()
val checkpointModelList = checkpointModels.toList()
val carbonTracePathList = carbonTracePaths.toList()
+ val maxNumFailuresList = maxNumFailures.toList()
for (i in 0 until numScenarios) {
yield(
@@ -102,7 +105,8 @@ public data class ExperimentSpec(
exportModelList[(i / exportDiv) % exportModelList.size],
failureModelList[(i / failureDiv) % failureModelList.size],
checkpointModelList[(i / checkpointDiv) % checkpointModelList.size],
- carbonTracePathList[i % carbonTracePathList.size],
+ carbonTracePathList[(i / carbonTracePathDiv) % carbonTracePathList.size],
+ maxNumFailuresList[i % maxNumFailuresList.size],
),
)
}
diff --git a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenarioSpec.kt b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenarioSpec.kt
index 41e9a885..d7fdb8f4 100644
--- a/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenarioSpec.kt
+++ b/opendc-experiments/opendc-experiments-base/src/main/kotlin/org/opendc/experiments/base/scenario/specs/ScenarioSpec.kt
@@ -38,4 +38,5 @@ public data class ScenarioSpec(
val failureModel: FailureModelSpec? = null,
val checkpointModel: CheckpointModelSpec? = null,
val carbonTracePath: String? = null,
+ val maxNumFailures: Int = 10,
)