HDFS-15644. Failed volumes can cause DNs to stop block reporting. Contributed by Ahmed Hussein.
(cherry picked from commit 74634eb002
)
This commit is contained in:
parent
c55d639e8f
commit
c8eb86ee3d
@ -1901,28 +1901,32 @@ public Map<DatanodeStorage, BlockListAsLongs> getBlockReports(String bpid) {
|
||||
continue;
|
||||
}
|
||||
String volStorageID = b.getVolume().getStorageID();
|
||||
if (!builders.containsKey(volStorageID)) {
|
||||
switch(b.getState()) {
|
||||
case FINALIZED:
|
||||
case RBW:
|
||||
case RWR:
|
||||
break;
|
||||
case RUR:
|
||||
// use the original replica.
|
||||
b = b.getOriginalReplica();
|
||||
break;
|
||||
case TEMPORARY:
|
||||
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);
|
||||
}
|
||||
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);
|
||||
break;
|
||||
case TEMPORARY:
|
||||
break;
|
||||
default:
|
||||
assert false : "Illegal ReplicaInfo state.";
|
||||
}
|
||||
}
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user