diff --git a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java index 6732c0400b18..65ff81cb8b1c 100644 --- a/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java +++ b/integration-test/src/test/java/org/apache/iotdb/confignode/it/partition/IoTDBPartitionGetterIT.java @@ -52,6 +52,8 @@ import org.apache.iotdb.itbase.category.ClusterIT; import org.apache.iotdb.rpc.TSStatusCode; +import org.apache.tsfile.file.metadata.IDeviceID; +import org.apache.tsfile.file.metadata.IDeviceID.Factory; import org.junit.AfterClass; import org.junit.Assert; import org.junit.BeforeClass; @@ -61,8 +63,8 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import java.io.ByteArrayOutputStream; import java.nio.ByteBuffer; -import java.nio.charset.StandardCharsets; import java.util.Arrays; import java.util.HashSet; import java.util.Map; @@ -346,12 +348,12 @@ public void testGetSlots() throws Exception { final String sg0 = "root.sg0"; final String sg1 = "root.sg1"; - final String d00 = sg0 + ".d0.s"; - final String d01 = sg0 + ".d1.s"; - final String d10 = sg1 + ".d0.s"; - final String d11 = sg1 + ".d1.s"; + final IDeviceID d00 = Factory.DEFAULT_FACTORY.create(sg0 + ".d0.s"); + final IDeviceID d01 = Factory.DEFAULT_FACTORY.create(sg0 + ".d1.s"); + final IDeviceID d10 = Factory.DEFAULT_FACTORY.create(sg1 + ".d0.s"); + final IDeviceID d11 = Factory.DEFAULT_FACTORY.create(sg1 + ".d1.s"); - String[] devices = new String[] {d00, d01, d10, d11}; + IDeviceID[] devices = new IDeviceID[] {d00, d01, d10, d11}; try (SyncConfigNodeIServiceClient client = (SyncConfigNodeIServiceClient) EnvFactory.getEnv().getLeaderConfigNodeConnection()) { @@ -431,8 +433,10 @@ public void testGetSlots() throws Exception { // Get RegionId with device TGetRegionIdReq deviceReq = new TGetRegionIdReq(TConsensusGroupType.DataRegion); - for (String device : devices) { - deviceReq.setDevice(device.getBytes(StandardCharsets.UTF_8)); + for (IDeviceID device : devices) { + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + device.serialize(baos); + deviceReq.setDevice(baos.toByteArray()); TGetRegionIdResp resp = client.getRegionId(deviceReq); Assert.assertEquals( TSStatusCode.SUCCESS_STATUS.getStatusCode(), resp.getStatus().getCode()); diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java index d26a13c125de..b903937a8000 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/partition/PartitionManager.java @@ -1086,10 +1086,10 @@ public GetRegionIdResp getRegionId(TGetRegionIdReq req) { if (req.isSetDatabase()) { plan.setDatabase(req.getDatabase()); } else { - plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(req.getDevice())); - plan.setSeriesSlotId( - executor.getSeriesPartitionSlot( - Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(ByteBuffer.wrap(req.getDevice())))); + IDeviceID deviceID = + Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(ByteBuffer.wrap(req.getDevice())); + plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(deviceID)); + plan.setSeriesSlotId(executor.getSeriesPartitionSlot(deviceID)); } if (Objects.equals(plan.getDatabase(), "")) { // Return empty result if Database not specified @@ -1123,10 +1123,10 @@ public GetTimeSlotListResp getTimeSlotList(TGetTimeSlotListReq req) { if (req.isSetDatabase()) { plan.setDatabase(req.getDatabase()); } else if (req.isSetDevice()) { - plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(req.getDevice())); - plan.setSeriesSlotId( - executor.getSeriesPartitionSlot( - Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(ByteBuffer.wrap(req.getDevice())))); + IDeviceID deviceID = + Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(ByteBuffer.wrap(req.getDevice())); + plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(deviceID)); + plan.setSeriesSlotId(executor.getSeriesPartitionSlot(deviceID)); if (Objects.equals(plan.getDatabase(), "")) { // Return empty result if Database not specified return new GetTimeSlotListResp(RpcUtils.SUCCESS_STATUS, new ArrayList<>()); @@ -1152,10 +1152,10 @@ public CountTimeSlotListResp countTimeSlotList(TCountTimeSlotListReq req) { if (req.isSetDatabase()) { plan.setDatabase(req.getDatabase()); } else if (req.isSetDevice()) { - plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(req.getDevice())); - plan.setSeriesSlotId( - executor.getSeriesPartitionSlot( - Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(ByteBuffer.wrap(req.getDevice())))); + IDeviceID deviceID = + Deserializer.DEFAULT_DESERIALIZER.deserializeFrom(ByteBuffer.wrap(req.getDevice())); + plan.setDatabase(getClusterSchemaManager().getDatabaseNameByDevice(deviceID)); + plan.setSeriesSlotId(executor.getSeriesPartitionSlot(deviceID)); if (Objects.equals(plan.getDatabase(), "")) { // Return empty result if Database not specified return new CountTimeSlotListResp(RpcUtils.SUCCESS_STATUS, 0); diff --git a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java index b2a57c8ea089..23796d640f63 100644 --- a/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java +++ b/iotdb-core/confignode/src/main/java/org/apache/iotdb/confignode/manager/schema/ClusterSchemaManager.java @@ -89,13 +89,13 @@ import org.apache.iotdb.rpc.RpcUtils; import org.apache.iotdb.rpc.TSStatusCode; +import org.apache.tsfile.file.metadata.IDeviceID; import org.apache.tsfile.utils.Pair; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import java.nio.ByteBuffer; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; import java.util.Map; import java.util.Set; @@ -611,20 +611,10 @@ public TDatabaseSchema getDatabaseSchemaByName(String database) * * @return The DatabaseName of the specified Device. Empty String if not exists. */ - public String getDatabaseNameByDevice(String devicePath) { + public String getDatabaseNameByDevice(IDeviceID deviceID) { List databases = getDatabaseNames(); for (String database : databases) { - if (PathUtils.isStartWith(devicePath, database)) { - return database; - } - } - return ""; - } - - public String getDatabaseNameByDevice(byte[] devicePath) { - List databases = getDatabaseNames(); - for (String database : databases) { - if (PathUtils.isStartWith(Arrays.toString(devicePath), database)) { + if (PathUtils.isStartWith(deviceID, database)) { return database; } } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java index bb1ccc1aa017..804fc220d689 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/execution/config/executor/ClusterConfigTaskExecutor.java @@ -2329,7 +2329,9 @@ public SettableFuture getRegionId(GetRegionIdStatement getRegi final TGetRegionIdReq tGetRegionIdReq = new TGetRegionIdReq(getRegionIdStatement.getPartitionType()); if (getRegionIdStatement.getDevice() != null) { - tGetRegionIdReq.setDevice(getRegionIdStatement.getDevice()); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + getRegionIdStatement.getDevice().serialize(baos); + tGetRegionIdReq.setDevice(baos.toByteArray()); } else { tGetRegionIdReq.setDatabase(getRegionIdStatement.getDatabase()); } @@ -2383,7 +2385,9 @@ public SettableFuture getTimeSlotList( if (getTimeSlotListStatement.getDatabase() != null) { tGetTimeSlotListReq.setDatabase(getTimeSlotListStatement.getDatabase()); } else if (getTimeSlotListStatement.getDevice() != null) { - tGetTimeSlotListReq.setDevice(getTimeSlotListStatement.getDevice()); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + getTimeSlotListStatement.getDevice().serialize(baos); + tGetTimeSlotListReq.setDevice(baos.toByteArray()); } else if (getTimeSlotListStatement.getRegionId() != -1) { tGetTimeSlotListReq.setRegionId(getTimeSlotListStatement.getRegionId()); } @@ -2416,7 +2420,9 @@ public SettableFuture countTimeSlotList( if (countTimeSlotListStatement.getDatabase() != null) { tCountTimeSlotListReq.setDatabase(countTimeSlotListStatement.getDatabase()); } else if (countTimeSlotListStatement.getDevice() != null) { - tCountTimeSlotListReq.setDevice(countTimeSlotListStatement.getDevice()); + ByteArrayOutputStream baos = new ByteArrayOutputStream(); + countTimeSlotListStatement.getDevice().serialize(baos); + tCountTimeSlotListReq.setDevice(baos.toByteArray()); } else if (countTimeSlotListStatement.getRegionId() != -1) { tCountTimeSlotListReq.setRegionId(countTimeSlotListStatement.getRegionId()); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java index 1ad95576efe1..0cbe98d43809 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/parser/ASTVisitor.java @@ -218,6 +218,7 @@ import org.apache.tsfile.common.conf.TSFileDescriptor; import org.apache.tsfile.common.constant.TsFileConstant; import org.apache.tsfile.enums.TSDataType; +import org.apache.tsfile.file.metadata.IDeviceID.Factory; import org.apache.tsfile.file.metadata.enums.CompressionType; import org.apache.tsfile.file.metadata.enums.TSEncoding; import org.apache.tsfile.read.common.TimeRange; @@ -226,7 +227,6 @@ import java.io.FileNotFoundException; import java.net.URI; import java.net.URISyntaxException; -import java.nio.charset.StandardCharsets; import java.time.ZoneId; import java.util.ArrayList; import java.util.Arrays; @@ -3883,7 +3883,7 @@ public Statement visitGetRegionId(IoTDBSqlParser.GetRegionIdContext ctx) { if (ctx.database != null) { getRegionIdStatement.setDatabase(ctx.database.getText()); } else { - getRegionIdStatement.setDevice(ctx.device.getText().getBytes(StandardCharsets.UTF_8)); + getRegionIdStatement.setDevice(Factory.DEFAULT_FACTORY.create(ctx.device.getText())); } getRegionIdStatement.setStartTimeStamp(-1L); getRegionIdStatement.setEndTimeStamp(Long.MAX_VALUE); @@ -3952,7 +3952,7 @@ public Statement visitGetTimeSlotList(IoTDBSqlParser.GetTimeSlotListContext ctx) if (ctx.database != null) { getTimeSlotListStatement.setDatabase(ctx.database.getText()); } else if (ctx.device != null) { - getTimeSlotListStatement.setDevice(ctx.device.getText().getBytes(StandardCharsets.UTF_8)); + getTimeSlotListStatement.setDevice(Factory.DEFAULT_FACTORY.create(ctx.device.getText())); } else if (ctx.regionId != null) { getTimeSlotListStatement.setRegionId(Integer.parseInt(ctx.regionId.getText())); } @@ -3973,7 +3973,7 @@ public Statement visitCountTimeSlotList(IoTDBSqlParser.CountTimeSlotListContext if (ctx.database != null) { countTimeSlotListStatement.setDatabase(ctx.database.getText()); } else if (ctx.device != null) { - countTimeSlotListStatement.setDevice(ctx.device.getText().getBytes(StandardCharsets.UTF_8)); + countTimeSlotListStatement.setDevice(Factory.DEFAULT_FACTORY.create(ctx.device.getText())); } else if (ctx.regionId != null) { countTimeSlotListStatement.setRegionId(Integer.parseInt(ctx.regionId.getText())); } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSlotListStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSlotListStatement.java index 358a07c9db0f..1d93c663d7a2 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSlotListStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/CountTimeSlotListStatement.java @@ -26,6 +26,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.Statement; import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor; +import org.apache.tsfile.file.metadata.IDeviceID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -37,7 +38,7 @@ public class CountTimeSlotListStatement extends Statement implements IConfigStat private String database; - private byte[] device; + private IDeviceID device; private long regionId = -1; @@ -75,11 +76,11 @@ public void setEndTime(long endTime) { this.endTime = endTime; } - public void setDevice(byte[] device) { + public void setDevice(IDeviceID device) { this.device = device; } - public byte[] getDevice() { + public IDeviceID getDevice() { return this.device; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetRegionIdStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetRegionIdStatement.java index b427a5ee85c1..c7ba3784194b 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetRegionIdStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetRegionIdStatement.java @@ -27,6 +27,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.Statement; import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor; +import org.apache.tsfile.file.metadata.IDeviceID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -47,7 +48,7 @@ public class GetRegionIdStatement extends Statement implements IConfigStatement private String database; - private byte[] device; + private IDeviceID device; private final TConsensusGroupType partitionType; private long startTimeStamp; @@ -84,7 +85,7 @@ public TConsensusGroupType getPartitionType() { return partitionType; } - public byte[] getDevice() { + public IDeviceID getDevice() { return device; } @@ -92,7 +93,7 @@ public void setDatabase(String database) { this.database = database; } - public void setDevice(byte[] device) { + public void setDevice(IDeviceID device) { this.device = device; } diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetTimeSlotListStatement.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetTimeSlotListStatement.java index 099ded8162a7..39d279c0ee63 100644 --- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetTimeSlotListStatement.java +++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/plan/statement/metadata/GetTimeSlotListStatement.java @@ -26,6 +26,7 @@ import org.apache.iotdb.db.queryengine.plan.statement.Statement; import org.apache.iotdb.db.queryengine.plan.statement.StatementVisitor; +import org.apache.tsfile.file.metadata.IDeviceID; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -46,7 +47,7 @@ public class GetTimeSlotListStatement extends Statement implements IConfigStatem private String database; - private byte[] device; + private IDeviceID device; private long regionId = -1; @@ -84,11 +85,11 @@ public void setEndTime(long endTime) { this.endTime = endTime; } - public void setDevice(byte[] device) { + public void setDevice(IDeviceID device) { this.device = device; } - public byte[] getDevice() { + public IDeviceID getDevice() { return this.device; } diff --git a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/PathUtils.java b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/PathUtils.java index f6233d1a5df0..06d66b2d10d6 100644 --- a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/PathUtils.java +++ b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/PathUtils.java @@ -182,10 +182,6 @@ public static boolean isRealNumber(String str) { return PathVisitor.isRealNumber(str); } - public static boolean isStartWith(String deviceName, String storageGroup) { - return deviceName.equals(storageGroup) || deviceName.startsWith(storageGroup + "."); - } - public static boolean isStartWith(IDeviceID deviceID, String storageGroup) { // TODO: use correct judgement without converting to string String deviceName = deviceID.toString();