From facf2a785ff7c7cd4f904b4b42af415bb85ea7a0 Mon Sep 17 00:00:00 2001 From: Fabian Mastenbroek Date: Mon, 13 Apr 2020 17:28:22 +0200 Subject: bug: Restrict provisioning to 5 minute batches --- .../compute/virt/service/SimpleVirtProvisioningService.kt | 13 ++++++++++++- 1 file changed, 12 insertions(+), 1 deletion(-) (limited to 'opendc') 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 2d467e92..6200ad7c 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 @@ -106,8 +106,14 @@ class SimpleVirtProvisioningService( return } + val quantum = 300000 // 5 minutes in milliseconds + // We assume that the provisioner runs at a fixed slot every time quantum (e.g t=0, t=60, t=120). + // This is important because the slices of the VMs need to be aligned. + // We calculate here the delay until the next scheduling slot. + val delay = quantum - (ctx.clock.millis() % quantum) + val call = launch { - delay(1) + delay(delay) this@SimpleVirtProvisioningService.call = null schedule() } @@ -148,6 +154,11 @@ class SimpleVirtProvisioningService( if (event.server.state == ServerState.SHUTOFF) { activeImages -= imageInstance selectedHv.provisionedCores -= server.flavor.cpuCount + + // Try to reschedule if needed + if (incomingImages.isNotEmpty()) { + requestCycle() + } } } } -- cgit v1.2.3