Repository: tez Updated Branches: refs/heads/master 9109645e5 -> f23758643
TEZ-2970. Re-localization in TezChild does not use correct UGI. (hitesh) Project: http://git-wip-us.apache.org/repos/asf/tez/repo Commit: http://git-wip-us.apache.org/repos/asf/tez/commit/f2375864 Tree: http://git-wip-us.apache.org/repos/asf/tez/tree/f2375864 Diff: http://git-wip-us.apache.org/repos/asf/tez/diff/f2375864 Branch: refs/heads/master Commit: f23758643f03147dced0b3fdfd11a58b89f83eb7 Parents: 9109645 Author: Hitesh Shah <[email protected]> Authored: Fri Dec 4 14:15:37 2015 -0800 Committer: Hitesh Shah <[email protected]> Committed: Fri Dec 4 14:15:37 2015 -0800 ---------------------------------------------------------------------- CHANGES.txt | 2 ++ .../org/apache/tez/runtime/task/TezChild.java | 36 ++++++++++++-------- 2 files changed, 24 insertions(+), 14 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/tez/blob/f2375864/CHANGES.txt ---------------------------------------------------------------------- diff --git a/CHANGES.txt b/CHANGES.txt index a5db06d..07c2a91 100644 --- a/CHANGES.txt +++ b/CHANGES.txt @@ -9,6 +9,7 @@ INCOMPATIBLE CHANGES TEZ-2949. Allow duplicate dag names within session for Tez. ALL CHANGES: + TEZ-2970. Re-localization in TezChild does not use correct UGI. TEZ-2968. Counter limits exception causes AM to crash. TEZ-2960. Tez UI: Move hardcoded url namespace to the configuration file TEZ-2581. Umbrella for Tez Recovery Redesign @@ -271,6 +272,7 @@ INCOMPATIBLE CHANGES TEZ-2949. Allow duplicate dag names within session for Tez. ALL CHANGES + TEZ-2970. Re-localization in TezChild does not use correct UGI. TEZ-2968. Counter limits exception causes AM to crash. TEZ-2947. Tez UI: Timeline, RM & AM requests gets into a consecutive loop in counters page without any delay TEZ-2949. Allow duplicate dag names within session for Tez. http://git-wip-us.apache.org/repos/asf/tez/blob/f2375864/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java ---------------------------------------------------------------------- diff --git a/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java b/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java index e9b48f4..784065a 100644 --- a/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java +++ b/tez-runtime-internals/src/main/java/org/apache/tez/runtime/task/TezChild.java @@ -243,7 +243,7 @@ public class TezChild { FileSystem.clearStatistics(); childUGI = handleNewTaskCredentials(containerTask, childUGI); - handleNewTaskLocalResources(containerTask); + handleNewTaskLocalResources(containerTask, childUGI); cleanupOnTaskChanged(containerTask); // Execute the Actual Task @@ -314,26 +314,34 @@ public class TezChild { * @throws IOException * @throws TezException */ - private void handleNewTaskLocalResources(ContainerTask containerTask) throws IOException, - TezException { - Map<String, TezLocalResource> additionalResources = containerTask.getAdditionalResources(); + private void handleNewTaskLocalResources(ContainerTask containerTask, + UserGroupInformation ugi) throws IOException, TezException { + + final Map<String, TezLocalResource> additionalResources = containerTask.getAdditionalResources(); if (LOG.isDebugEnabled()) { LOG.debug("Additional Resources added to container: " + additionalResources); } - if (additionalResources != null && !additionalResources.isEmpty()) { LOG.info("Localizing additional local resources for Task : " + additionalResources); - List<URL> downloadedUrls = RelocalizationUtils.processAdditionalResources( - Maps.transformValues(additionalResources, new Function<TezLocalResource, URI>() { - @Override - public URI apply(TezLocalResource input) { - return input.getUri(); - } - }), defaultConf, workingDir); - RelocalizationUtils.addUrlsToClassPath(downloadedUrls); - + try { + List<URL> downloadedUrls = ugi.doAs(new PrivilegedExceptionAction<List<URL>>() { + @Override + public List<URL> run() throws Exception { + return RelocalizationUtils.processAdditionalResources( + Maps.transformValues(additionalResources, new Function<TezLocalResource, URI>() { + @Override + public URI apply(TezLocalResource input) { + return input.getUri(); + } + }), defaultConf, workingDir); + } + }); + RelocalizationUtils.addUrlsToClassPath(downloadedUrls); + } catch (InterruptedException e) { + throw new TezException(e); + } LOG.info("Done localizing additional resources"); } }
