Details
-
Improvement
-
Status: Resolved
-
Minor
-
Resolution: Fixed
-
3.4.0
-
Reviewed
Description
BlockReconstructionWork should resetTargets() before BlockManager#validateReconstructionWork return false
the related code is in BlockManager.java
// code placeholder private boolean validateReconstructionWork(BlockReconstructionWork rw) { BlockInfo block = rw.getBlock(); int priority = rw.getPriority(); ... if (block.isDeleted() || !block.isCompleteOrCommitted()) { neededReconstruction.remove(block, priority); rw.resetTargets(); return false; } // do not schedule more if enough replicas is already pending ... if (hasEnoughEffectiveReplicas(block, numReplicas, pendingNum)) { neededReconstruction.remove(block, priority); rw.resetTargets(); blockLog.debug("BLOCK* Removing {} from neededReconstruction as" + " it has enough replicas", block); return false; } DatanodeStorageInfo[] targets = rw.getTargets(); BlockPlacementStatus placementStatus = getBlockPlacementStatus(block); if ((numReplicas.liveReplicas() >= requiredRedundancy) && (!placementStatus.isPlacementPolicySatisfied())) { BlockPlacementStatus newPlacementStatus = getBlockPlacementStatus(block, targets); if (!newPlacementStatus.isPlacementPolicySatisfied() && (newPlacementStatus.getAdditionalReplicasRequired() >= placementStatus.getAdditionalReplicasRequired())) { ... //Here to add rw.resetTargets(); return false; } rw.setNotEnoughRack(); } ... return true; }
Attachments
Issue Links
- links to