|
@@ -435,7 +435,7 @@ public class BlockPlacementPolicyDefault extends BlockPlacementPolicy {
|
|
* @param storageTypes storage type to be considered for target
|
|
* @param storageTypes storage type to be considered for target
|
|
* @return local node of writer (not chosen node)
|
|
* @return local node of writer (not chosen node)
|
|
*/
|
|
*/
|
|
- private Node chooseTarget(int numOfReplicas,
|
|
|
|
|
|
+ private Node chooseTarget(final int numOfReplicas,
|
|
Node writer,
|
|
Node writer,
|
|
final Set<Node> excludedNodes,
|
|
final Set<Node> excludedNodes,
|
|
final long blocksize,
|
|
final long blocksize,
|
|
@@ -469,7 +469,7 @@ public class BlockPlacementPolicyDefault extends BlockPlacementPolicy {
|
|
LOG.trace("storageTypes={}", storageTypes);
|
|
LOG.trace("storageTypes={}", storageTypes);
|
|
|
|
|
|
try {
|
|
try {
|
|
- if ((numOfReplicas = requiredStorageTypes.size()) == 0) {
|
|
|
|
|
|
+ if (requiredStorageTypes.size() == 0) {
|
|
throw new NotEnoughReplicasException(
|
|
throw new NotEnoughReplicasException(
|
|
"All required storage types are unavailable: "
|
|
"All required storage types are unavailable: "
|
|
+ " unavailableStorages=" + unavailableStorages
|
|
+ " unavailableStorages=" + unavailableStorages
|
|
@@ -498,10 +498,10 @@ public class BlockPlacementPolicyDefault extends BlockPlacementPolicy {
|
|
for (DatanodeStorageInfo resultStorage : results) {
|
|
for (DatanodeStorageInfo resultStorage : results) {
|
|
addToExcludedNodes(resultStorage.getDatanodeDescriptor(), oldExcludedNodes);
|
|
addToExcludedNodes(resultStorage.getDatanodeDescriptor(), oldExcludedNodes);
|
|
}
|
|
}
|
|
- // Set numOfReplicas, since it can get out of sync with the result list
|
|
|
|
|
|
+ // Set newNumOfReplicas, since it can get out of sync with the result list
|
|
// if the NotEnoughReplicasException was thrown in chooseRandom().
|
|
// if the NotEnoughReplicasException was thrown in chooseRandom().
|
|
- numOfReplicas = totalReplicasExpected - results.size();
|
|
|
|
- return chooseTarget(numOfReplicas, writer, oldExcludedNodes, blocksize,
|
|
|
|
|
|
+ int newNumOfReplicas = totalReplicasExpected - results.size();
|
|
|
|
+ return chooseTarget(newNumOfReplicas, writer, oldExcludedNodes, blocksize,
|
|
maxNodesPerRack, results, false, storagePolicy, unavailableStorages,
|
|
maxNodesPerRack, results, false, storagePolicy, unavailableStorages,
|
|
newBlock, null);
|
|
newBlock, null);
|
|
}
|
|
}
|
|
@@ -520,8 +520,8 @@ public class BlockPlacementPolicyDefault extends BlockPlacementPolicy {
|
|
addToExcludedNodes(resultStorage.getDatanodeDescriptor(),
|
|
addToExcludedNodes(resultStorage.getDatanodeDescriptor(),
|
|
oldExcludedNodes);
|
|
oldExcludedNodes);
|
|
}
|
|
}
|
|
- numOfReplicas = totalReplicasExpected - results.size();
|
|
|
|
- return chooseTarget(numOfReplicas, writer, oldExcludedNodes, blocksize,
|
|
|
|
|
|
+ int newNumOfReplicas = totalReplicasExpected - results.size();
|
|
|
|
+ return chooseTarget(newNumOfReplicas, writer, oldExcludedNodes, blocksize,
|
|
maxNodesPerRack, results, false, storagePolicy, unavailableStorages,
|
|
maxNodesPerRack, results, false, storagePolicy, unavailableStorages,
|
|
newBlock, null);
|
|
newBlock, null);
|
|
}
|
|
}
|