HDFS-13758. DatanodeManager should throw exception if it has BlockRecoveryCommand but the block is not under construction. Contributed by chencan.
This commit is contained in:
parent
4cba0741d5
commit
61a9b4f58b
@ -1542,7 +1542,7 @@ private void setDatanodeDead(DatanodeDescriptor node) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
private BlockRecoveryCommand getBlockRecoveryCommand(String blockPoolId,
|
private BlockRecoveryCommand getBlockRecoveryCommand(String blockPoolId,
|
||||||
DatanodeDescriptor nodeinfo) {
|
DatanodeDescriptor nodeinfo) throws IOException {
|
||||||
BlockInfo[] blocks = nodeinfo.getLeaseRecoveryCommand(Integer.MAX_VALUE);
|
BlockInfo[] blocks = nodeinfo.getLeaseRecoveryCommand(Integer.MAX_VALUE);
|
||||||
if (blocks == null) {
|
if (blocks == null) {
|
||||||
return null;
|
return null;
|
||||||
@ -1550,7 +1550,10 @@ private BlockRecoveryCommand getBlockRecoveryCommand(String blockPoolId,
|
|||||||
BlockRecoveryCommand brCommand = new BlockRecoveryCommand(blocks.length);
|
BlockRecoveryCommand brCommand = new BlockRecoveryCommand(blocks.length);
|
||||||
for (BlockInfo b : blocks) {
|
for (BlockInfo b : blocks) {
|
||||||
BlockUnderConstructionFeature uc = b.getUnderConstructionFeature();
|
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();
|
final DatanodeStorageInfo[] storages = uc.getExpectedStorageLocations();
|
||||||
// Skip stale nodes during recovery
|
// Skip stale nodes during recovery
|
||||||
final List<DatanodeStorageInfo> recoveryLocations =
|
final List<DatanodeStorageInfo> recoveryLocations =
|
||||||
|
Loading…
Reference in New Issue
Block a user