Return-Path: X-Original-To: apmail-tez-commits-archive@minotaur.apache.org Delivered-To: apmail-tez-commits-archive@minotaur.apache.org Received: from mail.apache.org (hermes.apache.org [140.211.11.3]) by minotaur.apache.org (Postfix) with SMTP id 1276B17563 for ; Sat, 18 Oct 2014 00:49:42 +0000 (UTC) Received: (qmail 56341 invoked by uid 500); 18 Oct 2014 00:49:41 -0000 Delivered-To: apmail-tez-commits-archive@tez.apache.org Received: (qmail 56303 invoked by uid 500); 18 Oct 2014 00:49:41 -0000 Mailing-List: contact commits-help@tez.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: dev@tez.apache.org Delivered-To: mailing list commits@tez.apache.org Received: (qmail 56294 invoked by uid 99); 18 Oct 2014 00:49:41 -0000 Received: from tyr.zones.apache.org (HELO tyr.zones.apache.org) (140.211.11.114) by apache.org (qpsmtpd/0.29) with ESMTP; Sat, 18 Oct 2014 00:49:41 +0000 Received: by tyr.zones.apache.org (Postfix, from userid 65534) id 98F8C9C7751; Sat, 18 Oct 2014 00:49:41 +0000 (UTC) Content-Type: text/plain; charset="us-ascii" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit From: sseth@apache.org To: commits@tez.apache.org Message-Id: X-Mailer: ASF-Git Admin Mailer Subject: git commit: TEZ-1682. Tez AM hangs at times when there are task failures. (sseth) (cherry picked from commit 9220170dd87e26542bcfe3bbdc29871625535e1f) Date: Sat, 18 Oct 2014 00:49:41 +0000 (UTC) Repository: tez Updated Branches: refs/heads/branch-0.5 472471902 -> 881cb96cf TEZ-1682. Tez AM hangs at times when there are task failures. (sseth) (cherry picked from commit 9220170dd87e26542bcfe3bbdc29871625535e1f) Project: http://git-wip-us.apache.org/repos/asf/tez/repo Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/881cb96c Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/881cb96c Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/881cb96c Branch: refs/heads/branch-0.5 Commit: 881cb96cff784b21882b505ec4cf7c10f6ebffc3 Parents: 4724719 Author: Siddharth Seth Authored: Fri Oct 17 17:49:05 2014 -0700 Committer: Siddharth Seth Committed: Fri Oct 17 17:49:31 2014 -0700 ---------------------------------------------------------------------- CHANGES.txt | 1 + .../apache/tez/dag/app/dag/impl/TaskImpl.java | 5 +-- .../tez/dag/app/dag/impl/TestTaskImpl.java | 47 +++++++++++++++++++- 3 files changed, 48 insertions(+), 5 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tez/blob/881cb96c/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index 68efb81..d8297a8 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -33,6 +33,7 @@ ALL CHANGES: TEZ-1462. Remove unnecessary SuppressWarnings. TEZ-1633. Fixed expected values in TestTaskRecovery.testRecovery_OneTAStarted. TEZ-1669. yarn-swimlanes.sh throws error post TEZ-1556. + TEZ-1682. Tez AM hangs at times when there are task failures. Release 0.5.1: 2014-10-02 http://git-wip-us.apache.org/repos/asf/tez/blob/881cb96c/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskImpl.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskImpl.java b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskImpl.java index f67f070..4c5e90f 100644 --- a/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskImpl.java +++ b/tez-dag/src/main/java/org/apache/tez/dag/app/dag/impl/TaskImpl.java @@ -855,7 +855,8 @@ public class TaskImpl implements Task, EventHandler { } if (oldState != getInternalState()) { LOG.info(taskId + " Task Transitioned from " + oldState + " to " - + getInternalState()); + + getInternalState() + " due to event " + + event.getType()); } } finally { writeLock.unlock(); @@ -1522,8 +1523,6 @@ public class TaskImpl implements Task, EventHandler { task.killUnfinishedAttempt (attempt, "Task KILL is received. Killing attempt!"); } - task.taskAttemptStatus.clear(); - } } http://git-wip-us.apache.org/repos/asf/tez/blob/881cb96c/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskImpl.java ---------------------------------------------------------------------- diff --git a/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskImpl.java b/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskImpl.java index 63cd9c5..1453d14 100644 --- a/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskImpl.java +++ b/tez-dag/src/test/java/org/apache/tez/dag/app/dag/impl/TestTaskImpl.java @@ -31,6 +31,7 @@ import static org.mockito.Mockito.eq; import java.util.ArrayList; import java.util.HashMap; +import java.util.Iterator; import java.util.LinkedList; import java.util.List; import java.util.Map; @@ -289,9 +290,27 @@ public class TestTaskImpl { killTask(taskId); mockTask.handle(new TaskEventTAUpdate(mockTask.getLastAttempt().getID(), TaskEventType.T_ATTEMPT_KILLED)); + assertEquals(TaskStateInternal.KILLED, mockTask.getInternalState()); + verifyOutgoingEvents(eventHandler.events, VertexEventType.V_TASK_COMPLETED); } - + + @Test(timeout = 5000) + public void testKillRunningTaskPreviousKilledAttempts() { + LOG.info("--- START: testKillRunningTaskPreviousKilledAttempts ---"); + TezTaskID taskId = getNewTaskID(); + scheduleTaskAttempt(taskId); + launchTaskAttempt(mockTask.getLastAttempt().getID()); + killRunningTaskAttempt(mockTask.getLastAttempt().getID()); + assertEquals(TaskStateInternal.RUNNING, mockTask.getInternalState()); + killTask(taskId); + mockTask.handle(new TaskEventTAUpdate(mockTask.getLastAttempt().getID(), + TaskEventType.T_ATTEMPT_KILLED)); + + assertEquals(TaskStateInternal.KILLED, mockTask.getInternalState()); + verifyOutgoingEvents(eventHandler.events, VertexEventType.V_TASK_COMPLETED); + } + /** * {@link TaskState#RUNNING}->{@link TaskState#KILLED} */ @@ -545,9 +564,33 @@ public class TestTaskImpl { assertEquals(1, mockTask.getDiagnostics().size()); assertTrue(mockTask.getDiagnostics().get(0).contains(TaskTerminationCause.OTHER_TASK_FAILURE.name())); } - + // TODO Add test to validate the correct commit attempt. + + /* Verifies that the specified event types, exist. Does not ensure they are the only ones, however */ + private void verifyOutgoingEvents(List events, + Enum... expectedTypes) { + + List> expectedTypeList = new LinkedList>(); + for (Enum expectedType : expectedTypes) { + expectedTypeList.add(expectedType); + } + for (Event event : events) { + Iterator> typeIter = expectedTypeList.iterator(); + while (typeIter.hasNext()) { + Enum expectedType = typeIter.next(); + if (event.getType() == expectedType) { + typeIter.remove(); + // Move to the next event. + break; + } + } + } + assertTrue("Did not find types : " + expectedTypeList + + " in outgoing event list", expectedTypeList.isEmpty()); + } + @SuppressWarnings("rawtypes") private class MockTaskImpl extends TaskImpl {