diff --git 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 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 c37f2e3d91..d9220087db 100644 --- 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 +++ 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 @@ -808,6 +808,11 @@ public void cleanupPrivLocalizers(String locId) { return; // ignore; already gone } privLocalizers.remove(locId); + // This ensures that ResourceLocalizationService.heartbeat will return + // LocalizerStatus.DIE immediately after container kill so we stop + // localizing, even if the null check at LocalizerTracker.processHeart + // succeeded before this synchronized block. + localizer.endContainerLocalization(); localizer.interrupt(); } }