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