From 3ced2cce16004d77c427d3bc232eb6586b1ceba7 Mon Sep 17 00:00:00 2001 From: Thorsten Papenbrock Date: Wed, 7 Nov 2018 10:48:13 +0100 Subject: [PATCH] Bugfix in the ReactiveSchedulingStrategy. --- .gitignore | 3 +++ .../scheduling/ReactiveSchedulingStrategy.java | 13 ++++++++----- 2 files changed, 11 insertions(+), 5 deletions(-) diff --git a/.gitignore b/.gitignore index df11a2fb..3f8fa158 100644 --- a/.gitignore +++ b/.gitignore @@ -4,6 +4,7 @@ /.settings .metadata /.metadata +.recommenders *.releaseBackup release.properties .idea @@ -15,3 +16,5 @@ bin/ target datasets/ output/ +copyOctopus2Thor.sh +copyAkkaTutorial2Thor.sh diff --git a/akka-tutorial/src/main/java/de/hpi/akka_tutorial/remote/actors/scheduling/ReactiveSchedulingStrategy.java b/akka-tutorial/src/main/java/de/hpi/akka_tutorial/remote/actors/scheduling/ReactiveSchedulingStrategy.java index c7acf85f..f91ee9db 100644 --- a/akka-tutorial/src/main/java/de/hpi/akka_tutorial/remote/actors/scheduling/ReactiveSchedulingStrategy.java +++ b/akka-tutorial/src/main/java/de/hpi/akka_tutorial/remote/actors/scheduling/ReactiveSchedulingStrategy.java @@ -54,7 +54,7 @@ private class QueryTracker { /** * Assign a subquery of the tracked query to the worker. If a subquery was available, a {@link Worker.ValidationMessage} is send to the worker with master as sender. * - * @return a new subquery or {@code null} + * @return {@code true}, if work was assigned and {@code false} otherwise */ boolean assignWork(ActorRef worker, ActorRef master) { @@ -199,13 +199,17 @@ private void assignSubqueries() { .map(Map.Entry::getKey) .collect(Collectors.toList()); - // Assign idle workers to subqueries as long as there is work to do + // Return if no query is present + if (this.queryId2tracker.isEmpty()) + return; + + // Assign idle workers to pending subqueries Iterator queryTrackerIterator = this.queryId2tracker.values().iterator(); + QueryTracker queryTracker = queryTrackerIterator.next(); for (ActorRef idleWorker : idleWorkers) { - QueryTracker queryTracker; // Find a query tracker that can assign a subquery to this idle worker - do { + while (!queryTracker.assignWork(idleWorker, this.master)) { // Check if there is any (further) on-going query if (!queryTrackerIterator.hasNext()) return; @@ -213,7 +217,6 @@ private void assignSubqueries() { // Select the (next) query tracker queryTracker = queryTrackerIterator.next(); } - while (!queryTracker.assignWork(idleWorker, this.master)); // Assign the subquery to the worker and keep track of the assignment this.worker2tracker.put(idleWorker, queryTracker);