HDFS-13758. DatanodeManager should throw exception if it has BlockRecoveryCommand but the block is not under construction. Contributed by chencan.
(cherry picked from commit61a9b4f58b
) (cherry picked from commit7a115e8de4
)
This commit is contained in:
parent
fd63be750a
commit
6f2a46578f
|
@ -1538,7 +1538,7 @@ public class DatanodeManager {
|
|||
}
|
||||
|
||||
private BlockRecoveryCommand getBlockRecoveryCommand(String blockPoolId,
|
||||
DatanodeDescriptor nodeinfo) {
|
||||
DatanodeDescriptor nodeinfo) throws IOException {
|
||||
BlockInfo[] blocks = nodeinfo.getLeaseRecoveryCommand(Integer.MAX_VALUE);
|
||||
if (blocks == null) {
|
||||
return null;
|
||||
|
@ -1546,7 +1546,10 @@ public class DatanodeManager {
|
|||
BlockRecoveryCommand brCommand = new BlockRecoveryCommand(blocks.length);
|
||||
for (BlockInfo b : blocks) {
|
||||
BlockUnderConstructionFeature uc = b.getUnderConstructionFeature();
|
||||
assert uc != null;
|
||||
if(uc == null) {
|
||||
throw new IOException("Recovery block " + b +
|
||||
"where it is not under construction.");
|
||||
}
|
||||
final DatanodeStorageInfo[] storages = uc.getExpectedStorageLocations();
|
||||
// Skip stale nodes during recovery
|
||||
final List<DatanodeStorageInfo> recoveryLocations =
|
||||
|
|
Loading…
Reference in New Issue