summaryrefslogtreecommitdiff
path: root/opendc-compute
diff options
context:
space:
mode:
Diffstat (limited to 'opendc-compute')
-rw-r--r--opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt12
-rw-r--r--opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt32
2 files changed, 39 insertions, 5 deletions
diff --git a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt
index 9295acb2..fb7eadfb 100644
--- a/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt
+++ b/opendc-compute/opendc-compute-simulator/src/main/kotlin/org/opendc/compute/simulator/scheduler/FilterScheduler.kt
@@ -146,13 +146,15 @@ public class FilterScheduler(
iter.remove()
- val host = subset.first()
- val hostType = host.host.getType()
+ val hostView = subset.first()
+ val hostType = hostView.host.getType()
- emptyHostMap[hostType]?.remove(host)
- usedHosts.add(host)
+ if (hostView.host.isEmpty()) {
+ emptyHostMap[hostType]?.remove(hostView)
+ usedHosts.add(hostView)
+ }
- return SchedulingResult(SchedulingResultType.SUCCESS, host, req)
+ return SchedulingResult(SchedulingResultType.SUCCESS, hostView, req)
}
override fun removeTask(
diff --git a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
index 4f00100f..5d71d5de 100644
--- a/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
+++ b/opendc-compute/opendc-compute-simulator/src/test/kotlin/org/opendc/compute/simulator/scheduler/FilterSchedulerTest.kt
@@ -98,10 +98,12 @@ internal class FilterSchedulerTest {
val hostA = mockk<HostView>()
every { hostA.host.getState() } returns HostState.DOWN
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -131,10 +133,12 @@ internal class FilterSchedulerTest {
val hostA = mockk<HostView>()
every { hostA.host.getState() } returns HostState.DOWN
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -162,6 +166,7 @@ internal class FilterSchedulerTest {
val host = mockk<HostView>()
every { host.host.getState() } returns HostState.DOWN
every { host.host.getType() } returns "A"
+ every { host.host.isEmpty() } returns true
scheduler.addHost(host)
@@ -184,6 +189,7 @@ internal class FilterSchedulerTest {
val host = mockk<HostView>()
every { host.host.getState() } returns HostState.UP
every { host.host.getType() } returns "A"
+ every { host.host.isEmpty() } returns true
scheduler.addHost(host)
@@ -208,12 +214,14 @@ internal class FilterSchedulerTest {
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.availableMemory } returns 512
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.availableMemory } returns 2048
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -239,6 +247,7 @@ internal class FilterSchedulerTest {
every { host.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { host.availableMemory } returns 2048
every { host.host.getType() } returns "A"
+ every { host.host.isEmpty() } returns true
scheduler.addHost(host)
@@ -263,12 +272,14 @@ internal class FilterSchedulerTest {
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.provisionedCpuCores } returns 3
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.provisionedCpuCores } returns 0
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -294,6 +305,7 @@ internal class FilterSchedulerTest {
every { host.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { host.provisionedCpuCores } returns 0
every { host.host.getType() } returns "A"
+ every { host.host.isEmpty() } returns true
scheduler.addHost(host)
@@ -318,6 +330,7 @@ internal class FilterSchedulerTest {
every { hostA.host.getModel() } returns HostModel(8 * 2600.0, 8, 2048)
every { hostA.availableMemory } returns 512
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
scheduler.addHost(hostA)
val hostB = mockk<HostView>()
@@ -325,6 +338,7 @@ internal class FilterSchedulerTest {
every { hostB.host.getModel() } returns HostModel(4 * 3200.0, 4, 2048)
every { hostB.availableMemory } returns 512
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
@@ -349,12 +363,14 @@ internal class FilterSchedulerTest {
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.instanceCount } returns 2
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.instanceCount } returns 0
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -389,6 +405,7 @@ internal class FilterSchedulerTest {
every { hostA.host.getInstances() } returns emptySet()
every { hostA.provisionedCpuCores } returns 3
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
@@ -396,6 +413,7 @@ internal class FilterSchedulerTest {
every { hostB.host.getInstances() } returns setOf(reqA.task)
every { hostB.provisionedCpuCores } returns 0
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -435,6 +453,7 @@ internal class FilterSchedulerTest {
every { hostA.host.getInstances() } returns setOf(reqA.task)
every { hostA.provisionedCpuCores } returns 3
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
@@ -442,6 +461,7 @@ internal class FilterSchedulerTest {
every { hostB.host.getInstances() } returns emptySet()
every { hostB.provisionedCpuCores } returns 0
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -480,6 +500,7 @@ internal class FilterSchedulerTest {
)
every { hostA.provisionedGpuCores } returns 0
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
scheduler.addHost(hostA)
val hostB = mockk<HostView>()
@@ -496,6 +517,7 @@ internal class FilterSchedulerTest {
)
every { hostB.provisionedGpuCores } returns 0
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
@@ -528,6 +550,7 @@ internal class FilterSchedulerTest {
)
every { hostA.availableMemory } returns 512
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
scheduler.addHost(hostA)
val hostB = mockk<HostView>()
@@ -544,6 +567,7 @@ internal class FilterSchedulerTest {
)
every { hostB.availableMemory } returns 512
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostB)
val req = mockk<SchedulingRequest>()
@@ -568,12 +592,14 @@ internal class FilterSchedulerTest {
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.availableMemory } returns 1024
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.availableMemory } returns 512
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -599,12 +625,14 @@ internal class FilterSchedulerTest {
every { hostA.host.getModel() } returns HostModel(12 * 2600.0, 12, 2048)
every { hostA.availableMemory } returns 1024
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.availableMemory } returns 512
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -630,12 +658,14 @@ internal class FilterSchedulerTest {
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.provisionedCpuCores } returns 2
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.provisionedCpuCores } returns 0
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)
@@ -661,12 +691,14 @@ internal class FilterSchedulerTest {
every { hostA.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostA.instanceCount } returns 2
every { hostA.host.getType() } returns "A"
+ every { hostA.host.isEmpty() } returns true
val hostB = mockk<HostView>()
every { hostB.host.getState() } returns HostState.UP
every { hostB.host.getModel() } returns HostModel(4 * 2600.0, 4, 2048)
every { hostB.instanceCount } returns 0
every { hostB.host.getType() } returns "B"
+ every { hostB.host.isEmpty() } returns true
scheduler.addHost(hostA)
scheduler.addHost(hostB)