From 45cf3de2e9bf836bbf643aec5076962c1d1de761 Mon Sep 17 00:00:00 2001 From: Sunil G Date: Tue, 17 Sep 2019 19:41:38 +0530 Subject: [PATCH] YARN-9833. Race condition when DirectoryCollection.checkDirs() runs during container launch. Contributed by Peter Bacsko. (cherry picked from commit c474e24c0b73c0f52a7d5af2495355f4a0799344) --- .../yarn/server/nodemanager/DirectoryCollection.java | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DirectoryCollection.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DirectoryCollection.java index 7a840b1d676..d7282f305e2 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DirectoryCollection.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-nodemanager/src/main/java/org/apache/hadoop/yarn/server/nodemanager/DirectoryCollection.java @@ -50,6 +50,7 @@ import org.apache.hadoop.yarn.exceptions.YarnRuntimeException; import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableList; /** * Manages a list of local storage directories. @@ -230,7 +231,7 @@ void deregisterDirsChangeListener( List getGoodDirs() { this.readLock.lock(); try { - return Collections.unmodifiableList(localDirs); + return ImmutableList.copyOf(localDirs); } finally { this.readLock.unlock(); } @@ -242,7 +243,7 @@ List getGoodDirs() { List getFailedDirs() { this.readLock.lock(); try { - return Collections.unmodifiableList( + return ImmutableList.copyOf( DirectoryCollection.concat(errorDirs, fullDirs)); } finally { this.readLock.unlock(); @@ -255,7 +256,7 @@ List getFailedDirs() { List getFullDirs() { this.readLock.lock(); try { - return Collections.unmodifiableList(fullDirs); + return ImmutableList.copyOf(fullDirs); } finally { this.readLock.unlock(); }