Repository: hadoop Updated Branches: refs/heads/branch-2 55bb4eca7 -> 12522fd9c
YARN-3103. AMRMClientImpl does not update AMRM token properly. Contributed by Jason Lowe (cherry picked from commit 6d2bdbd7dab179dfb4f19bb41809e97f1db88c6b) Project: http://git-wip-us.apache.org/repos/asf/hadoop/repo Commit: http://git-wip-us.apache.org/repos/asf/hadoop/commit/12522fd9 Tree: http://git-wip-us.apache.org/repos/asf/hadoop/tree/12522fd9 Diff: http://git-wip-us.apache.org/repos/asf/hadoop/diff/12522fd9 Branch: refs/heads/branch-2 Commit: 12522fd9cbd8da8c040a5b7bb71fcdaa256daf89 Parents: 55bb4ec Author: Jian He <[email protected]> Authored: Wed Jan 28 15:23:13 2015 -0800 Committer: Jian He <[email protected]> Committed: Wed Jan 28 15:24:10 2015 -0800 ---------------------------------------------------------------------- hadoop-yarn-project/CHANGES.txt | 3 +++ .../hadoop/yarn/client/api/impl/AMRMClientImpl.java | 8 ++++---- .../hadoop/yarn/client/api/impl/TestAMRMClient.java | 14 +++++++++++--- 3 files changed, 18 insertions(+), 7 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hadoop/blob/12522fd9/hadoop-yarn-project/CHANGES.txt ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index 2ce9d49..0458bdc 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -397,6 +397,9 @@ Release 2.7.0 - UNRELEASED YARN-3011. Possible IllegalArgumentException in ResourceLocalizationService 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 INCOMPATIBLE CHANGES http://git-wip-us.apache.org/repos/asf/hadoop/blob/12522fd9/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java index 3cf18ba..ab8aaa8 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/main/java/org/apache/hadoop/yarn/client/api/impl/AMRMClientImpl.java @@ -755,11 +755,11 @@ public class AMRMClientImpl<T extends ContainerRequest> extends AMRMClient<T> { new org.apache.hadoop.security.token.Token<AMRMTokenIdentifier>(token .getIdentifier().array(), token.getPassword().array(), new Text( 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(); - if (UserGroupInformation.isSecurityEnabled()) { - currentUGI = UserGroupInformation.getLoginUser(); - } currentUGI.addToken(amrmToken); + amrmToken.setService(ClientRMProxy.getAMRMTokenService(getConfig())); } } http://git-wip-us.apache.org/repos/asf/hadoop/blob/12522fd9/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java ---------------------------------------------------------------------- diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java index e24b5f6..3c6918c 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-client/src/test/java/org/apache/hadoop/yarn/client/api/impl/TestAMRMClient.java @@ -200,8 +200,11 @@ public class TestAMRMClient { // of testing. UserGroupInformation.setLoginUser(UserGroupInformation .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()); + appAttempt.getAMRMToken().setService(ClientRMProxy.getAMRMTokenService(conf)); } @After @@ -1026,13 +1029,18 @@ public class TestAMRMClient { UserGroupInformation.getCurrentUser().getCredentials(); Iterator<org.apache.hadoop.security.token.Token<?>> iter = credentials.getAllTokens().iterator(); + org.apache.hadoop.security.token.Token<AMRMTokenIdentifier> result = null; while (iter.hasNext()) { org.apache.hadoop.security.token.Token<?> token = iter.next(); 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; } } - return null; + return result; } }
