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; - } }
