diff --git a/hadoop-yarn-project/CHANGES.txt b/hadoop-yarn-project/CHANGES.txt index be61dfe3e6..95fba2395c 100644 --- a/hadoop-yarn-project/CHANGES.txt +++ b/hadoop-yarn-project/CHANGES.txt @@ -488,6 +488,9 @@ Release 2.6.0 - UNRELEASED YARN-2387. Resource Manager crashes with NPE due to lack of synchronization (Mit Desai via jlowe) + YARN-2594. Potential deadlock in RM when querying + ApplicationResourceUsageReport. (Wangda Tan via kasha) + Release 2.5.1 - 2014-09-05 INCOMPATIBLE CHANGES diff --git a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java index eaef7d2a9a..4899434c48 100644 --- a/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java +++ b/hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/rmapp/RMAppImpl.java @@ -128,7 +128,8 @@ public class RMAppImpl implements RMApp, Recoverable { private long startTime; private long finishTime = 0; private long storedFinishTime = 0; - private RMAppAttempt currentAttempt; + // This field isn't protected by readlock now. + private volatile RMAppAttempt currentAttempt; private String queue; private EventHandler handler; private static final AppFinishedTransition FINISHED_TRANSITION = @@ -438,16 +439,11 @@ public String getUser() { @Override public float getProgress() { - this.readLock.lock(); - - try { - if (this.currentAttempt != null) { - return this.currentAttempt.getProgress(); - } - return 0; - } finally { - this.readLock.unlock(); + RMAppAttempt attempt = this.currentAttempt; + if (attempt != null) { + return attempt.getProgress(); } + return 0; } @Override @@ -478,13 +474,7 @@ public String getName() { @Override public RMAppAttempt getCurrentAppAttempt() { - this.readLock.lock(); - - try { - return this.currentAttempt; - } finally { - this.readLock.unlock(); - } + return this.currentAttempt; } @Override @@ -655,30 +645,20 @@ public long getSubmitTime() { @Override public String getTrackingUrl() { - this.readLock.lock(); - - try { - if (this.currentAttempt != null) { - return this.currentAttempt.getTrackingUrl(); - } - return null; - } finally { - this.readLock.unlock(); + RMAppAttempt attempt = this.currentAttempt; + if (attempt != null) { + return attempt.getTrackingUrl(); } + return null; } @Override public String getOriginalTrackingUrl() { - this.readLock.lock(); - - try { - if (this.currentAttempt != null) { - return this.currentAttempt.getOriginalTrackingUrl(); - } - return null; - } finally { - this.readLock.unlock(); + RMAppAttempt attempt = this.currentAttempt; + if (attempt != null) { + return attempt.getOriginalTrackingUrl(); } + return null; } @Override