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..447495302e3 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 @@ -817,6 +817,14 @@ public void cleanupPrivLocalizers(String locId) { } privLocalizers.remove(locId); localizer.interrupt(); + while(!localizer.complete) { + try { + Thread.sleep(10); + } catch (InterruptedException e) { + LOG.warn("{} interrupted while waiting for previous Localizer" + + " to complete. ", locId); + } + } } } @@ -1028,6 +1036,8 @@ public void run() { private final RecordFactory recordFactory = RecordFactoryProvider.getRecordFactory(getConfig()); + private volatile boolean complete; + LocalizerRunner(LocalizerContext context, String localizerId) { super("LocalizerRunner for " + localizerId); this.context = context; @@ -1289,6 +1299,7 @@ public void run() { FileDeletionTask deletionTask = new FileDeletionTask(delService, null, nmPrivateCTokensPath, null); delService.delete(deletionTask); + complete = true; } } 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);