summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2020-03-24 20:36:54 +0100
committerFabian Mastenbroek <mail.fabianm@gmail.com>2020-03-25 10:51:27 +0100
commitedce7993772182bac0d0c74d22189137b35872aa (patch)
tree6f56049649bb99155e715ad0b8e2546d151de94e
parent76bfeb44c5a02be143c152c52bc1029cff360744 (diff)
refactor: Add support for specifying VM name
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/SimpleVirtDriver.kt3
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/VirtDriver.kt3
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt5
-rw-r--r--opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/VirtProvisioningService.kt3
-rw-r--r--opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/virt/HypervisorTest.kt (renamed from opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/virt/driver/hypervisor/HypervisorTest.kt)7
-rw-r--r--opendc/opendc-experiments-sc20/src/main/kotlin/com/atlarge/opendc/experiments/sc20/TestExperiment.kt5
6 files changed, 17 insertions, 9 deletions
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/SimpleVirtDriver.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/SimpleVirtDriver.kt
index fc4c7634..e7b06329 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/SimpleVirtDriver.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/SimpleVirtDriver.kt
@@ -89,6 +89,7 @@ class SimpleVirtDriver(
override val events: Flow<HypervisorEvent> = eventFlow
override suspend fun spawn(
+ name: String,
image: Image,
flavor: Flavor
): Server {
@@ -100,7 +101,7 @@ class SimpleVirtDriver(
val events = EventFlow<ServerEvent>()
val server = Server(
- UUID.randomUUID(), "<unnamed>", emptyMap(), flavor, image, ServerState.BUILD,
+ UUID.randomUUID(), name, emptyMap(), flavor, image, ServerState.BUILD,
ServiceRegistry(), events
)
availableMemory -= requiredMemory
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/VirtDriver.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/VirtDriver.kt
index d7ae0c12..1002d382 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/VirtDriver.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/driver/VirtDriver.kt
@@ -45,11 +45,12 @@ public interface VirtDriver {
/**
* Spawn the given [Image] on the compute resource of this driver.
*
+ * @param name The name of the server to spawn.
* @param image The image to deploy.
* @param flavor The flavor of the server which this driver is controlling.
* @return The virtual server spawned by this method.
*/
- public suspend fun spawn(image: Image, flavor: Flavor): Server
+ public suspend fun spawn(name: String, image: Image, flavor: Flavor): Server
companion object Key : AbstractServiceKey<VirtDriver>(UUID.randomUUID(), "virtual-driver")
}
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt
index 8393dfa9..a16c0793 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/SimpleVirtProvisioningService.kt
@@ -65,10 +65,11 @@ class SimpleVirtProvisioningService(
}
override suspend fun deploy(
+ name: String,
image: Image,
flavor: Flavor
): Server = suspendCancellableCoroutine { cont ->
- val vmInstance = ImageView(image, flavor, cont)
+ val vmInstance = ImageView(name, image, flavor, cont)
incomingImages += vmInstance
requestCycle()
}
@@ -96,6 +97,7 @@ class SimpleVirtProvisioningService(
println("Spawning ${imageInstance.image}")
incomingImages -= imageInstance
val server = selectedHv.driver.spawn(
+ imageInstance.name,
imageInstance.image,
imageInstance.flavor
)
@@ -137,6 +139,7 @@ class SimpleVirtProvisioningService(
}
data class ImageView(
+ val name: String,
val image: Image,
val flavor: Flavor,
val continuation: Continuation<Server>,
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/VirtProvisioningService.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/VirtProvisioningService.kt
index 12543ce3..6f0c22f6 100644
--- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/VirtProvisioningService.kt
+++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/service/VirtProvisioningService.kt
@@ -14,8 +14,9 @@ interface VirtProvisioningService {
/**
* Submit the specified [Image] to the provisioning service.
*
+ * @param name The name of the server to deploy.
* @param image The image to be deployed.
* @param flavor The flavor of the machine instance to run this [image] on.
*/
- public suspend fun deploy(image: Image, flavor: Flavor): Server
+ public suspend fun deploy(name: String, image: Image, flavor: Flavor): Server
}
diff --git a/opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/virt/driver/hypervisor/HypervisorTest.kt b/opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/virt/HypervisorTest.kt
index bcaafb59..4bd8d4e2 100644
--- a/opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/virt/driver/hypervisor/HypervisorTest.kt
+++ b/opendc/opendc-compute/src/test/kotlin/com/atlarge/opendc/compute/virt/HypervisorTest.kt
@@ -22,7 +22,7 @@
* SOFTWARE.
*/
-package com.atlarge.opendc.compute.virt.driver.hypervisor
+package com.atlarge.opendc.compute.virt
import com.atlarge.odcsim.SimulationEngineProvider
import com.atlarge.opendc.compute.core.ProcessingUnit
@@ -30,7 +30,6 @@ import com.atlarge.opendc.compute.core.Flavor
import com.atlarge.opendc.compute.core.ProcessingNode
import com.atlarge.opendc.compute.core.image.FlopsApplicationImage
import com.atlarge.opendc.compute.metal.driver.SimpleBareMetalDriver
-import com.atlarge.opendc.compute.virt.HypervisorImage
import com.atlarge.opendc.compute.virt.driver.VirtDriver
import kotlinx.coroutines.ExperimentalCoroutinesApi
import kotlinx.coroutines.delay
@@ -76,9 +75,9 @@ internal class HypervisorTest {
val flavor = Flavor(1, 0)
val vmDriver = metalDriver.refresh().server!!.services[VirtDriver]
- val vmA = vmDriver.spawn(workloadA, flavor)
+ val vmA = vmDriver.spawn("a", workloadA, flavor)
vmA.events.onEach { println(it) }.launchIn(this)
- val vmB = vmDriver.spawn(workloadB, flavor)
+ val vmB = vmDriver.spawn("b", workloadB, flavor)
vmB.events.onEach { println(it) }.launchIn(this)
}
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 96033ea7..6d832ee4 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
@@ -135,7 +135,10 @@ fun main(args: Array<String>) {
delay(max(0, time - simulationContext.clock.millis()))
launch {
chan.send(Unit)
- val server = scheduler.deploy(workload.image, Flavor(workload.image.cores, workload.image.requiredMemory))
+ val server = scheduler.deploy(
+ workload.image.name, workload.image,
+ Flavor(workload.image.cores, workload.image.requiredMemory)
+ )
server.events.onEach { if (it is ServerEvent.StateChanged) monitor.stateChanged(it.server) }.collect()
}
}