Return-Path: X-Original-To: apmail-hadoop-mapreduce-commits-archive@minotaur.apache.org Delivered-To: apmail-hadoop-mapreduce-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 56A50CD4C for ; Fri, 14 Mar 2014 18:21:05 +0000 (UTC) Received: (qmail 63642 invoked by uid 500); 14 Mar 2014 18:20:45 -0000 Delivered-To: apmail-hadoop-mapreduce-commits-archive@hadoop.apache.org Received: (qmail 63543 invoked by uid 500); 14 Mar 2014 18:20:44 -0000 Mailing-List: contact mapreduce-commits-help@hadoop.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: mapreduce-dev@hadoop.apache.org Delivered-To: mailing list mapreduce-commits@hadoop.apache.org Received: (qmail 63504 invoked by uid 99); 14 Mar 2014 18:20:43 -0000 Received: from athena.apache.org (HELO athena.apache.org) (140.211.11.136) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 14 Mar 2014 18:20:43 +0000 X-ASF-Spam-Status: No, hits=-2000.0 required=5.0 tests=ALL_TRUSTED X-Spam-Check-By: apache.org Received: from [140.211.11.4] (HELO eris.apache.org) (140.211.11.4) by apache.org (qpsmtpd/0.29) with ESMTP; Fri, 14 Mar 2014 18:20:41 +0000 Received: from eris.apache.org (localhost [127.0.0.1]) by eris.apache.org (Postfix) with ESMTP id 90905238897A; Fri, 14 Mar 2014 18:20:21 +0000 (UTC) Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r1577649 - in /hadoop/common/branches/branch-2.4/hadoop-mapreduce-project: ./ hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/rm/ hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/t... Date: Fri, 14 Mar 2014 18:20:21 -0000 To: mapreduce-commits@hadoop.apache.org From: jlowe@apache.org X-Mailer: svnmailer-1.0.9 Message-Id: <20140314182021.90905238897A@eris.apache.org> X-Virus-Checked: Checked by ClamAV on apache.org Author: jlowe Date: Fri Mar 14 18:20:21 2014 New Revision: 1577649 URL: http://svn.apache.org/r1577649 Log: svn merge -c 1577647 FIXES: MAPREDUCE-5769. Unregistration to RM should not be called if AM is crashed before registering with RM. Contributed by Rohith Modified: hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/CHANGES.txt hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/rm/RMCommunicator.java hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/TestRMContainerAllocator.java Modified: hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/CHANGES.txt URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/CHANGES.txt?rev=1577649&r1=1577648&r2=1577649&view=diff ============================================================================== --- hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/CHANGES.txt (original) +++ hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/CHANGES.txt Fri Mar 14 18:20:21 2014 @@ -70,6 +70,9 @@ Release 2.4.0 - UNRELEASED MAPREDUCE-5688. TestStagingCleanup fails intermittently with JDK7 (Mit Desai via jeagles) + MAPREDUCE-5769. Unregistration to RM should not be called if AM is crashed + before registering with RM (Rohith via jlowe) + Release 2.3.1 - UNRELEASED INCOMPATIBLE CHANGES Modified: hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/rm/RMCommunicator.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/rm/RMCommunicator.java?rev=1577649&r1=1577648&r2=1577649&view=diff ============================================================================== --- hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/rm/RMCommunicator.java (original) +++ hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/main/java/org/apache/hadoop/mapreduce/v2/app/rm/RMCommunicator.java Fri Mar 14 18:20:21 2014 @@ -87,6 +87,7 @@ public abstract class RMCommunicator ext // Has a signal (SIGTERM etc) been issued? protected volatile boolean isSignalled = false; private volatile boolean shouldUnregister = true; + private boolean isApplicationMasterRegistered = false; public RMCommunicator(ClientService clientService, AppContext context) { super("RMCommunicator"); @@ -153,6 +154,7 @@ public abstract class RMCommunicator ext } RegisterApplicationMasterResponse response = scheduler.registerApplicationMaster(request); + isApplicationMasterRegistered = true; maxContainerCapability = response.getMaximumResourceCapability(); this.context.getClusterInfo().setMaxContainerCapability( maxContainerCapability); @@ -249,7 +251,7 @@ public abstract class RMCommunicator ext LOG.warn("InterruptedException while stopping", ie); } } - if(shouldUnregister) { + if (isApplicationMasterRegistered && shouldUnregister) { unregister(); } super.serviceStop(); @@ -328,4 +330,9 @@ public abstract class RMCommunicator ext LOG.info("RMCommunicator notified that iSignalled is: " + isSignalled); } + + @VisibleForTesting + protected boolean isApplicationMasterRegistered() { + return isApplicationMasterRegistered; + } } Modified: hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/TestRMContainerAllocator.java URL: http://svn.apache.org/viewvc/hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/TestRMContainerAllocator.java?rev=1577649&r1=1577648&r2=1577649&view=diff ============================================================================== --- hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/TestRMContainerAllocator.java (original) +++ hadoop/common/branches/branch-2.4/hadoop-mapreduce-project/hadoop-mapreduce-client/hadoop-mapreduce-client-app/src/test/java/org/apache/hadoop/mapreduce/v2/app/TestRMContainerAllocator.java Fri Mar 14 18:20:21 2014 @@ -1384,7 +1384,7 @@ public class TestRMContainerAllocator { static final List jobUpdatedNodeEvents = new ArrayList(); private MyResourceManager rm; - + private boolean isUnregistered = false; private static AppContext createAppContext( ApplicationAttemptId appAttemptId, Job job) { AppContext context = mock(AppContext.class); @@ -1474,6 +1474,7 @@ public class TestRMContainerAllocator { @Override protected void unregister() { + isUnregistered=true; } @Override @@ -1523,6 +1524,15 @@ public class TestRMContainerAllocator { protected void startAllocatorThread() { // override to NOT start thread } + + @Override + protected boolean isApplicationMasterRegistered() { + return super.isApplicationMasterRegistered(); + } + + public boolean isUnregistered() { + return isUnregistered; + } } @@ -1770,6 +1780,51 @@ public class TestRMContainerAllocator { Assert.assertEquals(TaskAttemptEventType.TA_KILL, abortedEvent.getType()); } + @Test + public void testUnregistrationOnlyIfRegistered() throws Exception { + Configuration conf = new Configuration(); + final MyResourceManager rm = new MyResourceManager(conf); + rm.start(); + DrainDispatcher rmDispatcher = + (DrainDispatcher) rm.getRMContext().getDispatcher(); + + // Submit the application + RMApp rmApp = rm.submitApp(1024); + rmDispatcher.await(); + + MockNM amNodeManager = rm.registerNode("127.0.0.1:1234", 11264); + amNodeManager.nodeHeartbeat(true); + rmDispatcher.await(); + + final ApplicationAttemptId appAttemptId = + rmApp.getCurrentAppAttempt().getAppAttemptId(); + rm.sendAMLaunched(appAttemptId); + rmDispatcher.await(); + + MRApp mrApp = + new MRApp(appAttemptId, ContainerId.newInstance(appAttemptId, 0), 10, + 0, false, this.getClass().getName(), true, 1) { + @Override + protected Dispatcher createDispatcher() { + return new DrainDispatcher(); + } + + protected ContainerAllocator createContainerAllocator( + ClientService clientService, AppContext context) { + return new MyContainerAllocator(rm, appAttemptId, context); + }; + }; + + mrApp.submit(conf); + DrainDispatcher amDispatcher = (DrainDispatcher) mrApp.getDispatcher(); + MyContainerAllocator allocator = + (MyContainerAllocator) mrApp.getContainerAllocator(); + amDispatcher.await(); + Assert.assertTrue(allocator.isApplicationMasterRegistered()); + mrApp.stop(); + Assert.assertTrue(allocator.isUnregistered()); + } + public static void main(String[] args) throws Exception { TestRMContainerAllocator t = new TestRMContainerAllocator(); t.testSimple();