You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tez.apache.org by zj...@apache.org on 2016/02/25 05:11:15 UTC

tez git commit: TEZ-3137. Tez task failed with illegal state exception in recovery (zjffdu)

Repository: tez
Updated Branches:
  refs/heads/branch-0.7 083462d0b -> e2d584e40


TEZ-3137. Tez task failed with illegal state exception in recovery (zjffdu)


Project: http://git-wip-us.apache.org/repos/asf/tez/repo
Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/e2d584e4
Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/e2d584e4
Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/e2d584e4

Branch: refs/heads/branch-0.7
Commit: e2d584e40521aadc759c233e7399f9046db8202a
Parents: 083462d
Author: Jeff Zhang <zj...@apache.org>
Authored: Thu Feb 25 12:11:02 2016 +0800
Committer: Jeff Zhang <zj...@apache.org>
Committed: Thu Feb 25 12:11:02 2016 +0800

----------------------------------------------------------------------
 CHANGES.txt                                                    | 1 +
 .../main/java/org/apache/tez/dag/app/dag/impl/VertexImpl.java  | 6 +++++-
 2 files changed, 6 insertions(+), 1 deletion(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tez/blob/e2d584e4/CHANGES.txt
----------------------------------------------------------------------
diff --git a/CHANGES.txt b/CHANGES.txt
index 3efe9fb..b97c129 100644
--- a/CHANGES.txt
+++ b/CHANGES.txt
@@ -9,6 +9,7 @@ INCOMPATIBLE CHANGES
   TEZ-2972. Avoid task rescheduling when a node turns unhealthy
 
 ALL CHANGES
+  TEZ-3137. Tez task failed with illegal state exception in recovery
   TEZ-3126. Log reason for not reducing parallelism
   TEZ-3123. Containers can get re-used even with conflicting local resources.
   TEZ-3117. Deadlock in Edge and Vertex code

http://git-wip-us.apache.org/repos/asf/tez/blob/e2d584e4/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/VertexImpl.java
----------------------------------------------------------------------
diff --git a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/VertexImpl.java b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/VertexImpl.java
index aec738c..e646363 100644
--- a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/VertexImpl.java
+++ b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/VertexImpl.java
@@ -274,6 +274,8 @@ public class VertexImpl implements org.apache.tez.dag.app.dag.Vertex, EventHandl
       new VertexStateChangedCallback();
 
   private VertexState recoveredState = VertexState.NEW;
+  private boolean isInRecovery = false;
+
   @VisibleForTesting
   List<TezEvent> recoveredEvents = new ArrayList<TezEvent>();
   private boolean vertexAlreadyInitialized = false;
@@ -2598,6 +2600,7 @@ public class VertexImpl implements org.apache.tez.dag.app.dag.Vertex, EventHandl
     public VertexState transition(VertexImpl vertex, VertexEvent vertexEvent) {
       VertexEventRecoverVertex recoverEvent = (VertexEventRecoverVertex) vertexEvent;
       VertexState desiredState = recoverEvent.getDesiredState();
+      vertex.isInRecovery = true;
 
       switch (desiredState) {
         case RUNNING:
@@ -2993,6 +2996,7 @@ public class VertexImpl implements org.apache.tez.dag.app.dag.Vertex, EventHandl
 
     @Override
     public VertexState transition(VertexImpl vertex, VertexEvent vertexEvent) {
+      vertex.isInRecovery = true;
       VertexEventSourceVertexRecovered sourceRecoveredEvent =
           (VertexEventSourceVertexRecovered) vertexEvent;
       // Use distance from root from Recovery events as upstream vertices may not
@@ -3626,7 +3630,7 @@ public class VertexImpl implements org.apache.tez.dag.app.dag.Vertex, EventHandl
       // this start event can only come directly from the DAG. That means this
       // is a top level vertex of the dag
       Preconditions.checkState(
-          (vertex.sourceVertices == null || vertex.sourceVertices.isEmpty()),
+          (vertex.sourceVertices == null || vertex.sourceVertices.isEmpty() || vertex.isInRecovery),
           "Vertex: " + vertex.logIdentifier + " got invalid start event");
       vertex.startSignalPending = true;
       vertex.startTimeRequested = vertex.clock.getTime();