Repository: hadoop
Updated Branches:
refs/heads/branch-2 b19267259 -> 05246b758
Advertising
YARN-8110. AMRMProxy recover should catch for all throwable to avoid premature
exit. (Botong Huang via Subru).
(cherry picked from commit 00905efab22edd9857e0a3828c201bf70f03cb96)
Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo
Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/05246b75
Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/05246b75
Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/05246b75
Branch: refs/heads/branch-2
Commit: 05246b758590286e9dec9e8ff40cddc138003e12
Parents: b192672
Author: Subru Krishnan <su...@apache.org>
Authored: Fri Apr 6 16:31:16 2018 -0700
Committer: Subru Krishnan <su...@apache.org>
Committed: Fri Apr 6 16:38:28 2018 -0700
----------------------------------------------------------------------
.../nodemanager/amrmproxy/AMRMProxyService.java | 2 +-
.../amrmproxy/BaseAMRMProxyTest.java | 5 +++
.../amrmproxy/TestAMRMProxyService.java | 42 ++++++++++++++++++++
3 files changed, 48 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/hadoop/blob/05246b75/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/AMRMProxyService.java
----------------------------------------------------------------------
diff --git
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/AMRMProxyService.java
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/AMRMProxyService.java
index 815e39b..86fbb72 100644
---
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/AMRMProxyService.java
+++
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/AMRMProxyService.java
@@ -261,7 +261,7 @@ public class AMRMProxyService extends CompositeService
implements
// Create the intercepter pipeline for the AM
initializePipeline(attemptId, user, amrmToken, localToken,
entry.getValue(), true, amCred);
- } catch (IOException e) {
+ } catch (Throwable e) {
LOG.error("Exception when recovering " + attemptId
+ ", removing it from NMStateStore and move on", e);
this.nmContext.getNMStateStore().removeAMRMProxyAppContext(attemptId);
http://git-wip-us.apache.org/repos/asf/hadoop/blob/05246b75/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java
----------------------------------------------------------------------
diff --git
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java
index 56d48ef..0958191 100644
---
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java
+++
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/BaseAMRMProxyTest.java
@@ -109,6 +109,11 @@ public abstract class BaseAMRMProxyTest {
return this.amrmProxyService;
}
+ protected Context getNMContext() {
+ Assert.assertNotNull(this.nmContext);
+ return this.nmContext;
+ }
+
@Before
public void setUp() throws IOException {
this.conf = createConfiguration();
http://git-wip-us.apache.org/repos/asf/hadoop/blob/05246b75/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/TestAMRMProxyService.java
----------------------------------------------------------------------
diff --git
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/TestAMRMProxyService.java
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/TestAMRMProxyService.java
index b955311..1eefbd5 100644
---
a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/TestAMRMProxyService.java
+++
b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/amrmproxy/TestAMRMProxyService.java
@@ -44,6 +44,7 @@ import org.apache.hadoop.yarn.exceptions.YarnException;
import org.apache.hadoop.yarn.security.AMRMTokenIdentifier;
import org.apache.hadoop.yarn.server.MockResourceManagerFacade;
import
org.apache.hadoop.yarn.server.nodemanager.amrmproxy.AMRMProxyService.RequestInterceptorChainWrapper;
+import
org.apache.hadoop.yarn.server.nodemanager.recovery.NMStateStoreService.RecoveredAMRMProxyState;
import org.apache.hadoop.yarn.util.Records;
import org.junit.Assert;
import org.junit.Test;
@@ -634,6 +635,35 @@ public class TestAMRMProxyService extends
BaseAMRMProxyTest {
}
/**
+ * Test AMRMProxy restart with application recovery failure.
+ */
+ @Test
+ public void testAppRecoveryFailure() throws YarnException, Exception {
+ Configuration conf = createConfiguration();
+ // Use the MockRequestInterceptorAcrossRestart instead for the chain
+ conf.set(YarnConfiguration.AMRM_PROXY_INTERCEPTOR_CLASS_PIPELINE,
+ BadRequestInterceptorAcrossRestart.class.getName());
+
+ mockRM = new MockResourceManagerFacade(new YarnConfiguration(conf), 0);
+
+ createAndStartAMRMProxyService(conf);
+
+ // Create an app entry in NMSS
+ registerApplicationMaster(1);
+
+ RecoveredAMRMProxyState state =
+ getNMContext().getNMStateStore().loadAMRMProxyState();
+ Assert.assertEquals(1, state.getAppContexts().size());
+
+ // AMRMProxy restarts and recover
+ createAndStartAMRMProxyService(conf);
+
+ state = getNMContext().getNMStateStore().loadAMRMProxyState();
+ // The app that failed to recover should have been removed from NMSS
+ Assert.assertEquals(0, state.getAppContexts().size());
+ }
+
+ /**
* A mock intercepter implementation that uses the same mockRM instance
across
* restart.
*/
@@ -672,4 +702,16 @@ public class TestAMRMProxyService extends
BaseAMRMProxyTest {
}
}
+ /**
+ * A mock intercepter implementation that throws when recovering.
+ */
+ public static class BadRequestInterceptorAcrossRestart
+ extends MockRequestInterceptorAcrossRestart {
+
+ @Override
+ public void recover(Map<String, byte[]> recoveredDataMap) {
+ throw new RuntimeException("Kaboom");
+ }
+ }
+
}
---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org