Browse Source

HDFS-13962. Add null check for add-replica pool to avoid lock acquiring. Contributed by Surendra Singh Lilhore.

(cherry picked from commit 1043795f7fe44c98a34f8ea3cea708c801c3043b)
Yiqun Lin 6 years ago
parent
commit
b6698e2a82

+ 4 - 2
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/BlockPoolSlice.java

@@ -183,8 +183,10 @@ class BlockPoolSlice {
                                                      .setConf(conf)
                                                      .setInitialUsed(loadDfsUsed())
                                                      .build();
-    // initialize add replica fork join pool
-    initializeAddReplicaPool(conf);
+    if (addReplicaThreadPool == null) {
+      // initialize add replica fork join pool
+      initializeAddReplicaPool(conf);
+    }
     // Make the dfs usage to be saved during shutdown.
     shutdownHook = new Runnable() {
       @Override

+ 1 - 1
hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/ReplicaMap.java

@@ -154,7 +154,7 @@ class ReplicaMap {
       if (oldReplicaInfo != null) {
         return oldReplicaInfo;
       } else {
-        set.add(replicaInfo);
+        set.addOrReplace(replicaInfo);
       }
       return replicaInfo;
     }