Repository: incubator-reef
Updated Branches:
  refs/heads/master 44cea4921 -> 8f4f0ec8b


[REEF-62]: Tighten state transition checks in EvaluatorStatusManager

This addressed the issue by
  * Checking that the transition of evaluator status is legal.
  * Logging a warning when the transition is illegal.

JIRA:
  [REEF-62](https://issues.apache.org/jira/browse/REEF-62)

Pull Request:
  This closes #217


Project: http://git-wip-us.apache.org/repos/asf/incubator-reef/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-reef/commit/8f4f0ec8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-reef/tree/8f4f0ec8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-reef/diff/8f4f0ec8

Branch: refs/heads/master
Commit: 8f4f0ec8bacd699d7daa5ab0f5204295ee7ce9ec
Parents: 44cea49
Author: Andrew Chung <[email protected]>
Authored: Sat Jun 13 14:39:06 2015 -0700
Committer: Markus Weimer <[email protected]>
Committed: Wed Jun 17 13:42:35 2015 -0700

----------------------------------------------------------------------
 .../evaluator/EvaluatorStatusManager.java       | 48 +++++++++++++++++---
 1 file changed, 42 insertions(+), 6 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-reef/blob/8f4f0ec8/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/EvaluatorStatusManager.java
----------------------------------------------------------------------
diff --git 
a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/EvaluatorStatusManager.java
 
b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/EvaluatorStatusManager.java
index 49944b0..0ba7676 100644
--- 
a/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/EvaluatorStatusManager.java
+++ 
b/lang/java/reef-common/src/main/java/org/apache/reef/runtime/common/driver/evaluator/EvaluatorStatusManager.java
@@ -43,8 +43,47 @@ final class EvaluatorStatusManager {
   }
 
   private static boolean isLegal(final EvaluatorState from, final 
EvaluatorState to) {
-    // TODO
-    return true;
+    if (from == to) {
+      return true;
+    }
+
+    switch(from) {
+      case ALLOCATED: {
+        switch(to) {
+          case SUBMITTED:
+          case DONE:
+          case FAILED:
+          case KILLED:
+            return true;
+        }
+      }
+      case SUBMITTED: {
+        switch(to) {
+          case RUNNING:
+          case DONE:
+          case FAILED:
+          case KILLED:
+            return true;
+        }
+      }
+      case RUNNING: {
+        switch(to) {
+          case DONE:
+          case FAILED:
+          case KILLED:
+            return true;
+        }
+      }
+    }
+
+    LOG.warning("Illegal evaluator state transition from " + from + " to " + 
to + ".");
+    return false;
+  }
+
+  private static boolean isDoneOrFailedOrKilled(final EvaluatorState state) {
+    return (state == EvaluatorState.DONE ||
+            state == EvaluatorState.FAILED ||
+            state == EvaluatorState.KILLED);
   }
 
   synchronized void setRunning() {
@@ -72,9 +111,7 @@ final class EvaluatorStatusManager {
   }
 
   synchronized boolean isDoneOrFailedOrKilled() {
-    return (this.state == EvaluatorState.DONE ||
-        this.state == EvaluatorState.FAILED ||
-        this.state == EvaluatorState.KILLED);
+    return isDoneOrFailedOrKilled(this.state);
   }
 
   synchronized boolean isAllocatedOrSubmittedOrRunning() {
@@ -101,6 +138,5 @@ final class EvaluatorStatusManager {
       throw new IllegalStateException("Illegal state transition from '" + 
this.state + "' to '" + state + "'");
     }
     this.state = state;
-
   }
 }

Reply via email to