This is an automated email from the ASF dual-hosted git repository.

yongzao pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git


The following commit(s) were added to refs/heads/master by this push:
     new a389d79a82d [IOTDB-5998] Fix device query bugs in show slot APIs
a389d79a82d is described below

commit a389d79a82d6a9f59635992d98a225ce1e1e2930
Author: YongzaoDan <[email protected]>
AuthorDate: Sun Jun 18 22:16:30 2023 +0800

    [IOTDB-5998] Fix device query bugs in show slot APIs
---
 .../manager/partition/PartitionManager.java        | 17 +++++++++
 .../manager/schema/ClusterSchemaManager.java       | 16 +++++++++
 .../persistence/partition/PartitionInfo.java       | 42 +++++++---------------
 3 files changed, 46 insertions(+), 29 deletions(-)

diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
index 123dad42c60..386dc221ffd 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java
@@ -98,6 +98,7 @@ import java.util.HashSet;
 import java.util.LinkedList;
 import java.util.List;
 import java.util.Map;
+import java.util.Objects;
 import java.util.Optional;
 import java.util.Queue;
 import java.util.Set;
@@ -900,8 +901,14 @@ public class PartitionManager {
     if (req.isSetDatabase()) {
       plan.setDatabase(req.getDatabase());
     } else {
+      
plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(req.getDevice()));
       plan.setSeriesSlotId(executor.getSeriesPartitionSlot(req.getDevice()));
     }
+    if (Objects.equals(plan.getDatabase(), "")) {
+      // Return empty result if Database not specified
+      return new GetRegionIdResp(RpcUtils.SUCCESS_STATUS, new ArrayList<>());
+    }
+
     if (req.isSetTimeStamp()) {
       plan.setTimeSlotId(
           new TTimePartitionSlot(
@@ -917,7 +924,12 @@ public class PartitionManager {
     if (req.isSetDatabase()) {
       plan.setDatabase(req.getDatabase());
     } else if (req.isSetDevice()) {
+      
plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(req.getDevice()));
       plan.setSeriesSlotId(executor.getSeriesPartitionSlot(req.getDevice()));
+      if (Objects.equals(plan.getDatabase(), "")) {
+        // Return empty result if Database not specified
+        return new GetTimeSlotListResp(RpcUtils.SUCCESS_STATUS, new 
ArrayList<>());
+      }
     } else {
       plan.setRegionId(
           new TConsensusGroupId(TConsensusGroupType.DataRegion, (int) 
req.getRegionId()));
@@ -932,7 +944,12 @@ public class PartitionManager {
     if (req.isSetDatabase()) {
       plan.setDatabase(req.getDatabase());
     } else if (req.isSetDevice()) {
+      
plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(req.getDevice()));
       plan.setSeriesSlotId(executor.getSeriesPartitionSlot(req.getDevice()));
+      if (Objects.equals(plan.getDatabase(), "")) {
+        // Return empty result if Database not specified
+        return new CountTimeSlotListResp(RpcUtils.SUCCESS_STATUS, 0);
+      }
     } else {
       plan.setRegionId(
           new TConsensusGroupId(TConsensusGroupType.DataRegion, (int) 
req.getRegionId()));
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
index 1826e231606..0dcb842aab4 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java
@@ -26,6 +26,7 @@ import 
org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.exception.MetadataException;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.service.metric.MetricService;
+import org.apache.iotdb.commons.utils.PathUtils;
 import org.apache.iotdb.commons.utils.StatusUtils;
 import org.apache.iotdb.confignode.client.DataNodeRequestType;
 import org.apache.iotdb.confignode.client.async.AsyncDataNodeClientPool;
@@ -532,6 +533,21 @@ public class ClusterSchemaManager {
     return clusterSchemaInfo.getMatchedDatabaseSchemaByName(database);
   }
 
+  /**
+   * Only leader use this interface.
+   *
+   * @return The DatabaseName of the specified Device. Empty String if not 
exists.
+   */
+  public String getDatabaseNameByDevice(String devicePath) {
+    List<String> databases = getDatabaseNames();
+    for (String database : databases) {
+      if (PathUtils.isStartWith(devicePath, database)) {
+        return database;
+      }
+    }
+    return "";
+  }
+
   /**
    * Only leader use this interface. Get the specified Databases' schema
    *
diff --git 
a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
 
b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
index 88887539b10..c6a74c1313e 100644
--- 
a/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
+++ 
b/confignode/src/main/java/org/apache/iotdb/confignode/persistence/partition/PartitionInfo.java
@@ -868,37 +868,21 @@ public class PartitionInfo implements SnapshotProcessor {
    * @return GetRegionIdResp with STATUS and List<TConsensusGroupId>.
    */
   public DataSet getRegionId(GetRegionIdPlan plan) {
-    if (!plan.getDatabase().equals("")) {
-      // get regionId of specific database.
-      if (!isDatabaseExisted(plan.getDatabase())) {
-        return new GetRegionIdResp(
-            new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()), new 
ArrayList<>());
-      } else {
-        DatabasePartitionTable sgPartitionTable = 
databasePartitionTables.get(plan.getDatabase());
-        return new GetRegionIdResp(
-            new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()),
-            sgPartitionTable
-                .getRegionId(plan.getPartitionType(), plan.getSeriesSlotId(), 
plan.getTimeSlotId())
-                .stream()
-                .distinct()
-                .sorted(Comparator.comparing(TConsensusGroupId::getId))
-                .collect(Collectors.toList()));
-      }
-    } else {
-      // get regionId of specific seriesSlotId(device).
-      List<TConsensusGroupId> regionIds = new ArrayList<>();
-      databasePartitionTables.forEach(
-          (database, databasePartitionTable) ->
-              regionIds.addAll(
-                  databasePartitionTable.getRegionId(
-                      plan.getPartitionType(), plan.getSeriesSlotId(), 
plan.getTimeSlotId())));
+    if (!isDatabaseExisted(plan.getDatabase())) {
+      // Return empty result if Database doesn't exist
       return new GetRegionIdResp(
-          new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()),
-          regionIds.stream()
-              .distinct()
-              .sorted(Comparator.comparing(TConsensusGroupId::getId))
-              .collect(Collectors.toList()));
+          new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()), new 
ArrayList<>());
     }
+
+    DatabasePartitionTable databasePartitionTable = 
databasePartitionTables.get(plan.getDatabase());
+    return new GetRegionIdResp(
+        new TSStatus(TSStatusCode.SUCCESS_STATUS.getStatusCode()),
+        databasePartitionTable
+            .getRegionId(plan.getPartitionType(), plan.getSeriesSlotId(), 
plan.getTimeSlotId())
+            .stream()
+            .distinct()
+            .sorted(Comparator.comparing(TConsensusGroupId::getId))
+            .collect(Collectors.toList()));
   }
 
   /**

Reply via email to