This is an automated email from the ASF dual-hosted git repository.

weichiu pushed a commit to branch branch-3.3
in repository https://gitbox.apache.org/repos/asf/hadoop.git


The following commit(s) were added to refs/heads/branch-3.3 by this push:
     new c8eb86e  HDFS-15644. Failed volumes can cause DNs to stop block 
reporting. Contributed by Ahmed Hussein.
c8eb86e is described below

commit c8eb86ee3d4f997b72e87e139e6a4dafa1ff4941
Author: Wei-Chiu Chuang <weic...@apache.org>
AuthorDate: Fri Oct 23 12:05:53 2020 -0700

    HDFS-15644. Failed volumes can cause DNs to stop block reporting. 
Contributed by Ahmed Hussein.
    
    (cherry picked from commit 74634eb002717a9684d00f0e9dc263ab7eb49246)
---
 .../datanode/fsdataset/impl/FsDatasetImpl.java     | 28 ++++++++++++----------
 1 file changed, 16 insertions(+), 12 deletions(-)

diff --git 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetImpl.java
 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetImpl.java
index 99a1765..2d94171 100644
--- 
a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetImpl.java
+++ 
b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/datanode/fsdataset/impl/FsDatasetImpl.java
@@ -1901,28 +1901,32 @@ class FsDatasetImpl implements 
FsDatasetSpi<FsVolumeImpl> {
           continue;
         }
         String volStorageID = b.getVolume().getStorageID();
-        if (!builders.containsKey(volStorageID)) {
-          if (!missingVolumesReported.contains(volStorageID)) {
-            LOG.warn("Storage volume: " + volStorageID + " missing for the"
-                + " replica block: " + b + ". Probably being removed!");
-            missingVolumesReported.add(volStorageID);
-          }
-          continue;
-        }
         switch(b.getState()) {
         case FINALIZED:
         case RBW:
         case RWR:
-          builders.get(volStorageID).add(b);
           break;
         case RUR:
-          ReplicaInfo orig = b.getOriginalReplica();
-          builders.get(volStorageID).add(orig);
+          // use the original replica.
+          b = b.getOriginalReplica();
           break;
         case TEMPORARY:
-          break;
+          continue;
         default:
           assert false : "Illegal ReplicaInfo state.";
+          continue;
+        }
+        BlockListAsLongs.Builder storageBuilder = builders.get(volStorageID);
+        // a storage in the process of failing will not be in the volumes list
+        // but will be in the replica map.
+        if (storageBuilder != null) {
+          storageBuilder.add(b);
+        } else {
+          if (!missingVolumesReported.contains(volStorageID)) {
+            LOG.warn("Storage volume: " + volStorageID + " missing for the"
+                + " replica block: " + b + ". Probably being removed!");
+            missingVolumesReported.add(volStorageID);
+          }
         }
       }
     }


---------------------------------------------------------------------
To unsubscribe, e-mail: common-commits-unsubscr...@hadoop.apache.org
For additional commands, e-mail: common-commits-h...@hadoop.apache.org

Reply via email to