diff options
| author | Georgios Andreadis <info@gandreadis.com> | 2020-03-26 19:58:31 +0100 |
|---|---|---|
| committer | Georgios Andreadis <info@gandreadis.com> | 2020-03-26 19:58:31 +0100 |
| commit | f781a1dba4e1309a2c637d7b47aeef9f55e079b5 (patch) | |
| tree | b04f2bf5c41bd4a18e091fe163c237d3d94a099d /opendc/opendc-compute/src | |
| parent | 620f194c53d950a37f78577f4aacfd7c0c06bb9a (diff) | |
Monitor state changes, as well
They're now stored in a RLE-fashion.
Diffstat (limited to 'opendc/opendc-compute/src')
3 files changed, 23 insertions, 0 deletions
diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/HypervisorEvent.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/HypervisorEvent.kt index 5c19b00d..76a73a57 100644 --- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/HypervisorEvent.kt +++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/HypervisorEvent.kt @@ -64,4 +64,15 @@ public sealed class HypervisorEvent { public val numberOfDeployedImages: Int, public val hostServer: Server ) : HypervisorEvent() + + /** + * This event is emitted when the hypervisor state changes. + * + * @property driver The driver that emitted the event. + * @property server The current server instance. + */ + public data class StateChanged( + override val driver: VirtDriver, + public val server: Server + ) : HypervisorEvent() } diff --git a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/HypervisorImage.kt b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/HypervisorImage.kt index c21b002d..657d5067 100644 --- a/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/HypervisorImage.kt +++ b/opendc/opendc-compute/src/main/kotlin/com/atlarge/opendc/compute/virt/HypervisorImage.kt @@ -50,6 +50,7 @@ object HypervisorImage : Image { try { suspendCancellableCoroutine<Unit> {} } finally { + driver.onShutOff() driver.eventFlow.close() } } 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 76368080..b6cf3ac8 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 @@ -87,6 +87,10 @@ class SimpleVirtDriver( override val events: Flow<HypervisorEvent> = eventFlow + init { + eventFlow.emit(HypervisorEvent.StateChanged(this, server)) + } + override suspend fun spawn( name: String, image: Image, @@ -239,6 +243,13 @@ class SimpleVirtDriver( } /** + * To be called on shut-off of the hypervisor. + */ + public fun onShutOff() { + eventFlow.emit(HypervisorEvent.StateChanged(this, server)) + } + + /** * A request to schedule a virtual CPU on the host cpu. */ internal data class CpuRequest( |
