You are viewing a plain text version of this content. The canonical link for it is here.
Posted to common-commits@hadoop.apache.org by we...@apache.org on 2020/10/28 16:23:38 UTC

[hadoop] branch branch-2.10 updated: HDFS-15644. Failed volumes can cause DNs to stop block reporting. Contributed by Ahmed Hussein.

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

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


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

commit e7e165a92718e98a929f67d75824b823b6add728
Author: Wei-Chiu Chuang <we...@apache.org>
AuthorDate: Wed Oct 28 09:22:47 2020 -0700

    HDFS-15644. Failed volumes can cause DNs to stop block reporting. Contributed by Ahmed Hussein.
---
 .../datanode/fsdataset/impl/FsDatasetImpl.java     | 30 ++++++++++++----------
 1 file changed, 17 insertions(+), 13 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 6b5a69b..23360fd 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
@@ -1935,29 +1935,33 @@ class FsDatasetImpl implements FsDatasetSpi<FsVolumeImpl> {
       Set<String> missingVolumesReported = new HashSet<>();
       for (ReplicaInfo b : volumeMap.replicas(bpid)) {
         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(b.getVolume().getStorageID()).add(b);
             break;
           case RUR:
-            ReplicaUnderRecovery rur = (ReplicaUnderRecovery)b;
-            builders.get(rur.getVolume().getStorageID())
-                .add(rur.getOriginalReplica());
+            // use the original replica.
+            ReplicaUnderRecovery rur = (ReplicaUnderRecovery) b;
+            b = rur.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-unsubscribe@hadoop.apache.org
For additional commands, e-mail: common-commits-help@hadoop.apache.org