From 58c694f3e5f26287734deabab04e30d6877859c0 Mon Sep 17 00:00:00 2001 From: zhanghaobo Date: Fri, 4 Aug 2023 18:53:59 +0800 Subject: [PATCH] HDFS-17142. Refactor method BlockManager#chooseExcessRedundancies. --- .../server/blockmanagement/BlockManager.java | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java index d00bface655a6..a9ee8c9bc6fb1 100644 --- a/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java +++ b/hadoop-hdfs-project/hadoop-hdfs/src/main/java/org/apache/hadoop/hdfs/server/blockmanagement/BlockManager.java @@ -4104,18 +4104,15 @@ private void chooseExcessRedundancies( DatanodeDescriptor addedNode, DatanodeDescriptor delNodeHint) { assert namesystem.hasWriteLock(); - // first form a rack to datanodes map and BlockCollection bc = getBlockCollection(storedBlock); + final BlockStoragePolicy storagePolicy = storagePolicySuite.getPolicy( + bc.getStoragePolicyID()); if (storedBlock.isStriped()) { - chooseExcessRedundancyStriped(bc, nonExcess, storedBlock, delNodeHint); + chooseExcessRedundancyStriped(storagePolicy, nonExcess, storedBlock, delNodeHint); } else { if (nonExcess.size() > replication) { - final BlockStoragePolicy storagePolicy = storagePolicySuite.getPolicy( - bc.getStoragePolicyID()); - final List excessTypes = storagePolicy.chooseExcess( - replication, DatanodeStorageInfo.toStorageTypes(nonExcess)); chooseExcessRedundancyContiguous(nonExcess, storedBlock, replication, - addedNode, delNodeHint, excessTypes); + addedNode, delNodeHint, storagePolicy); } } } @@ -4137,7 +4134,9 @@ private void chooseExcessRedundancies( private void chooseExcessRedundancyContiguous( final Collection nonExcess, BlockInfo storedBlock, short replication, DatanodeDescriptor addedNode, - DatanodeDescriptor delNodeHint, List excessTypes) { + DatanodeDescriptor delNodeHint, BlockStoragePolicy storagePolicy) { + final List excessTypes = storagePolicy.chooseExcess( + replication, DatanodeStorageInfo.toStorageTypes(nonExcess)); BlockPlacementPolicy replicator = placementPolicies.getPolicy(CONTIGUOUS); List replicasToDelete = replicator .chooseReplicasToDelete(nonExcess, nonExcess, replication, excessTypes, @@ -4156,7 +4155,7 @@ private void chooseExcessRedundancyContiguous( * The block placement policy will make sure that the left internal blocks are * spread across racks and also try hard to pick one with least free space. */ - private void chooseExcessRedundancyStriped(BlockCollection bc, + private void chooseExcessRedundancyStriped(BlockStoragePolicy storagePolicy, final Collection nonExcess, BlockInfo storedBlock, DatanodeDescriptor delNodeHint) { @@ -4192,8 +4191,6 @@ private void chooseExcessRedundancyStriped(BlockCollection bc, // cardinality of found indicates the expected number of internal blocks final int numOfTarget = found.cardinality(); - final BlockStoragePolicy storagePolicy = storagePolicySuite.getPolicy( - bc.getStoragePolicyID()); final List excessTypes = storagePolicy.chooseExcess( (short) numOfTarget, DatanodeStorageInfo.toStorageTypes(nonExcess)); if (excessTypes.isEmpty()) {