HDFS-4937. ReplicationMonitor can infinite-loop in BlockPlacementPolicyDefault#chooseRandom(). Contributed by Kihwal Lee.
(cherry picked from commit ff47f35dee
)
This commit is contained in:
parent
6edd41ac69
commit
37abd0e33b
|
@ -1410,6 +1410,9 @@ Release 2.7.3 - UNRELEASED
|
|||
HDFS-9289. Make DataStreamer#block thread safe and verify genStamp in
|
||||
commitBlock. (Chang Li via zhz)
|
||||
|
||||
HDFS-4937. ReplicationMonitor can infinite-loop in
|
||||
BlockPlacementPolicyDefault#chooseRandom(). (kihwal)
|
||||
|
||||
Release 2.7.2 - UNRELEASED
|
||||
|
||||
INCOMPATIBLE CHANGES
|
||||
|
|
|
@ -659,6 +659,7 @@ public class BlockPlacementPolicyDefault extends BlockPlacementPolicy {
|
|||
|
||||
int numOfAvailableNodes = clusterMap.countNumOfAvailableNodes(
|
||||
scope, excludedNodes);
|
||||
int refreshCounter = numOfAvailableNodes;
|
||||
StringBuilder builder = null;
|
||||
if (LOG.isDebugEnabled()) {
|
||||
builder = debugLoggingBuilder.get();
|
||||
|
@ -708,6 +709,14 @@ public class BlockPlacementPolicyDefault extends BlockPlacementPolicy {
|
|||
// If no candidate storage was found on this DN then set badTarget.
|
||||
badTarget = (storage == null);
|
||||
}
|
||||
// Refresh the node count. If the live node count became smaller,
|
||||
// but it is not reflected in this loop, it may loop forever in case
|
||||
// the replicas/rack cannot be satisfied.
|
||||
if (--refreshCounter == 0) {
|
||||
numOfAvailableNodes = clusterMap.countNumOfAvailableNodes(scope,
|
||||
excludedNodes);
|
||||
refreshCounter = numOfAvailableNodes;
|
||||
}
|
||||
}
|
||||
|
||||
if (numOfReplicas>0) {
|
||||
|
|
Loading…
Reference in New Issue