|
@@ -18,6 +18,11 @@
|
|
|
|
|
|
package org.apache.hadoop.yarn.server.resourcemanager;
|
|
|
|
|
|
+import static org.mockito.Matchers.isA;
|
|
|
+import static org.mockito.Mockito.spy;
|
|
|
+import static org.mockito.Mockito.times;
|
|
|
+import static org.mockito.Mockito.verify;
|
|
|
+
|
|
|
import java.io.IOException;
|
|
|
import java.net.InetSocketAddress;
|
|
|
import java.net.UnknownHostException;
|
|
@@ -577,7 +582,14 @@ public class TestRMRestart {
|
|
|
rm1.waitForState(am2.getApplicationAttemptId(), RMAppAttemptState.KILLED);
|
|
|
|
|
|
// restart rm
|
|
|
- MockRM rm2 = new MockRM(conf, memStore);
|
|
|
+
|
|
|
+ MockRM rm2 = new MockRM(conf, memStore) {
|
|
|
+ @Override
|
|
|
+ protected RMAppManager createRMAppManager() {
|
|
|
+ return spy(super.createRMAppManager());
|
|
|
+ }
|
|
|
+ };
|
|
|
+
|
|
|
rm2.start();
|
|
|
|
|
|
GetApplicationsRequest request1 =
|
|
@@ -620,6 +632,10 @@ public class TestRMRestart {
|
|
|
rm2.getClientRMService().getApplications(request2);
|
|
|
List<ApplicationReport> appList2 = response2.getApplicationList();
|
|
|
Assert.assertTrue(3 == appList2.size());
|
|
|
+
|
|
|
+ // check application summary is logged for the completed apps after RM restart.
|
|
|
+ verify(rm2.getRMAppManager(), times(3)).logApplicationSummary(
|
|
|
+ isA(ApplicationId.class));
|
|
|
}
|
|
|
|
|
|
private MockAM launchAM(RMApp app, MockRM rm, MockNM nm)
|
|
@@ -920,7 +936,6 @@ public class TestRMRestart {
|
|
|
@Test
|
|
|
public void testRMDelegationTokenRestoredOnRMRestart() throws Exception {
|
|
|
conf.setInt(YarnConfiguration.RM_AM_MAX_ATTEMPTS, 2);
|
|
|
-
|
|
|
conf.set(
|
|
|
CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION,
|
|
|
"kerberos");
|
|
@@ -1063,6 +1078,43 @@ public class TestRMRestart {
|
|
|
rm2.stop();
|
|
|
}
|
|
|
|
|
|
+ // This is to test submit an application to the new RM with the old delegation
|
|
|
+ // token got from previous RM.
|
|
|
+ @Test
|
|
|
+ public void testAppSubmissionWithOldDelegationTokenAfterRMRestart()
|
|
|
+ throws Exception {
|
|
|
+ conf.setInt(YarnConfiguration.RM_AM_MAX_ATTEMPTS, 2);
|
|
|
+ conf.set(CommonConfigurationKeysPublic.HADOOP_SECURITY_AUTHENTICATION,
|
|
|
+ "kerberos");
|
|
|
+ conf.set(YarnConfiguration.RM_ADDRESS, "localhost:8032");
|
|
|
+ UserGroupInformation.setConfiguration(conf);
|
|
|
+ MemoryRMStateStore memStore = new MemoryRMStateStore();
|
|
|
+ memStore.init(conf);
|
|
|
+
|
|
|
+ MockRM rm1 = new TestSecurityMockRM(conf, memStore);
|
|
|
+ rm1.start();
|
|
|
+
|
|
|
+ GetDelegationTokenRequest request1 =
|
|
|
+ GetDelegationTokenRequest.newInstance("renewer1");
|
|
|
+ UserGroupInformation.getCurrentUser().setAuthenticationMethod(
|
|
|
+ AuthMethod.KERBEROS);
|
|
|
+ GetDelegationTokenResponse response1 =
|
|
|
+ rm1.getClientRMService().getDelegationToken(request1);
|
|
|
+ Token<RMDelegationTokenIdentifier> token1 =
|
|
|
+ ConverterUtils.convertFromYarn(response1.getRMDelegationToken(), rmAddr);
|
|
|
+
|
|
|
+ // start new RM
|
|
|
+ MockRM rm2 = new TestSecurityMockRM(conf, memStore);
|
|
|
+ rm2.start();
|
|
|
+
|
|
|
+ // submit an app with the old delegation token got from previous RM.
|
|
|
+ Credentials ts = new Credentials();
|
|
|
+ ts.addToken(token1.getService(), token1);
|
|
|
+ RMApp app = rm2.submitApp(200, "name", "user",
|
|
|
+ new HashMap<ApplicationAccessType, String>(), false, "default", 1, ts);
|
|
|
+ rm2.waitForState(app.getApplicationId(), RMAppState.ACCEPTED);
|
|
|
+ }
|
|
|
+
|
|
|
@Test
|
|
|
public void testRMStateStoreDispatcherDrainedOnRMStop() throws Exception {
|
|
|
MemoryRMStateStore memStore = new MemoryRMStateStore() {
|