Browse Source

YARN-5921. Incorrect synchronization in RMContextImpl#setHAServiceState/getHAServiceState. Contributed by Varun Saxena

Naganarasimha 8 years ago
parent
commit
f3b8ff54ab

+ 6 - 4
hadoop-yarn-project/hadoop-yarn/hadoop-yarn-server/hadoop-yarn-server-resourcemanager/src/main/java/org/apache/hadoop/yarn/server/resourcemanager/RMContextImpl.java

@@ -80,6 +80,8 @@ public class RMContextImpl implements RMContext {
 
 
   private QueueLimitCalculator queueLimitCalculator;
   private QueueLimitCalculator queueLimitCalculator;
 
 
+  private final Object haServiceStateLock = new Object();
+
   /**
   /**
    * Default constructor. To be used in conjunction with setter methods for
    * Default constructor. To be used in conjunction with setter methods for
    * individual fields.
    * individual fields.
@@ -254,9 +256,9 @@ public class RMContextImpl implements RMContext {
     this.isHAEnabled = isHAEnabled;
     this.isHAEnabled = isHAEnabled;
   }
   }
 
 
-  void setHAServiceState(HAServiceState haServiceState) {
-    synchronized (haServiceState) {
-      this.haServiceState = haServiceState;
+  void setHAServiceState(HAServiceState serviceState) {
+    synchronized (haServiceStateLock) {
+      this.haServiceState = serviceState;
     }
     }
   }
   }
 
 
@@ -352,7 +354,7 @@ public class RMContextImpl implements RMContext {
 
 
   @Override
   @Override
   public HAServiceState getHAServiceState() {
   public HAServiceState getHAServiceState() {
-    synchronized (haServiceState) {
+    synchronized (haServiceStateLock) {
       return haServiceState;
       return haServiceState;
     }
     }
   }
   }