summaryrefslogtreecommitdiff
path: root/simulator/opendc-experiments
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2021-03-08 22:19:37 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2021-03-08 22:19:37 +0100
commite97774dbf274fcb57b9d173f9d674a2ef1b982af (patch)
tree7d98f62a230ca33d32e71e8bed045874f97a9619 /simulator/opendc-experiments
parent75751865179c6cd5a05abb4a0641193595f59b45 (diff)
compute: Remove use of bare-metal provisioning from compute module
This change removes the usage of bare-metal provisioning from the OpenDC Compute module. This significantly simplifies the experiment setup.
Diffstat (limited to 'simulator/opendc-experiments')
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt97
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt9
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt13
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt24
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt4
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt4
-rw-r--r--simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt18
-rw-r--r--simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt28
8 files changed, 80 insertions, 117 deletions
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
index a5cf4fc0..f2f53917 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/ExperimentHelpers.kt
@@ -20,7 +20,7 @@
* SOFTWARE.
*/
-package org.opendc.experiments.capelin.experiment
+package org.opendc.experiments.capelin
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.ExperimentalCoroutinesApi
@@ -39,23 +39,20 @@ import org.opendc.compute.api.ServerState
import org.opendc.compute.api.ServerWatcher
import org.opendc.compute.service.ComputeService
import org.opendc.compute.service.ComputeServiceEvent
+import org.opendc.compute.service.driver.Host
import org.opendc.compute.service.driver.HostEvent
+import org.opendc.compute.service.driver.HostListener
+import org.opendc.compute.service.driver.HostState
import org.opendc.compute.service.internal.ComputeServiceImpl
import org.opendc.compute.service.scheduler.AllocationPolicy
-import org.opendc.compute.simulator.SimBareMetalDriver
import org.opendc.compute.simulator.SimHost
-import org.opendc.compute.simulator.SimHostProvisioner
import org.opendc.experiments.capelin.monitor.ExperimentMonitor
import org.opendc.experiments.capelin.trace.Sc20StreamingParquetTraceReader
import org.opendc.format.environment.EnvironmentReader
import org.opendc.format.trace.TraceReader
-import org.opendc.metal.NODE_CLUSTER
-import org.opendc.metal.NodeEvent
-import org.opendc.metal.service.ProvisioningService
import org.opendc.simulator.compute.SimFairShareHypervisorProvider
import org.opendc.simulator.compute.interference.PerformanceInterferenceModel
import org.opendc.simulator.failures.CorrelatedFaultInjector
-import org.opendc.simulator.failures.FailureDomain
import org.opendc.simulator.failures.FaultInjector
import org.opendc.trace.core.EventTracer
import java.io.File
@@ -72,20 +69,20 @@ private val logger = KotlinLogging.logger {}
/**
* Construct the failure domain for the experiments.
*/
-public suspend fun createFailureDomain(
+public fun createFailureDomain(
coroutineScope: CoroutineScope,
clock: Clock,
seed: Int,
failureInterval: Double,
- bareMetalProvisioner: ProvisioningService,
+ service: ComputeService,
chan: Channel<Unit>
): CoroutineScope {
val job = coroutineScope.launch {
chan.receive()
val random = Random(seed)
val injectors = mutableMapOf<String, FaultInjector>()
- for (node in bareMetalProvisioner.nodes()) {
- val cluster = node.metadata[NODE_CLUSTER] as String
+ for (host in service.hosts) {
+ val cluster = host.meta["cluster"] as String
val injector =
injectors.getOrPut(cluster) {
createFaultInjector(
@@ -95,7 +92,7 @@ public suspend fun createFailureDomain(
failureInterval
)
}
- injector.enqueue(node.metadata["driver"] as FailureDomain)
+ injector.enqueue(host as SimHost)
}
}
return CoroutineScope(coroutineScope.coroutineContext + job)
@@ -139,41 +136,39 @@ public fun createTraceReader(
)
}
-public data class ProvisionerResult(
- val metal: ProvisioningService,
- val provisioner: SimHostProvisioner,
- val compute: ComputeServiceImpl
-)
-
/**
- * Construct the environment for a VM provisioner and return the provisioner instance.
+ * Construct the environment for a simulated compute service..
*/
-public suspend fun createProvisioner(
+public fun createComputeService(
coroutineScope: CoroutineScope,
clock: Clock,
environmentReader: EnvironmentReader,
allocationPolicy: AllocationPolicy,
eventTracer: EventTracer
-): ProvisionerResult {
- val environment = environmentReader.use { it.construct(coroutineScope, clock) }
- val bareMetalProvisioner = environment.platforms[0].zones[0].services[ProvisioningService]
-
- // Wait for the bare metal nodes to be spawned
- delay(10)
-
- val provisioner = SimHostProvisioner(coroutineScope.coroutineContext, bareMetalProvisioner, SimFairShareHypervisorProvider())
- val hosts = provisioner.provisionAll()
+): ComputeServiceImpl {
+ val hosts = environmentReader
+ .use { it.read() }
+ .map { def ->
+ SimHost(
+ def.uid,
+ def.name,
+ def.model,
+ def.meta,
+ coroutineScope.coroutineContext,
+ clock,
+ SimFairShareHypervisorProvider(),
+ def.powerModel
+ )
+ }
- val scheduler = ComputeService(coroutineScope.coroutineContext, clock, eventTracer, allocationPolicy) as ComputeServiceImpl
+ val scheduler =
+ ComputeService(coroutineScope.coroutineContext, clock, eventTracer, allocationPolicy) as ComputeServiceImpl
for (host in hosts) {
scheduler.addHost(host)
}
- // Wait for the hypervisors to be spawned
- delay(10)
-
- return ProvisionerResult(bareMetalProvisioner, provisioner, scheduler)
+ return scheduler
}
/**
@@ -186,25 +181,16 @@ public fun attachMonitor(
scheduler: ComputeService,
monitor: ExperimentMonitor
) {
-
- val hypervisors = scheduler.hosts
-
- // Monitor hypervisor events
- for (hypervisor in hypervisors) {
- // TODO Do not expose Host directly but use Hypervisor class.
- val server = (hypervisor as SimHost).node
- monitor.reportHostStateChange(clock.millis(), hypervisor, server)
- server.events
- .onEach { event ->
- val time = clock.millis()
- when (event) {
- is NodeEvent.StateChanged -> {
- monitor.reportHostStateChange(time, hypervisor, event.node)
- }
- }
+ // Monitor host events
+ for (host in scheduler.hosts) {
+ monitor.reportHostStateChange(clock.millis(), host, HostState.UP)
+ host.addListener(object : HostListener {
+ override fun onStateChanged(host: Host, newState: HostState) {
+ monitor.reportHostStateChange(clock.millis(), host, newState)
}
- .launchIn(coroutineScope)
- hypervisor.events
+ })
+
+ host.events
.onEach { event ->
when (event) {
is HostEvent.SliceFinished -> monitor.reportHostSlice(
@@ -216,15 +202,14 @@ public fun attachMonitor(
event.cpuUsage,
event.cpuDemand,
event.numberOfDeployedImages,
- (event.driver as SimHost).node
+ event.driver
)
}
}
.launchIn(coroutineScope)
- val driver = server.metadata["driver"] as SimBareMetalDriver
- driver.powerDraw
- .onEach { monitor.reportPowerConsumption(server, it) }
+ (host as SimHost).powerDraw
+ .onEach { monitor.reportPowerConsumption(host, it) }
.launchIn(coroutineScope)
}
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt
index ff0a026d..f9c96bb6 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/Portfolio.kt
@@ -35,10 +35,6 @@ import org.opendc.compute.service.scheduler.NumberOfActiveServersAllocationPolic
import org.opendc.compute.service.scheduler.ProvisionedCoresAllocationPolicy
import org.opendc.compute.service.scheduler.RandomAllocationPolicy
import org.opendc.compute.simulator.allocation.*
-import org.opendc.experiments.capelin.experiment.attachMonitor
-import org.opendc.experiments.capelin.experiment.createFailureDomain
-import org.opendc.experiments.capelin.experiment.createProvisioner
-import org.opendc.experiments.capelin.experiment.processTrace
import org.opendc.experiments.capelin.model.CompositeWorkload
import org.opendc.experiments.capelin.model.OperationalPhenomena
import org.opendc.experiments.capelin.model.Topology
@@ -157,7 +153,7 @@ public abstract class Portfolio(name: String) : Experiment(name) {
)
testScope.launch {
- val (bareMetalProvisioner, provisioner, scheduler) = createProvisioner(
+ val scheduler = createComputeService(
this,
clock,
environment,
@@ -172,7 +168,7 @@ public abstract class Portfolio(name: String) : Experiment(name) {
clock,
seeder.nextInt(),
operationalPhenomena.failureFrequency,
- bareMetalProvisioner,
+ scheduler,
chan
)
} else {
@@ -197,7 +193,6 @@ public abstract class Portfolio(name: String) : Experiment(name) {
failureDomain?.cancel()
scheduler.close()
- provisioner.close()
}
try {
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt
index 1e42cf56..14cc06dc 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ExperimentMonitor.kt
@@ -26,7 +26,7 @@ import org.opendc.compute.api.Server
import org.opendc.compute.api.ServerState
import org.opendc.compute.service.ComputeServiceEvent
import org.opendc.compute.service.driver.Host
-import org.opendc.metal.Node
+import org.opendc.compute.service.driver.HostState
import java.io.Closeable
/**
@@ -41,17 +41,12 @@ public interface ExperimentMonitor : Closeable {
/**
* This method is invoked when the state of a host changes.
*/
- public fun reportHostStateChange(
- time: Long,
- driver: Host,
- host: Node
- ) {
- }
+ public fun reportHostStateChange(time: Long, host: Host, newState: HostState) {}
/**
* Report the power consumption of a host.
*/
- public fun reportPowerConsumption(host: Node, draw: Double) {}
+ public fun reportPowerConsumption(host: Host, draw: Double) {}
/**
* This method is invoked for a host for each slice that is finishes.
@@ -65,7 +60,7 @@ public interface ExperimentMonitor : Closeable {
cpuUsage: Double,
cpuDemand: Double,
numberOfDeployedImages: Int,
- host: Node,
+ host: Host,
duration: Long = 5 * 60 * 1000L
) {
}
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt
index 98052214..c9d57a98 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/monitor/ParquetExperimentMonitor.kt
@@ -27,11 +27,11 @@ import org.opendc.compute.api.Server
import org.opendc.compute.api.ServerState
import org.opendc.compute.service.ComputeServiceEvent
import org.opendc.compute.service.driver.Host
+import org.opendc.compute.service.driver.HostState
import org.opendc.experiments.capelin.telemetry.HostEvent
import org.opendc.experiments.capelin.telemetry.ProvisionerEvent
import org.opendc.experiments.capelin.telemetry.parquet.ParquetHostEventWriter
import org.opendc.experiments.capelin.telemetry.parquet.ParquetProvisionerEventWriter
-import org.opendc.metal.Node
import java.io.File
/**
@@ -51,7 +51,7 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
File(base, "provisioner-metrics/$partition/data.parquet"),
bufferSize
)
- private val currentHostEvent = mutableMapOf<Node, HostEvent>()
+ private val currentHostEvent = mutableMapOf<Host, HostEvent>()
private var startTime = -1L
override fun reportVmStateChange(time: Long, server: Server, newState: ServerState) {
@@ -63,12 +63,8 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
}
}
- override fun reportHostStateChange(
- time: Long,
- driver: Host,
- host: Node
- ) {
- logger.debug { "Host ${host.uid} changed state ${host.state} [$time]" }
+ override fun reportHostStateChange(time: Long, host: Host, newState: HostState) {
+ logger.debug { "Host ${host.uid} changed state $newState [$time]" }
val previousEvent = currentHostEvent[host]
@@ -97,9 +93,9 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
)
}
- private val lastPowerConsumption = mutableMapOf<Node, Double>()
+ private val lastPowerConsumption = mutableMapOf<Host, Double>()
- override fun reportPowerConsumption(host: Node, draw: Double) {
+ override fun reportPowerConsumption(host: Host, draw: Double) {
lastPowerConsumption[host] = draw
}
@@ -112,7 +108,7 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
cpuUsage: Double,
cpuDemand: Double,
numberOfDeployedImages: Int,
- host: Node,
+ host: Host,
duration: Long
) {
val previousEvent = currentHostEvent[host]
@@ -130,7 +126,7 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
cpuUsage,
cpuDemand,
lastPowerConsumption[host] ?: 200.0,
- host.flavor.cpuCount
+ host.model.cpuCount
)
currentHostEvent[host] = event
@@ -148,7 +144,7 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
cpuUsage,
cpuDemand,
lastPowerConsumption[host] ?: 200.0,
- host.flavor.cpuCount
+ host.model.cpuCount
)
currentHostEvent[host] = event
@@ -168,7 +164,7 @@ public class ParquetExperimentMonitor(base: File, partition: String, bufferSize:
cpuUsage,
cpuDemand,
lastPowerConsumption[host] ?: 200.0,
- host.flavor.cpuCount
+ host.model.cpuCount
)
currentHostEvent[host] = event
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt
index e7b6a7bb..899fc9b1 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/HostEvent.kt
@@ -22,7 +22,7 @@
package org.opendc.experiments.capelin.telemetry
-import org.opendc.metal.Node
+import org.opendc.compute.service.driver.Host
/**
* A periodic report of the host machine metrics.
@@ -30,7 +30,7 @@ import org.opendc.metal.Node
public data class HostEvent(
override val timestamp: Long,
public val duration: Long,
- public val node: Node,
+ public val host: Host,
public val vmCount: Int,
public val requestedBurst: Long,
public val grantedBurst: Long,
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt
index b4fdd66a..4a3e7963 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/main/kotlin/org/opendc/experiments/capelin/telemetry/parquet/ParquetHostEventWriter.kt
@@ -41,8 +41,8 @@ public class ParquetHostEventWriter(path: File, bufferSize: Int) :
// record.put("portfolio_id", event.run.parent.parent.id)
// record.put("scenario_id", event.run.parent.id)
// record.put("run_id", event.run.id)
- record.put("host_id", event.node.name)
- record.put("state", event.node.state.name)
+ record.put("host_id", event.host.name)
+ record.put("state", event.host.state.name)
record.put("timestamp", event.timestamp)
record.put("duration", event.duration)
record.put("vm_count", event.vmCount)
diff --git a/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
index dfc6b90b..9921c209 100644
--- a/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
+++ b/simulator/opendc-experiments/opendc-experiments-capelin/src/test/kotlin/org/opendc/experiments/capelin/CapelinIntegrationTest.kt
@@ -33,12 +33,9 @@ import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test
import org.junit.jupiter.api.assertAll
import org.opendc.compute.api.ComputeWorkload
+import org.opendc.compute.service.driver.Host
import org.opendc.compute.service.internal.ComputeServiceImpl
import org.opendc.compute.service.scheduler.AvailableCoreMemoryAllocationPolicy
-import org.opendc.experiments.capelin.experiment.attachMonitor
-import org.opendc.experiments.capelin.experiment.createFailureDomain
-import org.opendc.experiments.capelin.experiment.createProvisioner
-import org.opendc.experiments.capelin.experiment.processTrace
import org.opendc.experiments.capelin.model.Workload
import org.opendc.experiments.capelin.monitor.ExperimentMonitor
import org.opendc.experiments.capelin.trace.Sc20ParquetTraceReader
@@ -46,7 +43,6 @@ import org.opendc.experiments.capelin.trace.Sc20RawParquetTraceReader
import org.opendc.format.environment.EnvironmentReader
import org.opendc.format.environment.sc20.Sc20ClusterEnvironmentReader
import org.opendc.format.trace.TraceReader
-import org.opendc.metal.Node
import org.opendc.simulator.utils.DelayControllerClockAdapter
import org.opendc.trace.core.EventTracer
import java.io.File
@@ -101,15 +97,13 @@ class CapelinIntegrationTest {
val tracer = EventTracer(clock)
testScope.launch {
- val res = createProvisioner(
+ scheduler = createComputeService(
this,
clock,
environmentReader,
allocationPolicy,
tracer
)
- val bareMetalProvisioner = res.metal
- scheduler = res.compute
val failureDomain = if (failures) {
println("ENABLING failures")
@@ -118,7 +112,7 @@ class CapelinIntegrationTest {
clock,
seed,
24.0 * 7,
- bareMetalProvisioner,
+ scheduler,
chan
)
} else {
@@ -140,7 +134,6 @@ class CapelinIntegrationTest {
failureDomain?.cancel()
scheduler.close()
monitor.close()
- res.provisioner.close()
}
runSimulation()
@@ -166,7 +159,7 @@ class CapelinIntegrationTest {
val tracer = EventTracer(clock)
testScope.launch {
- val (_, provisioner, scheduler) = createProvisioner(
+ val scheduler = createComputeService(
this,
clock,
environmentReader,
@@ -187,7 +180,6 @@ class CapelinIntegrationTest {
scheduler.close()
monitor.close()
- provisioner.close()
}
runSimulation()
@@ -241,7 +233,7 @@ class CapelinIntegrationTest {
cpuUsage: Double,
cpuDemand: Double,
numberOfDeployedImages: Int,
- host: Node,
+ host: Host,
duration: Long
) {
totalRequestedBurst += requestedBurst
diff --git a/simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt b/simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt
index 7b9d70ed..57d1a4a0 100644
--- a/simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt
+++ b/simulator/opendc-experiments/opendc-experiments-sc18/src/main/kotlin/org/opendc/experiments/sc18/UnderspecificationExperiment.kt
@@ -26,12 +26,11 @@ import kotlinx.coroutines.*
import kotlinx.coroutines.test.TestCoroutineScope
import org.opendc.compute.service.ComputeService
import org.opendc.compute.service.scheduler.NumberOfActiveServersAllocationPolicy
-import org.opendc.compute.simulator.SimHostProvisioner
+import org.opendc.compute.simulator.SimHost
import org.opendc.format.environment.sc18.Sc18EnvironmentReader
import org.opendc.format.trace.gwf.GwfTraceReader
import org.opendc.harness.dsl.Experiment
import org.opendc.harness.dsl.anyOf
-import org.opendc.metal.service.ProvisioningService
import org.opendc.simulator.compute.SimSpaceSharedHypervisorProvider
import org.opendc.simulator.utils.DelayControllerClockAdapter
import org.opendc.trace.core.EventTracer
@@ -84,16 +83,20 @@ public class UnderspecificationExperiment : Experiment("underspecification") {
}
testScope.launch {
- val environment = Sc18EnvironmentReader(FileInputStream(File(environment)))
- .use { it.construct(testScope, clock) }
+ val hosts = Sc18EnvironmentReader(FileInputStream(File(environment)))
+ .use { it.read() }
+ .map { def ->
+ SimHost(
+ def.uid,
+ def.name,
+ def.model,
+ def.meta,
+ testScope.coroutineContext,
+ clock,
+ SimSpaceSharedHypervisorProvider()
+ )
+ }
- val bareMetal = environment.platforms[0].zones[0].services[ProvisioningService]
-
- // Wait for the bare metal nodes to be spawned
- delay(10)
-
- val provisioner = SimHostProvisioner(testScope.coroutineContext, bareMetal, SimSpaceSharedHypervisorProvider())
- val hosts = provisioner.provisionAll()
val compute = ComputeService(
testScope.coroutineContext,
clock,
@@ -103,9 +106,6 @@ public class UnderspecificationExperiment : Experiment("underspecification") {
hosts.forEach { compute.addHost(it) }
- // Wait for the hypervisors to be spawned
- delay(10)
-
val scheduler = StageWorkflowService(
testScope,
clock,