This is an automated email from the ASF dual-hosted git repository. xingtanzjr pushed a commit to branch test_partition_fail in repository https://gitbox.apache.org/repos/asf/iotdb.git
commit 2a85be2e5d463567fc7ed9d303857618c5fa9995 Author: Jinrui.Zhang <[email protected]> AuthorDate: Fri Sep 23 20:12:34 2022 +0800 Revert "[IOTDB-4481] Use time_partition_interval_for_routing in PartitionFetcher (#7407)" This reverts commit 6b04945052b09ef2561b8bb06ec7986105643596. --- .../resources/conf/iotdb-confignode.properties | 2 +- .../confignode/conf/ConfigNodeDescriptor.java | 3 +- .../iotdb/confignode/manager/ConfigManager.java | 3 +- docs/UserGuide/Data-Concept/Time-Partition.md | 12 +++---- .../Reference/ConfigNode-Config-Manual.md | 12 +++---- docs/UserGuide/Reference/DataNode-Config-Manual.md | 30 ++++++++++++---- docs/zh/UserGuide/Data-Concept/Time-Partition.md | 16 ++++----- .../Reference/ConfigNode-Config-Manual.md | 16 ++++----- .../UserGuide/Reference/DataNode-Config-Manual.md | 12 +++---- .../resources/conf/iotdb-datanode.properties | 4 --- .../java/org/apache/iotdb/db/conf/IoTDBConfig.java | 22 ------------ .../org/apache/iotdb/db/conf/IoTDBDescriptor.java | 8 +---- .../apache/iotdb/db/engine/StorageEngineV2.java | 36 +++++++++++++------ .../iotdb/db/engine/load/AlignedChunkData.java | 10 +++--- .../iotdb/db/engine/load/NonAlignedChunkData.java | 8 ++--- .../iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java | 7 ++-- .../plan/node/load/LoadSingleTsFileNode.java | 25 +++++++------ .../planner/plan/node/write/InsertRowNode.java | 6 ++-- .../planner/plan/node/write/InsertRowsNode.java | 4 +-- .../plan/node/write/InsertRowsOfOneDeviceNode.java | 4 +-- .../planner/plan/node/write/InsertTabletNode.java | 32 ++++++++--------- .../crud/InsertMultiTabletsStatement.java | 4 +-- .../plan/statement/crud/InsertRowStatement.java | 6 ++-- .../crud/InsertRowsOfOneDeviceStatement.java | 5 ++- .../plan/statement/crud/InsertRowsStatement.java | 4 +-- .../plan/statement/crud/InsertTabletStatement.java | 22 +++++------- .../apache/iotdb/db/utils/TimePartitionUtils.java | 41 ---------------------- .../distribution/DistributionPlannerBasicTest.java | 2 +- .../plan/node/write/WritePlanNodeSplitTest.java | 27 +++++++------- 29 files changed, 163 insertions(+), 220 deletions(-) diff --git a/confignode/src/assembly/resources/conf/iotdb-confignode.properties b/confignode/src/assembly/resources/conf/iotdb-confignode.properties index 43f6f79f1f..c1c314eca6 100644 --- a/confignode/src/assembly/resources/conf/iotdb-confignode.properties +++ b/confignode/src/assembly/resources/conf/iotdb-confignode.properties @@ -133,7 +133,7 @@ target_config_nodes=127.0.0.1:22277 # Time partition interval in seconds, default is equal to one day # Datatype: long -# time_partition_interval_for_routing=86400 +# time_partition_interval=86400 # Default number of SchemaRegion replicas diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java index c4e81b121f..a1092e8820 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java @@ -205,8 +205,7 @@ public class ConfigNodeDescriptor { conf.setTimePartitionInterval( Long.parseLong( properties.getProperty( - "time_partition_interval_for_routing", - String.valueOf(conf.getTimePartitionInterval())))); + "time_partition_interval", String.valueOf(conf.getTimePartitionInterval())))); conf.setSchemaReplicationFactor( Integer.parseInt( diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java index 8209c8701c..3c63947ebd 100644 --- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java +++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java @@ -670,8 +670,7 @@ public class ConfigManager implements IManager { return errorStatus.setMessage(errorPrefix + "default_ttl" + errorSuffix); } if (req.getTimePartitionInterval() != conf.getTimePartitionInterval()) { - return errorStatus.setMessage( - errorPrefix + "time_partition_interval_for_routing" + errorSuffix); + return errorStatus.setMessage(errorPrefix + "time_partition_interval" + errorSuffix); } if (req.getSchemaReplicationFactor() != conf.getSchemaReplicationFactor()) { return errorStatus.setMessage(errorPrefix + "schema_replication_factor" + errorSuffix); diff --git a/docs/UserGuide/Data-Concept/Time-Partition.md b/docs/UserGuide/Data-Concept/Time-Partition.md index aeb2ae39a6..55074c50a4 100644 --- a/docs/UserGuide/Data-Concept/Time-Partition.md +++ b/docs/UserGuide/Data-Concept/Time-Partition.md @@ -34,14 +34,14 @@ Time partition divides data according to time, and a time partition is used to s |Default| false | |Effective|Only allowed to be modified in first start up| -* time\_partition\_interval\_for\_storage +* partition\_interval -|Name| time\_partition\_interval\_for\_storage | -|:---:|:-------------------------------------------------------------------------------------------------------| +|Name| partition\_interval | +|:---:|:---| |Description| Time range for dividing storage group, time series data will be divided into groups by this time range | -|Type| Int64 | -|Default| 86400 | -|Effective| Only allowed to be modified in first start up | +|Type|Int64| +|Default| 604800 | +|Effective|Only allowed to be modified in first start up| ## Configuration example diff --git a/docs/UserGuide/Reference/ConfigNode-Config-Manual.md b/docs/UserGuide/Reference/ConfigNode-Config-Manual.md index 61aec50a1a..b02fe6c7ca 100644 --- a/docs/UserGuide/Reference/ConfigNode-Config-Manual.md +++ b/docs/UserGuide/Reference/ConfigNode-Config-Manual.md @@ -244,14 +244,14 @@ The global configuration of cluster is in ConfigNode. |Default| Infinity | |Effective|After restarting system| -* time\_partition\_interval\_for\_routing +* time\_partition\_interval -|Name| time\_partition\_interval\_for\_routing | -|:---:|:--------------------------------------------------------------| +|Name| time\_partition\_interval | +|:---:|:---| |Description| Time partition interval of data when ConfigNode allocate data | -|Type| Long | -|Default| 86400 | -|Effective| Only allowed to be modified in first start up | +|Type| Long | +|Default| 604800 | +|Effective|Only allowed to be modified in first start up| ### Data Directory diff --git a/docs/UserGuide/Reference/DataNode-Config-Manual.md b/docs/UserGuide/Reference/DataNode-Config-Manual.md index bdfe122316..3199ede743 100644 --- a/docs/UserGuide/Reference/DataNode-Config-Manual.md +++ b/docs/UserGuide/Reference/DataNode-Config-Manual.md @@ -541,14 +541,14 @@ The permission definitions are in ${IOTDB\_CONF}/conf/jmx.access. |Default| false | |Effective|Only allowed to be modified in first start up| -* time\_partition\_interval\_for\_storage +* partition\_interval -|Name| time\_partition\_interval\_for\_storage | -|:---:|:-------------------------------------------------------------------------------------------------------| +|Name| partition\_interval | +|:---:|:---| |Description| Time range for dividing storage group, time series data will be divided into groups by this time range | -|Type| Int64 | -|Default| 86400 | -|Effective| Only allowed to be modified in first start up | +|Type|Int64| +|Default| 604800 | +|Effective|Only allowed to be modified in first start up| * concurrent\_writing\_time\_partition @@ -1113,6 +1113,24 @@ The permission definitions are in ${IOTDB\_CONF}/conf/jmx.access. |Default|FLOAT | |Effective|After restarting system| +* enable\_partition + +|Name| enable\_partition | +|:---:|:---| +|Description| whether enable data partition. If disabled, all data belongs to partition 0| +|Type| BOOLEAN | +|Default|false | +|Effective|Only allowed to be modified in first start up| + +* partition\_interval + +|Name| partition\_interval | +|:---:|:---| +|Description| time range for partitioning data inside each storage group, the unit is second| +|Type| LONG | +|Default| 604800 | +|Effective|Only allowed to be modified in first start up| + * data\_region\_num | Name | data\_region\_num | diff --git a/docs/zh/UserGuide/Data-Concept/Time-Partition.md b/docs/zh/UserGuide/Data-Concept/Time-Partition.md index 4e2572c6d2..24fe59f5bf 100644 --- a/docs/zh/UserGuide/Data-Concept/Time-Partition.md +++ b/docs/zh/UserGuide/Data-Concept/Time-Partition.md @@ -34,14 +34,14 @@ |默认值| false | |改后生效方式|仅允许在第一次启动服务前修改| -* time\_partition\_interval\_for\_storage - -|名字| time\_partition\_interval\_for\_storage | -|:---:|:----------------------------------------| -|描述| 存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 | -|类型| Int64 | -|默认值| 86400 | -|改后生效方式| 仅允许在第一次启动服务前修改 | +* partition\_interval + +|名字| partition\_interval | +|:---:|:---| +|描述| 存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 | +|类型|Int64| +|默认值| 604800 | +|改后生效方式|仅允许在第一次启动服务前修改| ## 配置示例 diff --git a/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md b/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md index 45b1dbccbe..5c6aa96745 100644 --- a/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md +++ b/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md @@ -239,14 +239,14 @@ IoTDB 集群的全局配置通过 ConfigNode 配置。 |默认值| 无限 | |改后生效方式|重启服务生效| -* time\_partition\_interval\_for\_routing - -|名字| time\_partition\_interval\_for\_routing | -|:---:|:----------------------------------------| -|描述| 存储组默认的数据时间分区间隔 | -|类型| Long | -|默认值| 86400 | -|改后生效方式| 仅允许在第一次启动服务前修改 | +* time\_partition\_interval + +|名字| time\_partition\_interval | +|:---:|:---| +|描述| 存储组默认的数据时间分区间隔 | +|类型| Long | +|默认值| 604800 | +|改后生效方式|仅允许在第一次启动服务前修改| ### 数据目录 diff --git a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md index 9c0b9e695d..7b03b9ef36 100644 --- a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md +++ b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md @@ -1683,14 +1683,14 @@ IoTDB DataNode 与 Standalone 模式共用一套配置文件,均位于 IoTDB |默认值| false | |改后生效方式|仅允许在第一次启动服务前修改| -* time\_partition\_interval\_for\_storage +* partition\_interval -|名字| time\_partition\_interval\_for\_storage | -|:---:|:----------------------------------------| +|名字| partition\_interval | +|:---:|:---| |描述| 用于存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 | -|类型| Int64 | -|默认值| 86400 | -|改后生效方式| 仅允许在第一次启动服务前修改 | +|类型| Int64 | +|默认值| 604800 | +|改后生效方式|仅允许在第一次启动服务前修改| * data\_region\_num diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties b/server/src/assembly/resources/conf/iotdb-datanode.properties index 38d0e3d1e3..f4cf85d05c 100644 --- a/server/src/assembly/resources/conf/iotdb-datanode.properties +++ b/server/src/assembly/resources/conf/iotdb-datanode.properties @@ -1061,10 +1061,6 @@ timestamp_precision=ms # Datatype: long # partition_interval=86400 -# time range for partitioning data inside each data region, the unit is second -# Datatype: long -# time_partition_interval_for_storage=86400 - #################### ### Influx DB RPC Service Configuration #################### diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java index 50d69dc5aa..5513ff51c5 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java @@ -767,12 +767,6 @@ public class IoTDBConfig { */ private long partitionInterval = 86400; - /** Time partition interval for storage in seconds */ - private long timePartitionIntervalForStorage = 86400; - - /** Time partition interval for routing in seconds */ - private long timePartitionIntervalForRouting = 86400; - /** * Level of TimeIndex, which records the start time and end time of TsFileResource. Currently, * DEVICE_TIME_INDEX and FILE_TIME_INDEX are supported, and could not be changed after first set. @@ -1116,22 +1110,6 @@ public class IoTDBConfig { this.partitionInterval = partitionInterval; } - public long getTimePartitionIntervalForStorage() { - return timePartitionIntervalForStorage; - } - - public void setTimePartitionIntervalForStorage(long timePartitionIntervalForStorage) { - this.timePartitionIntervalForStorage = timePartitionIntervalForStorage; - } - - public long getTimePartitionIntervalForRouting() { - return timePartitionIntervalForRouting; - } - - public void setTimePartitionIntervalForRouting(long timePartitionIntervalForRouting) { - this.timePartitionIntervalForRouting = timePartitionIntervalForRouting; - } - public TimeIndexLevel getTimeIndexLevel() { return timeIndexLevel; } diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java index 57ed301e3b..2d0ac129d1 100644 --- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java +++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java @@ -900,12 +900,6 @@ public class IoTDBDescriptor { properties.getProperty( "partition_interval", String.valueOf(conf.getPartitionInterval())))); - conf.setTimePartitionIntervalForStorage( - Long.parseLong( - properties.getProperty( - "time_partition_interval_for_storage", - String.valueOf(conf.getTimePartitionIntervalForStorage())))); - conf.setSelectIntoInsertTabletPlanRowLimit( Integer.parseInt( properties.getProperty( @@ -1921,7 +1915,7 @@ public class IoTDBDescriptor { public void loadGlobalConfig(TGlobalConfig globalConfig) { conf.setSeriesPartitionExecutorClass(globalConfig.getSeriesPartitionExecutorClass()); conf.setSeriesPartitionSlotNum(globalConfig.getSeriesPartitionSlotNum()); - conf.setTimePartitionIntervalForRouting(globalConfig.timePartitionInterval); + conf.setPartitionInterval(globalConfig.timePartitionInterval); conf.setReadConsistencyLevel(globalConfig.getReadConsistencyLevel()); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java index 807a3e59b8..b81665d4af 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java @@ -21,6 +21,7 @@ package org.apache.iotdb.db.engine; import org.apache.iotdb.common.rpc.thrift.TFlushReq; import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.common.rpc.thrift.TSetTTLReq; +import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory; import org.apache.iotdb.commons.concurrent.ThreadName; import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil; @@ -100,7 +101,7 @@ public class StorageEngineV2 implements IService { * Time range for dividing storage group, the time unit is the same with IoTDB's * TimestampPrecision */ - private static long timePartitionIntervalForStorage = -1; + @ServerConfigConsistent private static long timePartitionInterval = -1; /** whether enable data partition if disabled, all data belongs to partition 0 */ @ServerConfigConsistent private static boolean enablePartition = config.isEnablePartition(); @@ -146,9 +147,9 @@ public class StorageEngineV2 implements IService { } private static void initTimePartition() { - timePartitionIntervalForStorage = + timePartitionInterval = convertMilliWithPrecision( - IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForStorage() * 1000L); + IoTDBDescriptor.getInstance().getConfig().getPartitionInterval() * 1000L); } public static long convertMilliWithPrecision(long milliTime) { @@ -167,23 +168,23 @@ public class StorageEngineV2 implements IService { return result; } - public static long getTimePartitionIntervalForStorage() { - if (timePartitionIntervalForStorage == -1) { + public static long getTimePartitionInterval() { + if (timePartitionInterval == -1) { initTimePartition(); } - return timePartitionIntervalForStorage; + return timePartitionInterval; } @TestOnly - public static void setTimePartitionIntervalForStorage(long timePartitionIntervalForStorage) { - StorageEngineV2.timePartitionIntervalForStorage = timePartitionIntervalForStorage; + public static void setTimePartitionInterval(long timePartitionInterval) { + StorageEngineV2.timePartitionInterval = timePartitionInterval; } public static long getTimePartition(long time) { - if (timePartitionIntervalForStorage == -1) { + if (timePartitionInterval == -1) { initTimePartition(); } - return enablePartition ? time / timePartitionIntervalForStorage : 0; + return enablePartition ? time / timePartitionInterval : 0; } public static boolean isEnablePartition() { @@ -215,6 +216,19 @@ public class StorageEngineV2 implements IService { } } + public static TTimePartitionSlot getTimePartitionSlot(long time) { + TTimePartitionSlot timePartitionSlot = new TTimePartitionSlot(); + if (enablePartition) { + if (timePartitionInterval == -1) { + initTimePartition(); + } + timePartitionSlot.setStartTime(time - time % timePartitionInterval); + } else { + timePartitionSlot.setStartTime(0); + } + return timePartitionSlot; + } + public boolean isAllSgReady() { return isAllSgReady.get(); } @@ -323,7 +337,7 @@ public class StorageEngineV2 implements IService { public void start() { // build time Interval to divide time partition if (!enablePartition) { - timePartitionIntervalForStorage = Long.MAX_VALUE; + timePartitionInterval = Long.MAX_VALUE; } else { initTimePartition(); } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/load/AlignedChunkData.java b/server/src/main/java/org/apache/iotdb/db/engine/load/AlignedChunkData.java index 54f4885d41..7a2a3eb776 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/load/AlignedChunkData.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/load/AlignedChunkData.java @@ -20,7 +20,7 @@ package org.apache.iotdb.db.engine.load; import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; -import org.apache.iotdb.db.utils.TimePartitionUtils; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.encoding.decoder.Decoder; import org.apache.iotdb.tsfile.exception.write.PageException; @@ -270,8 +270,7 @@ public class AlignedChunkData implements ChunkData { for (int i = 0; i < decodeTime.length; i++) { if (decodeTime[i] < timePartitionSlot.getStartTime()) { continue; - } else if (!timePartitionSlot.equals( - TimePartitionUtils.getTimePartitionForRouting(decodeTime[i]))) { + } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(decodeTime[i]))) { break; } time[satisfiedLength++] = decodeTime[i]; @@ -304,8 +303,7 @@ public class AlignedChunkData implements ChunkData { for (int i = 0; i < valueBatch.length; i++) { if (time[i] < timePartitionSlot.getStartTime()) { continue; - } else if (!timePartitionSlot.equals( - TimePartitionUtils.getTimePartitionForRouting(time[i]))) { + } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time[i]))) { break; } if (valueBatch[i] == null) { @@ -471,7 +469,7 @@ public class AlignedChunkData implements ChunkData { for (int i = 1; i < chunkHeaderListSize; i++) { chunkData.addValueChunk(-1, chunkHeaderList[i], null); } - chunkData.setTimePartitionSlot(TimePartitionUtils.getTimePartitionForRouting(timePartition)); + chunkData.setTimePartitionSlot(StorageEngineV2.getTimePartitionSlot(timePartition)); chunkData.deserializeTsFileData(stream); return chunkData; } diff --git a/server/src/main/java/org/apache/iotdb/db/engine/load/NonAlignedChunkData.java b/server/src/main/java/org/apache/iotdb/db/engine/load/NonAlignedChunkData.java index ef3df5e769..5f0e9f0847 100644 --- a/server/src/main/java/org/apache/iotdb/db/engine/load/NonAlignedChunkData.java +++ b/server/src/main/java/org/apache/iotdb/db/engine/load/NonAlignedChunkData.java @@ -20,7 +20,7 @@ package org.apache.iotdb.db.engine.load; import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; -import org.apache.iotdb.db.utils.TimePartitionUtils; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.encoding.decoder.Decoder; import org.apache.iotdb.tsfile.exception.write.PageException; @@ -213,7 +213,7 @@ public class NonAlignedChunkData implements ChunkData { if (time < timePartitionSlot.getStartTime()) { batchData.next(); continue; - } else if (!timePartitionSlot.equals(TimePartitionUtils.getTimePartitionForRouting(time))) { + } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time))) { break; } length += 1; @@ -227,7 +227,7 @@ public class NonAlignedChunkData implements ChunkData { if (time < timePartitionSlot.getStartTime()) { batchData.next(); continue; - } else if (!timePartitionSlot.equals(TimePartitionUtils.getTimePartitionForRouting(time))) { + } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time))) { break; } @@ -338,7 +338,7 @@ public class NonAlignedChunkData implements ChunkData { byte chunkType = ReadWriteIOUtils.readByte(stream); ChunkHeader chunkHeader = ChunkHeader.deserializeFrom(stream, chunkType); NonAlignedChunkData chunkData = new NonAlignedChunkData(-1, device, chunkHeader); - chunkData.setTimePartitionSlot(TimePartitionUtils.getTimePartitionForRouting(timePartition)); + chunkData.setTimePartitionSlot(StorageEngineV2.getTimePartitionSlot(timePartition)); chunkData.deserializeTsFileData(stream); return chunkData; } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java index bdccefb5b1..c0df8bc3cb 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java @@ -29,6 +29,7 @@ import org.apache.iotdb.commons.partition.SchemaPartition; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.path.PathPatternTree; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus; import org.apache.iotdb.db.exception.LoadFileException; @@ -104,7 +105,6 @@ import org.apache.iotdb.db.mpp.plan.statement.sys.ShowVersionStatement; import org.apache.iotdb.db.mpp.plan.statement.sys.sync.ShowPipeSinkTypeStatement; import org.apache.iotdb.db.query.control.SessionManager; import org.apache.iotdb.db.utils.FileLoaderUtils; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.rpc.TSStatusCode; import org.apache.iotdb.tsfile.common.constant.TsFileConstant; import org.apache.iotdb.tsfile.file.header.ChunkHeader; @@ -1502,11 +1502,10 @@ public class AnalyzeVisitor extends StatementVisitor<Analysis, MPPQueryContext> List<TTimePartitionSlot> timePartitionSlots = new ArrayList<>(); String device = entry.getKey(); long endTime = device2MaxTime.get(device); - long interval = - IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting(); + long interval = StorageEngineV2.getTimePartitionInterval(); long time = (entry.getValue() / interval) * interval; for (; time <= endTime; time += interval) { - timePartitionSlots.add(TimePartitionUtils.getTimePartitionForRouting(time)); + timePartitionSlots.add(StorageEngineV2.getTimePartitionSlot(time)); } DataPartitionQueryParam dataPartitionQueryParam = new DataPartitionQueryParam(); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/load/LoadSingleTsFileNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/load/LoadSingleTsFileNode.java index fffe6cbc69..fd0ac00ebc 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/load/LoadSingleTsFileNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/load/LoadSingleTsFileNode.java @@ -25,6 +25,7 @@ import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet; import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; import org.apache.iotdb.commons.partition.DataPartition; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.engine.load.AlignedChunkData; import org.apache.iotdb.db.engine.load.ChunkData; import org.apache.iotdb.db.engine.storagegroup.TsFileResource; @@ -32,7 +33,6 @@ import org.apache.iotdb.db.mpp.plan.analyze.Analysis; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.common.conf.TSFileConfig; import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor; import org.apache.iotdb.tsfile.common.constant.TsFileConstant; @@ -91,8 +91,8 @@ public class LoadSingleTsFileNode extends WritePlanNode { Set<TRegionReplicaSet> allRegionReplicaSet = new HashSet<>(); needDecodeTsFile = false; for (String device : resource.getDevices()) { - if (!TimePartitionUtils.getTimePartitionForRouting(resource.getStartTime(device)) - .equals(TimePartitionUtils.getTimePartitionForRouting(resource.getEndTime(device)))) { + if (!StorageEngineV2.getTimePartitionSlot(resource.getStartTime(device)) + .equals(StorageEngineV2.getTimePartitionSlot(resource.getEndTime(device)))) { needDecodeTsFile = true; return; } @@ -229,7 +229,7 @@ public class LoadSingleTsFileNode extends WritePlanNode { == TsFileConstant.TIME_COLUMN_MASK); IChunkMetadata chunkMetadata = offset2ChunkMetadata.get(chunkOffset - Byte.BYTES); TTimePartitionSlot timePartitionSlot = - TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime()); + StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime()); ChunkData chunkData = ChunkData.createChunkData(isAligned, reader.position(), curDevice, header); chunkData.setTimePartitionSlot(timePartitionSlot); @@ -273,7 +273,7 @@ public class LoadSingleTsFileNode extends WritePlanNode { ? chunkMetadata.getStartTime() : pageHeader.getStartTime(); TTimePartitionSlot pageTimePartitionSlot = - TimePartitionUtils.getTimePartitionForRouting(startTime); + StorageEngineV2.getTimePartitionSlot(startTime); if (!timePartitionSlot.equals(pageTimePartitionSlot)) { chunkDataList.add(chunkData); timePartitionSlot = pageTimePartitionSlot; @@ -295,8 +295,7 @@ public class LoadSingleTsFileNode extends WritePlanNode { boolean isFirstData = true; for (long currentTime : timeBatch) { TTimePartitionSlot currentTimePartitionSlot = - TimePartitionUtils.getTimePartitionForRouting( - currentTime); // TODO: can speed up + StorageEngineV2.getTimePartitionSlot(currentTime); // TODO: can speed up if (!timePartitionSlot.equals(currentTimePartitionSlot)) { if (!isFirstData) { chunkData.setTailPageNeedDecode(true); // close last chunk data @@ -427,17 +426,17 @@ public class LoadSingleTsFileNode extends WritePlanNode { } private boolean needDecodeChunk(IChunkMetadata chunkMetadata) { - return !TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime()) - .equals(TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getEndTime())); + return !StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime()) + .equals(StorageEngineV2.getTimePartitionSlot(chunkMetadata.getEndTime())); } private boolean needDecodePage(PageHeader pageHeader, IChunkMetadata chunkMetadata) { if (pageHeader.getStatistics() == null) { - return !TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime()) - .equals(TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getEndTime())); + return !StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime()) + .equals(StorageEngineV2.getTimePartitionSlot(chunkMetadata.getEndTime())); } - return !TimePartitionUtils.getTimePartitionForRouting(pageHeader.getStartTime()) - .equals(TimePartitionUtils.getTimePartitionForRouting(pageHeader.getEndTime())); + return !StorageEngineV2.getTimePartitionSlot(pageHeader.getStartTime()) + .equals(StorageEngineV2.getTimePartitionSlot(pageHeader.getEndTime())); } private long[] decodePage( diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowNode.java index d8e8c1030e..cd8d1f9550 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowNode.java @@ -24,6 +24,7 @@ import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.utils.TestOnly; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.exception.metadata.PathNotExistException; import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.mpp.common.schematree.DeviceSchemaInfo; @@ -35,7 +36,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode; import org.apache.iotdb.db.utils.CommonUtils; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.db.utils.TypeInferenceUtils; import org.apache.iotdb.db.wal.buffer.IWALByteBufferView; import org.apache.iotdb.db.wal.buffer.WALEntryValue; @@ -95,7 +95,7 @@ public class InsertRowNode extends InsertNode implements WALEntryValue { @Override public List<WritePlanNode> splitByPartition(Analysis analysis) { - TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(time); + TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(time); this.dataRegionReplicaSet = analysis .getDataPartitionInfo() @@ -174,7 +174,7 @@ public class InsertRowNode extends InsertNode implements WALEntryValue { @TestOnly public List<TTimePartitionSlot> getTimePartitionSlots() { - return Collections.singletonList(TimePartitionUtils.getTimePartitionForRouting(time)); + return Collections.singletonList(StorageEngineV2.getTimePartitionSlot(time)); } @Override diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsNode.java index 0ca29b9c75..a75b81e57c 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsNode.java @@ -22,6 +22,7 @@ import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet; import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.utils.StatusUtils; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.mpp.common.schematree.ISchemaTree; import org.apache.iotdb.db.mpp.plan.analyze.Analysis; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode; @@ -29,7 +30,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.exception.NotImplementedException; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; @@ -268,7 +268,7 @@ public class InsertRowsNode extends InsertNode implements BatchInsertNode { .getDataPartitionInfo() .getDataRegionReplicaSetForWriting( insertRowNode.devicePath.getFullPath(), - TimePartitionUtils.getTimePartitionForRouting(insertRowNode.getTime())); + StorageEngineV2.getTimePartitionSlot(insertRowNode.getTime())); if (splitMap.containsKey(dataRegionReplicaSet)) { InsertRowsNode tmpNode = splitMap.get(dataRegionReplicaSet); tmpNode.addOneInsertRowNode(insertRowNode, i); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsOfOneDeviceNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsOfOneDeviceNode.java index bb1f69d25c..6cd8a9cbd2 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsOfOneDeviceNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsOfOneDeviceNode.java @@ -23,6 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TSStatus; import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.utils.StatusUtils; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.mpp.common.schematree.ISchemaTree; import org.apache.iotdb.db.mpp.plan.analyze.Analysis; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode; @@ -30,7 +31,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.exception.NotImplementedException; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; @@ -175,7 +175,7 @@ public class InsertRowsOfOneDeviceNode extends InsertNode implements BatchInsert .getDataPartitionInfo() .getDataRegionReplicaSetForWriting( devicePath.getFullPath(), - TimePartitionUtils.getTimePartitionForRouting(insertRowNode.getTime())); + StorageEngineV2.getTimePartitionSlot(insertRowNode.getTime())); List<InsertRowNode> tmpMap = splitMap.computeIfAbsent(dataRegionReplicaSet, k -> new ArrayList<>()); List<Integer> tmpIndexMap = diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertTabletNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertTabletNode.java index 0b5742e7a2..86acccf1a1 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertTabletNode.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertTabletNode.java @@ -23,8 +23,7 @@ import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; import org.apache.iotdb.commons.exception.IllegalPathException; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.commons.utils.TestOnly; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.conf.ServerConfigConsistent; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.mpp.common.schematree.DeviceSchemaInfo; import org.apache.iotdb.db.mpp.common.schematree.ISchemaTree; import org.apache.iotdb.db.mpp.plan.analyze.Analysis; @@ -35,7 +34,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor; import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode; import org.apache.iotdb.db.utils.CommonUtils; import org.apache.iotdb.db.utils.QueryDataSetUtils; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.db.wal.buffer.IWALByteBufferView; import org.apache.iotdb.db.wal.buffer.WALEntryValue; import org.apache.iotdb.db.wal.utils.WALWriteUtils; @@ -71,10 +69,6 @@ public class InsertTabletNode extends InsertNode implements WALEntryValue { private static final String DATATYPE_UNSUPPORTED = "Data type %s is not supported."; - @ServerConfigConsistent - private long timePartitionIntervalForRouting = - IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting(); - private long[] times; // times should be sorted. It is done in the session API. private BitMap[] bitMaps; @@ -216,9 +210,10 @@ public class InsertTabletNode extends InsertNode implements WALEntryValue { return Collections.emptyList(); } long startTime = - (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included - long endTime = startTime + timePartitionIntervalForRouting; // excluded - TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[0]); + (times[0] / StorageEngineV2.getTimePartitionInterval()) + * StorageEngineV2.getTimePartitionInterval(); // included + long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded + TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]); int startLoc = 0; // included List<TTimePartitionSlot> timePartitionSlots = new ArrayList<>(); @@ -234,8 +229,9 @@ public class InsertTabletNode extends InsertNode implements WALEntryValue { startLoc = i; startTime = endTime; endTime = - (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting; - timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[i]); + (times[i] / StorageEngineV2.getTimePartitionInterval() + 1) + * StorageEngineV2.getTimePartitionInterval(); + timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]); } } @@ -307,16 +303,18 @@ public class InsertTabletNode extends InsertNode implements WALEntryValue { public List<TTimePartitionSlot> getTimePartitionSlots() { List<TTimePartitionSlot> result = new ArrayList<>(); long startTime = - (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included - long endTime = startTime + timePartitionIntervalForRouting; // excluded - TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[0]); + (times[0] / StorageEngineV2.getTimePartitionInterval()) + * StorageEngineV2.getTimePartitionInterval(); // included + long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded + TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]); for (int i = 1; i < times.length; i++) { // times are sorted in session API. if (times[i] >= endTime) { result.add(timePartitionSlot); // next init endTime = - (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting; - timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[i]); + (times[i] / StorageEngineV2.getTimePartitionInterval() + 1) + * StorageEngineV2.getTimePartitionInterval(); + timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]); } } result.add(timePartitionSlot); diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java index 545731e780..75eff705e0 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java @@ -23,9 +23,9 @@ import org.apache.iotdb.common.rpc.thrift.TEndPoint; import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet; import org.apache.iotdb.commons.partition.DataPartition; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.mpp.plan.constant.StatementType; import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import java.util.ArrayList; @@ -106,7 +106,7 @@ public class InsertMultiTabletsStatement extends InsertBaseStatement { TRegionReplicaSet regionReplicaSet = dataPartition.getDataRegionReplicaSetForWriting( insertTabletStatement.devicePath.getFullPath(), - TimePartitionUtils.getTimePartitionForRouting( + StorageEngineV2.getTimePartitionSlot( insertTabletStatement.getTimes()[insertTabletStatement.getTimes().length - 1])); result.add(regionReplicaSet.getDataNodeLocations().get(0).getClientRpcEndPoint()); } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowStatement.java index ff43317e67..3972d0cf48 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowStatement.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowStatement.java @@ -24,10 +24,10 @@ import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet; import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; import org.apache.iotdb.commons.partition.DataPartition; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.exception.query.QueryProcessException; import org.apache.iotdb.db.mpp.plan.constant.StatementType; import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils; @@ -127,14 +127,14 @@ public class InsertRowStatement extends InsertBaseStatement { } public List<TTimePartitionSlot> getTimePartitionSlots() { - return Collections.singletonList(TimePartitionUtils.getTimePartitionForRouting(time)); + return Collections.singletonList(StorageEngineV2.getTimePartitionSlot(time)); } @Override public List<TEndPoint> collectRedirectInfo(DataPartition dataPartition) { TRegionReplicaSet regionReplicaSet = dataPartition.getDataRegionReplicaSetForWriting( - devicePath.getFullPath(), TimePartitionUtils.getTimePartitionForRouting(time)); + devicePath.getFullPath(), StorageEngineV2.getTimePartitionSlot(time)); return Collections.singletonList( regionReplicaSet.getDataNodeLocations().get(0).getClientRpcEndPoint()); } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsOfOneDeviceStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsOfOneDeviceStatement.java index f9bc18c066..a18c19db45 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsOfOneDeviceStatement.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsOfOneDeviceStatement.java @@ -23,9 +23,9 @@ import org.apache.iotdb.common.rpc.thrift.TEndPoint; import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; import org.apache.iotdb.commons.partition.DataPartition; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.mpp.plan.constant.StatementType; import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import java.util.ArrayList; @@ -82,8 +82,7 @@ public class InsertRowsOfOneDeviceStatement extends InsertBaseStatement { public List<TTimePartitionSlot> getTimePartitionSlots() { Set<TTimePartitionSlot> timePartitionSlotSet = new HashSet<>(); for (InsertRowStatement insertRowStatement : insertRowStatementList) { - timePartitionSlotSet.add( - TimePartitionUtils.getTimePartitionForRouting(insertRowStatement.getTime())); + timePartitionSlotSet.add(StorageEngineV2.getTimePartitionSlot(insertRowStatement.getTime())); } return new ArrayList<>(timePartitionSlotSet); } diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java index 6c130f99d7..8314759daa 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java @@ -23,9 +23,9 @@ import org.apache.iotdb.common.rpc.thrift.TEndPoint; import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet; import org.apache.iotdb.commons.partition.DataPartition; import org.apache.iotdb.commons.path.PartialPath; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.mpp.plan.constant.StatementType; import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import java.util.ArrayList; @@ -106,7 +106,7 @@ public class InsertRowsStatement extends InsertBaseStatement { TRegionReplicaSet regionReplicaSet = dataPartition.getDataRegionReplicaSetForWriting( insertRowStatement.devicePath.getFullPath(), - TimePartitionUtils.getTimePartitionForRouting(insertRowStatement.getTime())); + StorageEngineV2.getTimePartitionSlot(insertRowStatement.getTime())); result.add(regionReplicaSet.getDataNodeLocations().get(0).getClientRpcEndPoint()); } return result; diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertTabletStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertTabletStatement.java index e720790a1d..7621adf041 100644 --- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertTabletStatement.java +++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertTabletStatement.java @@ -23,11 +23,9 @@ import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet; import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; import org.apache.iotdb.commons.partition.DataPartition; import org.apache.iotdb.commons.path.PartialPath; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.conf.ServerConfigConsistent; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.mpp.plan.constant.StatementType; import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.utils.BitMap; import java.util.ArrayList; @@ -36,10 +34,6 @@ import java.util.List; public class InsertTabletStatement extends InsertBaseStatement { - @ServerConfigConsistent - private long timePartitionIntervalForRouting = - IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting(); - private long[] times; // times should be sorted. It is done in the session API. private BitMap[] bitMaps; private Object[] columns; @@ -95,16 +89,18 @@ public class InsertTabletStatement extends InsertBaseStatement { public List<TTimePartitionSlot> getTimePartitionSlots() { List<TTimePartitionSlot> result = new ArrayList<>(); long startTime = - (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included - long endTime = startTime + timePartitionIntervalForRouting; // excluded - TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[0]); + (times[0] / StorageEngineV2.getTimePartitionInterval()) + * StorageEngineV2.getTimePartitionInterval(); // included + long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded + TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]); for (int i = 1; i < times.length; i++) { // times are sorted in session API. if (times[i] >= endTime) { result.add(timePartitionSlot); // next init endTime = - (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting; - timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[i]); + (times[i] / StorageEngineV2.getTimePartitionInterval() + 1) + * StorageEngineV2.getTimePartitionInterval(); + timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]); } } result.add(timePartitionSlot); @@ -116,7 +112,7 @@ public class InsertTabletStatement extends InsertBaseStatement { TRegionReplicaSet regionReplicaSet = dataPartition.getDataRegionReplicaSetForWriting( devicePath.getFullPath(), - TimePartitionUtils.getTimePartitionForRouting(times[times.length - 1])); + StorageEngineV2.getTimePartitionSlot(times[times.length - 1])); return Collections.singletonList( regionReplicaSet.getDataNodeLocations().get(0).getClientRpcEndPoint()); } diff --git a/server/src/main/java/org/apache/iotdb/db/utils/TimePartitionUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/TimePartitionUtils.java deleted file mode 100644 index b082e94cb2..0000000000 --- a/server/src/main/java/org/apache/iotdb/db/utils/TimePartitionUtils.java +++ /dev/null @@ -1,41 +0,0 @@ -/* - * Licensed to the Apache Software Foundation (ASF) under one - * or more contributor license agreements. See the NOTICE file - * distributed with this work for additional information - * regarding copyright ownership. The ASF licenses this file - * to you under the Apache License, Version 2.0 (the - * "License"); you may not use this file except in compliance - * with the License. You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, - * software distributed under the License is distributed on an - * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY - * KIND, either express or implied. See the License for the - * specific language governing permissions and limitations - * under the License. - */ -package org.apache.iotdb.db.utils; - -import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot; -import org.apache.iotdb.commons.utils.TestOnly; -import org.apache.iotdb.db.conf.IoTDBDescriptor; -import org.apache.iotdb.db.conf.ServerConfigConsistent; - -public class TimePartitionUtils { - @ServerConfigConsistent - private static long timePartitionIntervalForRouting = - IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting(); - - public static TTimePartitionSlot getTimePartitionForRouting(long time) { - TTimePartitionSlot timePartitionSlot = new TTimePartitionSlot(); - timePartitionSlot.setStartTime(time - time % timePartitionIntervalForRouting); - return timePartitionSlot; - } - - @TestOnly - public static void setTimePartitionIntervalForRouting(long timePartitionIntervalForRouting) { - TimePartitionUtils.timePartitionIntervalForRouting = timePartitionIntervalForRouting; - } -} diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/distribution/DistributionPlannerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/distribution/DistributionPlannerBasicTest.java index 780a63ce08..8227fc49c1 100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/distribution/DistributionPlannerBasicTest.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/distribution/DistributionPlannerBasicTest.java @@ -353,7 +353,7 @@ public class DistributionPlannerBasicTest { false, new String[] {"s1"}, new TSDataType[] {TSDataType.INT32}, - 10000L, + 100000L, new Object[] {10}, false); insertRowNode2.setMeasurementSchemas( diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/write/WritePlanNodeSplitTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/write/WritePlanNodeSplitTest.java index fb8c77b181..c5a5466b2f 100644 --- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/write/WritePlanNodeSplitTest.java +++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/write/WritePlanNodeSplitTest.java @@ -30,6 +30,7 @@ import org.apache.iotdb.commons.partition.DataPartitionQueryParam; import org.apache.iotdb.commons.partition.executor.SeriesPartitionExecutor; import org.apache.iotdb.commons.path.PartialPath; import org.apache.iotdb.db.conf.IoTDBDescriptor; +import org.apache.iotdb.db.engine.StorageEngineV2; import org.apache.iotdb.db.mpp.plan.analyze.Analysis; import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId; import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode; @@ -37,7 +38,6 @@ import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertMultiTabletsNo import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowsNode; import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertTabletNode; -import org.apache.iotdb.db.utils.TimePartitionUtils; import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType; import org.junit.After; @@ -55,6 +55,8 @@ public class WritePlanNodeSplitTest { long prevTimePartitionInterval; + boolean prevEnableTimePartition; + Map<String, Map<TSeriesPartitionSlot, Map<TTimePartitionSlot, List<TRegionReplicaSet>>>> dataPartitionMap; @@ -68,10 +70,10 @@ public class WritePlanNodeSplitTest { @Before public void setUp() { - prevTimePartitionInterval = - IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting(); - IoTDBDescriptor.getInstance().getConfig().setTimePartitionIntervalForRouting(100); - TimePartitionUtils.setTimePartitionIntervalForRouting(100); + prevTimePartitionInterval = StorageEngineV2.getTimePartitionInterval(); + prevEnableTimePartition = StorageEngineV2.isEnablePartition(); + StorageEngineV2.setTimePartitionInterval(100); + StorageEngineV2.setEnablePartition(true); executorClassName = IoTDBDescriptor.getInstance().getConfig().getSeriesPartitionExecutorClass(); seriesSlotPartitionNum = IoTDBDescriptor.getInstance().getConfig().getSeriesPartitionSlotNum(); @@ -93,8 +95,7 @@ public class WritePlanNodeSplitTest { Map<TTimePartitionSlot, List<TRegionReplicaSet>> timePartitionSlotMap = new HashMap<>(); for (int t = 0; t < 5; t++) { timePartitionSlotMap.put( - new TTimePartitionSlot( - t * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting()), + new TTimePartitionSlot(t * StorageEngineV2.getTimePartitionInterval()), Collections.singletonList( new TRegionReplicaSet( new TConsensusGroupId(TConsensusGroupType.DataRegion, t), null))); @@ -111,8 +112,7 @@ public class WritePlanNodeSplitTest { Map<TTimePartitionSlot, List<TRegionReplicaSet>> timePartitionSlotMap = new HashMap<>(); for (int t = 0; t < 5; t++) { timePartitionSlotMap.put( - new TTimePartitionSlot( - t * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting()), + new TTimePartitionSlot(t * StorageEngineV2.getTimePartitionInterval()), Collections.singletonList( new TRegionReplicaSet( new TConsensusGroupId(TConsensusGroupType.DataRegion, 5), null))); @@ -268,8 +268,7 @@ public class WritePlanNodeSplitTest { for (int i = 0; i < 5; i++) { InsertRowNode insertRowNode = new InsertRowNode(new PlanNodeId("plan node 3")); insertRowNode.setDevicePath(new PartialPath(String.format("root.sg1.d%d", i))); - insertRowNode.setTime( - i * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting()); + insertRowNode.setTime(i * StorageEngineV2.getTimePartitionInterval()); insertRowsNode.addOneInsertRowNode(insertRowNode, 2 * i); insertRowNode = new InsertRowNode(new PlanNodeId("plan node 3")); @@ -297,9 +296,7 @@ public class WritePlanNodeSplitTest { @After public void tearDown() { - TimePartitionUtils.setTimePartitionIntervalForRouting(prevTimePartitionInterval); - IoTDBDescriptor.getInstance() - .getConfig() - .setTimePartitionIntervalForRouting(prevTimePartitionInterval); + StorageEngineV2.setTimePartitionInterval(prevTimePartitionInterval); + StorageEngineV2.setEnablePartition(prevEnableTimePartition); } }
