This is an automated email from the ASF dual-hosted git repository. yongzao pushed a commit to branch add_logs_for_data_allocation in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit c7652df318de6f9aac1c5cd1ed24b478cec03341 Author: YongzaoDan <[email protected]> AuthorDate: Tue Feb 27 15:04:15 2024 +0800 Finish --- .../manager/load/balancer/PartitionBalancer.java | 31 +++++++++++++++------- 1 file changed, 21 insertions(+), 10 deletions(-) diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/PartitionBalancer.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/PartitionBalancer.java index 86bb000ca05..ccf2f5caaed 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/PartitionBalancer.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/balancer/PartitionBalancer.java @@ -123,12 +123,13 @@ public class PartitionBalancer { // Filter available DataRegionGroups and // sort them by the number of allocated DataPartitions - BalanceTreeMap<TConsensusGroupId, Integer> counter = new BalanceTreeMap<>(); + BalanceTreeMap<TConsensusGroupId, Integer> availableDataRegionGroupCounter = + new BalanceTreeMap<>(); List<Pair<Long, TConsensusGroupId>> regionSlotsCounter = getPartitionManager() .getSortedRegionGroupSlotsCounter(database, TConsensusGroupType.DataRegion); for (Pair<Long, TConsensusGroupId> pair : regionSlotsCounter) { - counter.put(pair.getRight(), pair.getLeft().intValue()); + availableDataRegionGroupCounter.put(pair.getRight(), pair.getLeft().intValue()); } DataPartitionTable dataPartitionTable = new DataPartitionTable(); @@ -152,18 +153,20 @@ public class PartitionBalancer { TConsensusGroupId successor = getPartitionManager() .getSuccessorDataPartition(database, seriesPartitionSlot, timePartitionSlot); - if (successor != null && counter.containsKey(successor)) { + if (successor != null && availableDataRegionGroupCounter.containsKey(successor)) { seriesPartitionTable.putDataPartition(timePartitionSlot, successor); - counter.put(successor, counter.get(successor) + 1); + availableDataRegionGroupCounter.put( + successor, availableDataRegionGroupCounter.get(successor) + 1); continue; } // 2. Assign DataPartition base on the DataAllotTable TConsensusGroupId allotGroupId = allotTable.getRegionGroupIdOrActivateIfNecessary(seriesPartitionSlot); - if (counter.containsKey(allotGroupId)) { + if (availableDataRegionGroupCounter.containsKey(allotGroupId)) { seriesPartitionTable.putDataPartition(timePartitionSlot, allotGroupId); - counter.put(allotGroupId, counter.get(allotGroupId) + 1); + availableDataRegionGroupCounter.put( + allotGroupId, availableDataRegionGroupCounter.get(allotGroupId) + 1); continue; } @@ -172,17 +175,25 @@ public class PartitionBalancer { TConsensusGroupId predecessor = getPartitionManager() .getPredecessorDataPartition(database, seriesPartitionSlot, timePartitionSlot); - if (predecessor != null && counter.containsKey(predecessor)) { + if (predecessor != null && availableDataRegionGroupCounter.containsKey(predecessor)) { seriesPartitionTable.putDataPartition(timePartitionSlot, predecessor); - counter.put(predecessor, counter.get(predecessor) + 1); + availableDataRegionGroupCounter.put( + predecessor, availableDataRegionGroupCounter.get(predecessor) + 1); continue; } // 4. Assign the DataPartition to DataRegionGroup with the least DataPartitions // If the above DataRegionGroups are unavailable - TConsensusGroupId greedyGroupId = counter.getKeyWithMinValue(); + TConsensusGroupId greedyGroupId = availableDataRegionGroupCounter.getKeyWithMinValue(); seriesPartitionTable.putDataPartition(timePartitionSlot, greedyGroupId); - counter.put(greedyGroupId, counter.get(greedyGroupId) + 1); + availableDataRegionGroupCounter.put( + greedyGroupId, availableDataRegionGroupCounter.get(greedyGroupId) + 1); + LOGGER.warn( + "[PartitionBalancer] The SeriesSlot: {} in TimeSlot: {} will be allocated to DataRegionGroup: {}, because the original target: {} is currently unavailable.", + seriesPartitionSlot, + timePartitionSlot, + greedyGroupId, + allotGroupId); } dataPartitionTable
