Skip to content

Commit 9cadc71

Browse files
authored
[To dev/1.3] Load balance patch (#17463) (#17493) (#17527)
1 parent 8d1ad63 commit 9cadc71

2 files changed

Lines changed: 27 additions & 8 deletions

File tree

iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/load/service/EventService.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -114,6 +114,11 @@ public void stopEventService() {
114114
currentEventServiceFuture = null;
115115
LOGGER.info("Event service is stopped successfully.");
116116
}
117+
synchronized (this) {
118+
previousNodeStatisticsMap.clear();
119+
previousRegionGroupStatisticsMap.clear();
120+
previousConsensusGroupStatisticsMap.clear();
121+
}
117122
}
118123
}
119124

iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java

Lines changed: 22 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -59,7 +59,6 @@
5959
import java.util.Collections;
6060
import java.util.HashMap;
6161
import java.util.HashSet;
62-
import java.util.LinkedHashMap;
6362
import java.util.List;
6463
import java.util.Map;
6564
import java.util.Set;
@@ -421,16 +420,31 @@ private SchemaPartition parseSchemaPartitionTableResp(
421420
String database = entry1.getKey();
422421
final Map<TSeriesPartitionSlot, TRegionReplicaSet> result1 =
423422
regionReplicaMap.computeIfAbsent(database, k -> new HashMap<>());
423+
Map<TSeriesPartitionSlot, TConsensusGroupId> seriesPartitionTable = entry1.getValue();
424+
425+
if (seriesPartitionTable.size() == 1) {
426+
// Fast collection in case of query for single device
427+
Map.Entry<TSeriesPartitionSlot, TConsensusGroupId> seriesPartitionEntry =
428+
seriesPartitionTable.entrySet().iterator().next();
429+
List<TRegionReplicaSet> regionReplicaSets =
430+
partitionCache.getRegionReplicaSet(
431+
Collections.singletonList(seriesPartitionEntry.getValue()));
432+
result1.put(seriesPartitionEntry.getKey(), regionReplicaSets.get(0));
433+
continue;
434+
}
424435

425-
Map<TSeriesPartitionSlot, TConsensusGroupId> orderedMap =
426-
new LinkedHashMap<>(entry1.getValue());
427-
List<TConsensusGroupId> orderedGroupIds = new ArrayList<>(orderedMap.values());
436+
List<TConsensusGroupId> distinctRegionGroupIds =
437+
new ArrayList<>(new HashSet<>(seriesPartitionTable.values()));
428438
List<TRegionReplicaSet> regionReplicaSets =
429-
partitionCache.getRegionReplicaSet(orderedGroupIds);
439+
partitionCache.getRegionReplicaSet(distinctRegionGroupIds);
440+
Map<TConsensusGroupId, TRegionReplicaSet> groupIdToReplicaSet = new HashMap<>();
441+
for (int index = 0; index < distinctRegionGroupIds.size(); index++) {
442+
groupIdToReplicaSet.put(distinctRegionGroupIds.get(index), regionReplicaSets.get(index));
443+
}
430444

431-
int index = 0;
432-
for (Map.Entry<TSeriesPartitionSlot, TConsensusGroupId> entry2 : orderedMap.entrySet()) {
433-
result1.put(entry2.getKey(), regionReplicaSets.get(index++));
445+
for (Map.Entry<TSeriesPartitionSlot, TConsensusGroupId> entry2 :
446+
seriesPartitionTable.entrySet()) {
447+
result1.put(entry2.getKey(), groupIdToReplicaSet.get(entry2.getValue()));
434448
}
435449
}
436450

0 commit comments

Comments
 (0)