From 27a8f2312bf9207314abb201ed74f021b818f8af Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Tue, 24 Mar 2020 22:58:27 +0100 Subject: bug: Fix race condition in VM provisioner This change fixes a race condition in the VM provisioner where VMs were scheduled based on stale information. --- .../com/atlarge/opendc/experiments/sc20/TestExperiment.kt | 10 ++++++++-- 1 file changed, 8 insertions(+), 2 deletions(-) (limited to 'opendc/opendc-experiments-sc20/src') diff --git a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt index 0fafc118..66b20bff 100644 --- a/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt +++ b/opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt @@ -40,6 +40,7 @@ import com.fasterxml.jackson.module.kotlin.jacksonObjectMapper import com.fasterxml.jackson.module.kotlin.readValue import com.xenomachina.argparser.ArgParser import com.xenomachina.argparser.default +import kotlinx.coroutines.ExperimentalCoroutinesApi import kotlinx.coroutines.channels.Channel import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collect @@ -86,6 +87,7 @@ class ExperimentParameters(parser: ArgParser) { /** * Main entry point of the experiment. */ +@OptIn(ExperimentalCoroutinesApi::class) fun main(args: Array) { ArgParser(args).parseInto(::ExperimentParameters).run { val monitor = Sc20Monitor(outputFile) @@ -111,6 +113,10 @@ fun main(args: Array) { println(simulationContext.clock.instant()) val bareMetalProvisioner = environment.platforms[0].zones[0].services[ProvisioningService.Key] + + // Wait for the bare metal nodes to be spawned + delay(10) + val scheduler = SimpleVirtProvisioningService( AvailableMemoryAllocationPolicy(), simulationContext, @@ -140,9 +146,9 @@ fun main(args: Array) { iatScale = -1.39, iatShape = 1.03, sizeScale = 1.88, sizeShape = 1.25 ) - for (node in bareMetalProvisioner.nodes()) { + // for (node in bareMetalProvisioner.nodes()) { // faultInjector.enqueue(node.metadata["driver"] as FailureDomain) - } + // } } val reader = Sc20TraceReader(File(traceDirectory), performanceInterferenceModel, getSelectedVmList()) -- cgit v1.2.3