This is an automated email from the ASF dual-hosted git repository.
yongzao pushed a commit to branch optimize-cluster-partition-fetcher
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to
refs/heads/optimize-cluster-partition-fetcher by this push:
new f9a18ea764b f
f9a18ea764b is described below
commit f9a18ea764b16c47ead034941e63c16d53c7fd08
Author: Yongzao <[email protected]>
AuthorDate: Thu Apr 16 10:04:36 2026 +0800
f
---
.../plan/analyze/ClusterPartitionFetcher.java | 28 +++++++++++++++-------
1 file changed, 19 insertions(+), 9 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java
index ca7ae02f739..f93b9964c20 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/analyze/ClusterPartitionFetcher.java
@@ -60,7 +60,6 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
-import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;
import java.util.Objects;
@@ -520,19 +519,30 @@ public class ClusterPartitionFetcher implements
IPartitionFetcher {
String database = entry1.getKey();
final Map<TSeriesPartitionSlot, TRegionReplicaSet> result1 =
regionReplicaMap.computeIfAbsent(database, k -> new HashMap<>());
+ Map<TSeriesPartitionSlot, TConsensusGroupId> seriesPartitionTable =
entry1.getValue();
+
+ if (seriesPartitionTable.size() == 1) {
+ // Fast collection in case of query for single device
+ Map.Entry<TSeriesPartitionSlot, TConsensusGroupId>
seriesPartitionEntry =
+ seriesPartitionTable.entrySet().iterator().next();
+ List<TRegionReplicaSet> regionReplicaSets =
+ partitionCache.getRegionReplicaSet(
+ Collections.singletonList(seriesPartitionEntry.getValue()));
+ result1.put(seriesPartitionEntry.getKey(), regionReplicaSets.get(0));
+ continue;
+ }
- Map<TSeriesPartitionSlot, TConsensusGroupId> orderedMap =
- new LinkedHashMap<>(entry1.getValue());
- List<TConsensusGroupId> orderedGroupIds =
- orderedMap.values().stream().distinct().collect(Collectors.toList());
+ List<TConsensusGroupId> distinctRegionGroupIds =
+ new ArrayList<>(new HashSet<>(seriesPartitionTable.values()));
List<TRegionReplicaSet> regionReplicaSets =
- partitionCache.getRegionReplicaSet(orderedGroupIds);
+ partitionCache.getRegionReplicaSet(distinctRegionGroupIds);
Map<TConsensusGroupId, TRegionReplicaSet> groupIdToReplicaSet = new
HashMap<>();
- for (int index = 0; index < orderedGroupIds.size(); index++) {
- groupIdToReplicaSet.put(orderedGroupIds.get(index),
regionReplicaSets.get(index));
+ for (int index = 0; index < distinctRegionGroupIds.size(); index++) {
+ groupIdToReplicaSet.put(distinctRegionGroupIds.get(index),
regionReplicaSets.get(index));
}
- for (Map.Entry<TSeriesPartitionSlot, TConsensusGroupId> entry2 :
orderedMap.entrySet()) {
+ for (Map.Entry<TSeriesPartitionSlot, TConsensusGroupId> entry2 :
+ seriesPartitionTable.entrySet()) {
result1.put(entry2.getKey(),
groupIdToReplicaSet.get(entry2.getValue()));
}
}