YARN-3103. AMRMClientImpl does not update AMRM token properly. Contributed by Jason Lowe
(cherry picked from commit 6d2bdbd7da
)
This commit is contained in:
parent
55bb4eca73
commit
12522fd9cb
|
@ -397,6 +397,9 @@ Release 2.7.0 - UNRELEASED
|
||||||
YARN-3011. Possible IllegalArgumentException in ResourceLocalizationService
|
YARN-3011. Possible IllegalArgumentException in ResourceLocalizationService
|
||||||
might lead NM to crash. (Varun Saxena via jianhe)
|
might lead NM to crash. (Varun Saxena via jianhe)
|
||||||
|
|
||||||
|
YARN-3103. AMRMClientImpl does not update AMRM token properly. (Jason Lowe
|
||||||
|
via jianhe)
|
||||||
|
|
||||||
Release 2.6.0 - 2014-11-18
|
Release 2.6.0 - 2014-11-18
|
||||||
|
|
||||||
INCOMPATIBLE CHANGES
|
INCOMPATIBLE CHANGES
|
||||||
|
|
|
@ -755,11 +755,11 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> {
|
||||||
new org.apache.hadoop.security.token.Token<AMRMTokenIdentifier>(token
|
new org.apache.hadoop.security.token.Token<AMRMTokenIdentifier>(token
|
||||||
.getIdentifier().array(), token.getPassword().array(), new Text(
|
.getIdentifier().array(), token.getPassword().array(), new Text(
|
||||||
token.getKind()), new Text(token.getService()));
|
token.getKind()), new Text(token.getService()));
|
||||||
amrmToken.setService(ClientRMProxy.getAMRMTokenService(getConfig()));
|
// Preserve the token service sent by the RM when adding the token
|
||||||
|
// to ensure we replace the previous token setup by the RM.
|
||||||
|
// Afterwards we can update the service address for the RPC layer.
|
||||||
UserGroupInformation currentUGI = UserGroupInformation.getCurrentUser();
|
UserGroupInformation currentUGI = UserGroupInformation.getCurrentUser();
|
||||||
if (UserGroupInformation.isSecurityEnabled()) {
|
|
||||||
currentUGI = UserGroupInformation.getLoginUser();
|
|
||||||
}
|
|
||||||
currentUGI.addToken(amrmToken);
|
currentUGI.addToken(amrmToken);
|
||||||
|
amrmToken.setService(ClientRMProxy.getAMRMTokenService(getConfig()));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -200,8 +200,11 @@ public class TestAMRMClient {
|
||||||
// of testing.
|
// of testing.
|
||||||
UserGroupInformation.setLoginUser(UserGroupInformation
|
UserGroupInformation.setLoginUser(UserGroupInformation
|
||||||
.createRemoteUser(UserGroupInformation.getCurrentUser().getUserName()));
|
.createRemoteUser(UserGroupInformation.getCurrentUser().getUserName()));
|
||||||
appAttempt.getAMRMToken().setService(ClientRMProxy.getAMRMTokenService(conf));
|
|
||||||
|
// emulate RM setup of AMRM token in credentials by adding the token
|
||||||
|
// *before* setting the token service
|
||||||
UserGroupInformation.getCurrentUser().addToken(appAttempt.getAMRMToken());
|
UserGroupInformation.getCurrentUser().addToken(appAttempt.getAMRMToken());
|
||||||
|
appAttempt.getAMRMToken().setService(ClientRMProxy.getAMRMTokenService(conf));
|
||||||
}
|
}
|
||||||
|
|
||||||
@After
|
@After
|
||||||
|
@ -1026,13 +1029,18 @@ public class TestAMRMClient {
|
||||||
UserGroupInformation.getCurrentUser().getCredentials();
|
UserGroupInformation.getCurrentUser().getCredentials();
|
||||||
Iterator<org.apache.hadoop.security.token.Token<?>> iter =
|
Iterator<org.apache.hadoop.security.token.Token<?>> iter =
|
||||||
credentials.getAllTokens().iterator();
|
credentials.getAllTokens().iterator();
|
||||||
|
org.apache.hadoop.security.token.Token<AMRMTokenIdentifier> result = null;
|
||||||
while (iter.hasNext()) {
|
while (iter.hasNext()) {
|
||||||
org.apache.hadoop.security.token.Token<?> token = iter.next();
|
org.apache.hadoop.security.token.Token<?> token = iter.next();
|
||||||
if (token.getKind().equals(AMRMTokenIdentifier.KIND_NAME)) {
|
if (token.getKind().equals(AMRMTokenIdentifier.KIND_NAME)) {
|
||||||
return (org.apache.hadoop.security.token.Token<AMRMTokenIdentifier>)
|
if (result != null) {
|
||||||
|
Assert.fail("credentials has more than one AMRM token."
|
||||||
|
+ " token1: " + result + " token2: " + token);
|
||||||
|
}
|
||||||
|
result = (org.apache.hadoop.security.token.Token<AMRMTokenIdentifier>)
|
||||||
token;
|
token;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return null;
|
return result;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue