diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/ResourceLocalizationService.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/ResourceLocalizationService.java index 71f48acb371..05b80950b55 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/ResourceLocalizationService.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/localizer/ResourceLocalizationService.java @@ -816,6 +816,7 @@ public void cleanupPrivLocalizers(String locId) { return; // ignore; already gone } privLocalizers.remove(locId); + localizer.cancelled = true; localizer.interrupt(); } } @@ -1024,6 +1025,8 @@ public void run() { final List pending; private AtomicBoolean killContainerLocalizer = new AtomicBoolean(false); + private volatile boolean cancelled = false; + // TODO: threadsafe, use outer? private final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(getConfig()); @@ -1286,9 +1289,11 @@ public void run() { context.getUser(), null, paths); delService.delete(deletionTask); } - FileDeletionTask deletionTask = new FileDeletionTask(delService, null, - nmPrivateCTokensPath, null); - delService.delete(deletionTask); + if (!cancelled) { + FileDeletionTask deletionTask = new FileDeletionTask(delService, null, + nmPrivateCTokensPath, null); + delService.delete(deletionTask); + } } } diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java index d179459b28d..f78bb6ec8cf 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/test/java/org/apache/hadoop/yarn/server/nodemanager/containermanager/TestContainerManager.java @@ -1200,7 +1200,7 @@ public void testContainerLaunchAndExitFailure() throws IOException, // While the container is running, localize new resources. // Verify the symlink is created properly @Test - public void testLocalingResourceWhileContainerRunning() throws Exception { + public void testLocalizingResourceWhileContainerRunning() throws Exception { // Real del service delSrvc = new DeletionService(exec); delSrvc.init(conf);