summaryrefslogtreecommitdiff
path: root/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler
diff options
context:
space:
mode:
authorFabian Mastenbroek <mail.fabianm@gmail.com>2017-10-04 10:44:24 +0200
committerFabian Mastenbroek <mail.fabianm@gmail.com>2017-10-04 10:47:08 +0200
commit25cc35b0e4942e990c01ac6224720e8fe84fd9ae (patch)
tree12cd345922388df70ac4498570659d6c6990a7e5 /opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler
parent2c26e9c91c945af065770c323e8b80a9f5104379 (diff)
bug(#9): Fix interference between experiments
This change fixes the interference of multiple experiments running at the same time due to some thread unsafe behaviour in the JpaExperimentManager class. The code has now been restructured to solve the issue and fix the thread unsafe behaviour. Closes #9.
Diffstat (limited to 'opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler')
-rw-r--r--opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/FifoScheduler.kt5
-rw-r--r--opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/Scheduler.kt2
-rw-r--r--opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/SrtfScheduler.kt6
3 files changed, 7 insertions, 6 deletions
diff --git a/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/FifoScheduler.kt b/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/FifoScheduler.kt
index 1c3dc869..c45ed5e6 100644
--- a/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/FifoScheduler.kt
+++ b/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/FifoScheduler.kt
@@ -25,6 +25,7 @@
package nl.atlarge.opendc.platform.scheduler
import nl.atlarge.opendc.kernel.Context
+import nl.atlarge.opendc.platform.workload.Job
import nl.atlarge.opendc.topology.Entity
import nl.atlarge.opendc.topology.machine.Machine
import nl.atlarge.opendc.platform.workload.Task
@@ -69,7 +70,7 @@ class FifoScheduler : Scheduler {
val task = iterator.next()
// TODO What to do with tasks that are not ready yet to be processed
- if (!task.isReady()) {
+ if (!task.ready) {
iterator.remove()
rescheduled.add(task)
continue
@@ -85,7 +86,7 @@ class FifoScheduler : Scheduler {
// Reschedule all tasks that are not ready yet
while (!rescheduled.isEmpty()) {
- submit(rescheduled.poll())
+ queue.add(rescheduled.poll())
}
}
diff --git a/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/Scheduler.kt b/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/Scheduler.kt
index bf988802..578bef9c 100644
--- a/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/Scheduler.kt
+++ b/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/Scheduler.kt
@@ -25,9 +25,9 @@
package nl.atlarge.opendc.platform.scheduler
import nl.atlarge.opendc.kernel.Context
+import nl.atlarge.opendc.platform.workload.Task
import nl.atlarge.opendc.topology.Entity
import nl.atlarge.opendc.topology.machine.Machine
-import nl.atlarge.opendc.platform.workload.Task
/**
* A task scheduler that is coupled to an [Entity] in the topology of the cloud network.
diff --git a/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/SrtfScheduler.kt b/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/SrtfScheduler.kt
index b2660964..03f37b50 100644
--- a/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/SrtfScheduler.kt
+++ b/opendc-stdlib/src/main/kotlin/nl/atlarge/opendc/platform/scheduler/SrtfScheduler.kt
@@ -25,9 +25,9 @@
package nl.atlarge.opendc.platform.scheduler
import nl.atlarge.opendc.kernel.Context
+import nl.atlarge.opendc.platform.workload.Task
import nl.atlarge.opendc.topology.Entity
import nl.atlarge.opendc.topology.machine.Machine
-import nl.atlarge.opendc.platform.workload.Task
import java.util.*
/**
@@ -67,8 +67,8 @@ class SrtfScheduler : Scheduler {
val task = iterator.next()
// TODO What to do with tasks that are not ready yet to be processed
- if (!task.isReady()) {
- submit(task)
+ if (!task.ready) {
+ tasks.add(task)
continue
} else if (task.finished) {
tasks.remove(task)