From e0ccb42ecbaf98cef7c73df7564c669c2d464b0e Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Wed, 20 May 2020 15:09:55 +0200 Subject: bug: Reschedule after hypervisor becomes active --- .../compute/virt/service/SimpleVirtProvisioningService.kt | 12 ++++++++++-- 1 file changed, 10 insertions(+), 2 deletions(-) (limited to 'opendc/opendc-compute/src') 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 c3d9c745..ff4aa3d7 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 @@ -180,7 +180,7 @@ class SimpleVirtProvisioningService( } try { - logger.info { "Spawning ${imageInstance.image} on ${selectedHv.server.uid} ${selectedHv.server.name} ${selectedHv.server.flavor}" } + logger.info { "[${ctx.clock.millis()}] Spawning ${imageInstance.image} on ${selectedHv.server.uid} ${selectedHv.server.name} ${selectedHv.server.flavor}" } incomingImages -= imageInstance // Speculatively update the hypervisor view information to prevent other images in the queue from @@ -214,7 +214,7 @@ class SimpleVirtProvisioningService( when (event) { is ServerEvent.StateChanged -> { if (event.server.state == ServerState.SHUTOFF) { - logger.info { "Server ${event.server.uid} ${event.server.name} ${event.server.flavor} finished." } + logger.info { "[${ctx.clock.millis()}] Server ${event.server.uid} ${event.server.name} ${event.server.flavor} finished." } eventFlow.emit(VirtProvisioningEvent.MetricsAvailable( this@SimpleVirtProvisioningService, @@ -254,6 +254,8 @@ class SimpleVirtProvisioningService( private fun stateChanged(server: Server) { when (server.state) { ServerState.ACTIVE -> { + logger.debug { "[${ctx.clock.millis()}] Server ${server.uid} available: ${server.state}" } + if (server in hypervisors) { // Corner case for when the hypervisor already exists availableHypervisors += hypervisors.getValue(server) @@ -280,8 +282,14 @@ class SimpleVirtProvisioningService( queuedVms, unscheduledVms )) + + // Re-schedule on the new machine + if (incomingImages.isNotEmpty()) { + requestCycle() + } } ServerState.SHUTOFF, ServerState.ERROR -> { + logger.debug { "[${ctx.clock.millis()}] Server ${server.uid} unavailable: ${server.state}" } val hv = hypervisors[server] ?: return availableHypervisors -= hv -- cgit v1.2.3