|
@@ -273,7 +273,7 @@ public class BlockManager {
|
|
|
private double replicationQueuesInitProgress = 0.0;
|
|
|
|
|
|
/** for block replicas placement */
|
|
|
- private BlockPlacementPolicy blockplacement;
|
|
|
+ private BlockPlacementPolicies placementPolicies;
|
|
|
private final BlockStoragePolicySuite storagePolicySuite;
|
|
|
|
|
|
/** Check whether name system is running before terminating */
|
|
@@ -297,7 +297,7 @@ public class BlockManager {
|
|
|
// Compute the map capacity by allocating 2% of total memory
|
|
|
blocksMap = new BlocksMap(
|
|
|
LightWeightGSet.computeCapacity(2.0, "BlocksMap"));
|
|
|
- blockplacement = BlockPlacementPolicy.getInstance(
|
|
|
+ placementPolicies = new BlockPlacementPolicies(
|
|
|
conf, datanodeManager.getFSClusterStats(),
|
|
|
datanodeManager.getNetworkTopology(),
|
|
|
datanodeManager.getHost2DatanodeMap());
|
|
@@ -490,15 +490,7 @@ public class BlockManager {
|
|
|
|
|
|
@VisibleForTesting
|
|
|
public BlockPlacementPolicy getBlockPlacementPolicy() {
|
|
|
- return blockplacement;
|
|
|
- }
|
|
|
-
|
|
|
- /** Set BlockPlacementPolicy */
|
|
|
- public void setBlockPlacementPolicy(BlockPlacementPolicy newpolicy) {
|
|
|
- if (newpolicy == null) {
|
|
|
- throw new HadoopIllegalArgumentException("newpolicy == null");
|
|
|
- }
|
|
|
- this.blockplacement = newpolicy;
|
|
|
+ return placementPolicies.getPolicy(false);
|
|
|
}
|
|
|
|
|
|
/** Dump meta data to out. */
|
|
@@ -1504,7 +1496,9 @@ public class BlockManager {
|
|
|
// choose replication targets: NOT HOLDING THE GLOBAL LOCK
|
|
|
// It is costly to extract the filename for which chooseTargets is called,
|
|
|
// so for now we pass in the block collection itself.
|
|
|
- rw.chooseTargets(blockplacement, storagePolicySuite, excludedNodes);
|
|
|
+ final BlockPlacementPolicy placementPolicy =
|
|
|
+ placementPolicies.getPolicy(rw.block.isStriped());
|
|
|
+ rw.chooseTargets(placementPolicy, storagePolicySuite, excludedNodes);
|
|
|
}
|
|
|
|
|
|
// Step 3: add tasks to the DN
|
|
@@ -1630,7 +1624,7 @@ public class BlockManager {
|
|
|
/** Choose target for WebHDFS redirection. */
|
|
|
public DatanodeStorageInfo[] chooseTarget4WebHDFS(String src,
|
|
|
DatanodeDescriptor clientnode, Set<Node> excludes, long blocksize) {
|
|
|
- return blockplacement.chooseTarget(src, 1, clientnode,
|
|
|
+ return placementPolicies.getPolicy(false).chooseTarget(src, 1, clientnode,
|
|
|
Collections.<DatanodeStorageInfo>emptyList(), false, excludes,
|
|
|
blocksize, storagePolicySuite.getDefaultPolicy());
|
|
|
}
|
|
@@ -1642,9 +1636,10 @@ public class BlockManager {
|
|
|
List<DatanodeStorageInfo> chosen,
|
|
|
Set<Node> excludes,
|
|
|
long blocksize,
|
|
|
- byte storagePolicyID) {
|
|
|
-
|
|
|
+ byte storagePolicyID,
|
|
|
+ boolean isStriped) {
|
|
|
final BlockStoragePolicy storagePolicy = storagePolicySuite.getPolicy(storagePolicyID);
|
|
|
+ final BlockPlacementPolicy blockplacement = placementPolicies.getPolicy(isStriped);
|
|
|
return blockplacement.chooseTarget(src, numAdditionalNodes, clientnode,
|
|
|
chosen, true, excludes, blocksize, storagePolicy);
|
|
|
}
|
|
@@ -1662,10 +1657,12 @@ public class BlockManager {
|
|
|
final Set<Node> excludedNodes,
|
|
|
final long blocksize,
|
|
|
final List<String> favoredNodes,
|
|
|
- final byte storagePolicyID) throws IOException {
|
|
|
+ final byte storagePolicyID,
|
|
|
+ final boolean isStriped) throws IOException {
|
|
|
List<DatanodeDescriptor> favoredDatanodeDescriptors =
|
|
|
getDatanodeDescriptors(favoredNodes);
|
|
|
final BlockStoragePolicy storagePolicy = storagePolicySuite.getPolicy(storagePolicyID);
|
|
|
+ final BlockPlacementPolicy blockplacement = placementPolicies.getPolicy(isStriped);
|
|
|
final DatanodeStorageInfo[] targets = blockplacement.chooseTarget(src,
|
|
|
numOfReplicas, client, excludedNodes, blocksize,
|
|
|
favoredDatanodeDescriptors, storagePolicy);
|
|
@@ -3088,7 +3085,7 @@ public class BlockManager {
|
|
|
}
|
|
|
}
|
|
|
chooseExcessReplicates(nonExcess, block, replication,
|
|
|
- addedNode, delNodeHint, blockplacement);
|
|
|
+ addedNode, delNodeHint, placementPolicies.getPolicy(false));
|
|
|
}
|
|
|
|
|
|
|
|
@@ -4126,4 +4123,5 @@ public class BlockManager {
|
|
|
clearQueues();
|
|
|
blocksMap.clear();
|
|
|
}
|
|
|
+
|
|
|
}
|