Explorar o código

HDFS-3860. HeartbeatManager#Monitor may wrongly hold the writelock of namesystem. Contributed by Jing Zhao.

git-svn-id: https://svn.apache.org/repos/asf/hadoop/common/trunk@1378228 13f79535-47bb-0310-9956-ffa450edef68
Aaron Myers %!s(int64=12) %!d(string=hai) anos
pai
achega
8d724dd8b9

+ 3 - 0
hadoop-hdfs-project/hadoop-hdfs/CHANGES.txt

@@ -687,6 +687,9 @@ Branch-2 ( Unreleased changes )
     HDFS-3856. TestHDFSServerPorts failure is causing surefire fork failure.
     HDFS-3856. TestHDFSServerPorts failure is causing surefire fork failure.
     (eli)
     (eli)
 
 
+    HDFS-3860. HeartbeatManager#Monitor may wrongly hold the writelock of
+    namesystem. (Jing Zhao via atm)
+
   BREAKDOWN OF HDFS-3042 SUBTASKS
   BREAKDOWN OF HDFS-3042 SUBTASKS
 
 
     HDFS-2185. HDFS portion of ZK-based FailoverController (todd)
     HDFS-2185. HDFS portion of ZK-based FailoverController (todd)

+ 3 - 3
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/HeartbeatManager.java

@@ -223,10 +223,10 @@ class HeartbeatManager implements DatanodeStatistics {
       if (!allAlive) {
       if (!allAlive) {
         // acquire the fsnamesystem lock, and then remove the dead node.
         // acquire the fsnamesystem lock, and then remove the dead node.
         namesystem.writeLock();
         namesystem.writeLock();
-        if (namesystem.isInSafeMode()) {
-          return;
-        }
         try {
         try {
+          if (namesystem.isInSafeMode()) {
+            return;
+          }
           synchronized(this) {
           synchronized(this) {
             dm.removeDeadDatanode(dead);
             dm.removeDeadDatanode(dead);
           }
           }