This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch rel/1.2
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/1.2 by this push:
new b1dd46cec9c [IOTDB-5998] Fix device query bugs in show slot APIs
(#10209)
b1dd46cec9c is described below
commit b1dd46cec9cc69cc888814a9dd89ff9e77b63a4d
Author: YongzaoDan <[email protected]>
AuthorDate: Mon Jun 19 17:59:00 2023 +0800
[IOTDB-5998] Fix device query bugs in show slot APIs (#10209)
---
.../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 4b1f962b525..1d9d4c95756 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
@@ -96,6 +96,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;
@@ -853,8 +854,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(
@@ -870,7 +877,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()));
@@ -885,7 +897,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 355e6744878..b000b213db1 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;
@@ -525,6 +526,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 6771f17d75b..0a31ef5de68 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
@@ -862,37 +862,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()));
}
/**