Repository: hive Updated Branches: refs/heads/master b849a166b -> 6751225a5
HIVE-19072 : incorrect token handling for LLAP plugin endpoint (Sergey Shelukhin, reviewed by Jason Dere) Project: http://git-wip-us.apache.org/repos/asf/hive/repo Commit: http://git-wip-us.apache.org/repos/asf/hive/commit/6751225a Tree: http://git-wip-us.apache.org/repos/asf/hive/tree/6751225a Diff: http://git-wip-us.apache.org/repos/asf/hive/diff/6751225a Branch: refs/heads/master Commit: 6751225a5cde4c40839df8b46e8d241fdda5cd34 Parents: b849a16 Author: sergey <ser...@apache.org> Authored: Mon Apr 2 17:01:11 2018 -0700 Committer: sergey <ser...@apache.org> Committed: Mon Apr 2 17:01:11 2018 -0700 ---------------------------------------------------------------------- .../java/org/apache/hadoop/hive/llap/AsyncPbRpcProxy.java | 10 +++++++++- .../apache/hadoop/hive/ql/exec/tez/WorkloadManager.java | 2 ++ 2 files changed, 11 insertions(+), 1 deletion(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/hive/blob/6751225a/llap-common/src/java/org/apache/hadoop/hive/llap/AsyncPbRpcProxy.java ---------------------------------------------------------------------- diff --git a/llap-common/src/java/org/apache/hadoop/hive/llap/AsyncPbRpcProxy.java b/llap-common/src/java/org/apache/hadoop/hive/llap/AsyncPbRpcProxy.java index 9f3ec38..35ed40c 100644 --- a/llap-common/src/java/org/apache/hadoop/hive/llap/AsyncPbRpcProxy.java +++ b/llap-common/src/java/org/apache/hadoop/hive/llap/AsyncPbRpcProxy.java @@ -14,6 +14,7 @@ package org.apache.hadoop.hive.llap; +import java.io.IOException; import java.security.PrivilegedAction; import java.util.HashSet; import java.util.Iterator; @@ -433,7 +434,8 @@ public abstract class AsyncPbRpcProxy<ProtocolType, TokenType extends TokenIdent } } - private ProtocolType createProxy(final LlapNodeId nodeId, Token<TokenType> nodeToken) { + private ProtocolType createProxy( + final LlapNodeId nodeId, Token<TokenType> nodeToken) throws IOException { if (nodeToken == null && token == null) { if (LOG.isDebugEnabled()) { LOG.debug("Creating a client without a token for " + nodeId); @@ -441,6 +443,12 @@ public abstract class AsyncPbRpcProxy<ProtocolType, TokenType extends TokenIdent return createProtocolImpl(getConfig(), nodeId.getHostname(), nodeId.getPort(), null, retryPolicy, socketFactory); } + // Either the token should be passed in here, or in ctor. + String tokenUser = this.tokenUser == null ? getTokenUser(nodeToken) : this.tokenUser; + if (tokenUser == null) { + tokenUser = UserGroupInformation.getCurrentUser().getShortUserName(); + LOG.warn("Cannot determine token user for UGI; using {}", tokenUser); + } final UserGroupInformation ugi = UserGroupInformation.createRemoteUser(tokenUser); // Clone the token as we'd need to set the service to the one we are talking to. if (nodeToken == null) { http://git-wip-us.apache.org/repos/asf/hive/blob/6751225a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java ---------------------------------------------------------------------- diff --git a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java index 65e3c82..97ba036 100644 --- a/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java +++ b/ql/src/java/org/apache/hadoop/hive/ql/exec/tez/WorkloadManager.java @@ -187,6 +187,8 @@ public class WorkloadManager extends TezSessionPoolSession.AbstractTriggerValida throws ExecutionException, InterruptedException { assert INSTANCE == null; // We could derive the expected number of AMs to pass in. + // Note: we pass a null token here; the tokens to talk to plugin endpoints will only be + // known once the AMs register, and they are different for every AM (unlike LLAP token). LlapPluginEndpointClientImpl amComm = new LlapPluginEndpointClientImpl(conf, null, -1); QueryAllocationManager qam = new GuaranteedTasksAllocator(conf, amComm); return (INSTANCE = new WorkloadManager(amComm, yarnQueue, conf, qam, plan));