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()));
       }
     }

Reply via email to