[IOTDB-4481] Use time_partition_interval_for_routing in PartitionFetcher (#7407)
diff --git a/confignode/src/assembly/resources/conf/iotdb-confignode.properties b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
index c1c314e..43f6f79 100644
--- a/confignode/src/assembly/resources/conf/iotdb-confignode.properties
+++ b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
@@ -133,7 +133,7 @@
# Time partition interval in seconds, default is equal to one day
# Datatype: long
-# time_partition_interval=86400
+# time_partition_interval_for_routing=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 a1092e8..c4e81b1 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,7 +205,8 @@
conf.setTimePartitionInterval(
Long.parseLong(
properties.getProperty(
- "time_partition_interval", String.valueOf(conf.getTimePartitionInterval()))));
+ "time_partition_interval_for_routing",
+ 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 3c63947..8209c87 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,7 +670,8 @@
return errorStatus.setMessage(errorPrefix + "default_ttl" + errorSuffix);
}
if (req.getTimePartitionInterval() != conf.getTimePartitionInterval()) {
- return errorStatus.setMessage(errorPrefix + "time_partition_interval" + errorSuffix);
+ return errorStatus.setMessage(
+ errorPrefix + "time_partition_interval_for_routing" + 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 55074c5..aeb2ae3 100644
--- a/docs/UserGuide/Data-Concept/Time-Partition.md
+++ b/docs/UserGuide/Data-Concept/Time-Partition.md
@@ -34,14 +34,14 @@
|Default| false |
|Effective|Only allowed to be modified in first start up|
-* partition\_interval
+* time\_partition\_interval\_for\_storage
-|Name| partition\_interval |
-|:---:|:---|
+|Name| time\_partition\_interval\_for\_storage |
+|:---:|:-------------------------------------------------------------------------------------------------------|
|Description| Time range for dividing storage group, time series data will be divided into groups by this time range |
-|Type|Int64|
-|Default| 604800 |
-|Effective|Only allowed to be modified in first start up|
+|Type| Int64 |
+|Default| 86400 |
+|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 b02fe6c..61aec50 100644
--- a/docs/UserGuide/Reference/ConfigNode-Config-Manual.md
+++ b/docs/UserGuide/Reference/ConfigNode-Config-Manual.md
@@ -244,14 +244,14 @@
|Default| Infinity |
|Effective|After restarting system|
-* time\_partition\_interval
+* time\_partition\_interval\_for\_routing
-|Name| time\_partition\_interval |
-|:---:|:---|
+|Name| time\_partition\_interval\_for\_routing |
+|:---:|:--------------------------------------------------------------|
|Description| Time partition interval of data when ConfigNode allocate data |
-|Type| Long |
-|Default| 604800 |
-|Effective|Only allowed to be modified in first start up|
+|Type| Long |
+|Default| 86400 |
+|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 3199ede..bdfe122 100644
--- a/docs/UserGuide/Reference/DataNode-Config-Manual.md
+++ b/docs/UserGuide/Reference/DataNode-Config-Manual.md
@@ -541,14 +541,14 @@
|Default| false |
|Effective|Only allowed to be modified in first start up|
-* partition\_interval
+* time\_partition\_interval\_for\_storage
-|Name| partition\_interval |
-|:---:|:---|
+|Name| time\_partition\_interval\_for\_storage |
+|:---:|:-------------------------------------------------------------------------------------------------------|
|Description| Time range for dividing storage group, time series data will be divided into groups by this time range |
-|Type|Int64|
-|Default| 604800 |
-|Effective|Only allowed to be modified in first start up|
+|Type| Int64 |
+|Default| 86400 |
+|Effective| Only allowed to be modified in first start up |
* concurrent\_writing\_time\_partition
@@ -1113,24 +1113,6 @@
|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 24fe59f..4e2572c 100644
--- a/docs/zh/UserGuide/Data-Concept/Time-Partition.md
+++ b/docs/zh/UserGuide/Data-Concept/Time-Partition.md
@@ -34,14 +34,14 @@
|默认值| false |
|改后生效方式|仅允许在第一次启动服务前修改|
-* partition\_interval
+* time\_partition\_interval\_for\_storage
-|名字| partition\_interval |
-|:---:|:---|
-|描述| 存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 |
-|类型|Int64|
-|默认值| 604800 |
-|改后生效方式|仅允许在第一次启动服务前修改|
+|名字| time\_partition\_interval\_for\_storage |
+|:---:|:----------------------------------------|
+|描述| 存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 |
+|类型| Int64 |
+|默认值| 86400 |
+|改后生效方式| 仅允许在第一次启动服务前修改 |
## 配置示例
diff --git a/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md b/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md
index 5c6aa96..45b1dbc 100644
--- a/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md
+++ b/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md
@@ -239,14 +239,14 @@
|默认值| 无限 |
|改后生效方式|重启服务生效|
-* time\_partition\_interval
+* time\_partition\_interval\_for\_routing
-|名字| time\_partition\_interval |
-|:---:|:---|
-|描述| 存储组默认的数据时间分区间隔 |
-|类型| Long |
-|默认值| 604800 |
-|改后生效方式|仅允许在第一次启动服务前修改|
+|名字| time\_partition\_interval\_for\_routing |
+|:---:|:----------------------------------------|
+|描述| 存储组默认的数据时间分区间隔 |
+|类型| Long |
+|默认值| 86400 |
+|改后生效方式| 仅允许在第一次启动服务前修改 |
### 数据目录
diff --git a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
index 7b03b9e..9c0b9e6 100644
--- a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
+++ b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
@@ -1683,14 +1683,14 @@
|默认值| false |
|改后生效方式|仅允许在第一次启动服务前修改|
-* partition\_interval
+* time\_partition\_interval\_for\_storage
-|名字| partition\_interval |
-|:---:|:---|
+|名字| time\_partition\_interval\_for\_storage |
+|:---:|:----------------------------------------|
|描述| 用于存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 |
-|类型| Int64 |
-|默认值| 604800 |
-|改后生效方式|仅允许在第一次启动服务前修改|
+|类型| Int64 |
+|默认值| 86400 |
+|改后生效方式| 仅允许在第一次启动服务前修改 |
* data\_region\_num
diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties b/server/src/assembly/resources/conf/iotdb-datanode.properties
index f4cf85d..38d0e3d 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -1061,6 +1061,10 @@
# 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 5513ff5..50d69dc 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,6 +767,12 @@
*/
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.
@@ -1110,6 +1116,22 @@
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 2d0ac12..57ed301 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,6 +900,12 @@
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(
@@ -1915,7 +1921,7 @@
public void loadGlobalConfig(TGlobalConfig globalConfig) {
conf.setSeriesPartitionExecutorClass(globalConfig.getSeriesPartitionExecutorClass());
conf.setSeriesPartitionSlotNum(globalConfig.getSeriesPartitionSlotNum());
- conf.setPartitionInterval(globalConfig.timePartitionInterval);
+ conf.setTimePartitionIntervalForRouting(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 b81665d..807a3e5 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,7 +21,6 @@
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;
@@ -101,7 +100,7 @@
* Time range for dividing storage group, the time unit is the same with IoTDB's
* TimestampPrecision
*/
- @ServerConfigConsistent private static long timePartitionInterval = -1;
+ private static long timePartitionIntervalForStorage = -1;
/** whether enable data partition if disabled, all data belongs to partition 0 */
@ServerConfigConsistent private static boolean enablePartition = config.isEnablePartition();
@@ -147,9 +146,9 @@
}
private static void initTimePartition() {
- timePartitionInterval =
+ timePartitionIntervalForStorage =
convertMilliWithPrecision(
- IoTDBDescriptor.getInstance().getConfig().getPartitionInterval() * 1000L);
+ IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForStorage() * 1000L);
}
public static long convertMilliWithPrecision(long milliTime) {
@@ -168,23 +167,23 @@
return result;
}
- public static long getTimePartitionInterval() {
- if (timePartitionInterval == -1) {
+ public static long getTimePartitionIntervalForStorage() {
+ if (timePartitionIntervalForStorage == -1) {
initTimePartition();
}
- return timePartitionInterval;
+ return timePartitionIntervalForStorage;
}
@TestOnly
- public static void setTimePartitionInterval(long timePartitionInterval) {
- StorageEngineV2.timePartitionInterval = timePartitionInterval;
+ public static void setTimePartitionIntervalForStorage(long timePartitionIntervalForStorage) {
+ StorageEngineV2.timePartitionIntervalForStorage = timePartitionIntervalForStorage;
}
public static long getTimePartition(long time) {
- if (timePartitionInterval == -1) {
+ if (timePartitionIntervalForStorage == -1) {
initTimePartition();
}
- return enablePartition ? time / timePartitionInterval : 0;
+ return enablePartition ? time / timePartitionIntervalForStorage : 0;
}
public static boolean isEnablePartition() {
@@ -216,19 +215,6 @@
}
}
- 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();
}
@@ -337,7 +323,7 @@
public void start() {
// build time Interval to divide time partition
if (!enablePartition) {
- timePartitionInterval = Long.MAX_VALUE;
+ timePartitionIntervalForStorage = 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 7a2a3eb..54f4885 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.engine.StorageEngineV2;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
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,7 +270,8 @@
for (int i = 0; i < decodeTime.length; i++) {
if (decodeTime[i] < timePartitionSlot.getStartTime()) {
continue;
- } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(decodeTime[i]))) {
+ } else if (!timePartitionSlot.equals(
+ TimePartitionUtils.getTimePartitionForRouting(decodeTime[i]))) {
break;
}
time[satisfiedLength++] = decodeTime[i];
@@ -303,7 +304,8 @@
for (int i = 0; i < valueBatch.length; i++) {
if (time[i] < timePartitionSlot.getStartTime()) {
continue;
- } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time[i]))) {
+ } else if (!timePartitionSlot.equals(
+ TimePartitionUtils.getTimePartitionForRouting(time[i]))) {
break;
}
if (valueBatch[i] == null) {
@@ -469,7 +471,7 @@
for (int i = 1; i < chunkHeaderListSize; i++) {
chunkData.addValueChunk(-1, chunkHeaderList[i], null);
}
- chunkData.setTimePartitionSlot(StorageEngineV2.getTimePartitionSlot(timePartition));
+ chunkData.setTimePartitionSlot(TimePartitionUtils.getTimePartitionForRouting(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 5f0e9f0..ef3df5e 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.engine.StorageEngineV2;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
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 @@
if (time < timePartitionSlot.getStartTime()) {
batchData.next();
continue;
- } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time))) {
+ } else if (!timePartitionSlot.equals(TimePartitionUtils.getTimePartitionForRouting(time))) {
break;
}
length += 1;
@@ -227,7 +227,7 @@
if (time < timePartitionSlot.getStartTime()) {
batchData.next();
continue;
- } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time))) {
+ } else if (!timePartitionSlot.equals(TimePartitionUtils.getTimePartitionForRouting(time))) {
break;
}
@@ -338,7 +338,7 @@
byte chunkType = ReadWriteIOUtils.readByte(stream);
ChunkHeader chunkHeader = ChunkHeader.deserializeFrom(stream, chunkType);
NonAlignedChunkData chunkData = new NonAlignedChunkData(-1, device, chunkHeader);
- chunkData.setTimePartitionSlot(StorageEngineV2.getTimePartitionSlot(timePartition));
+ chunkData.setTimePartitionSlot(TimePartitionUtils.getTimePartitionForRouting(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 c0df8bc..bdccefb 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,7 +29,6 @@
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;
@@ -105,6 +104,7 @@
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,10 +1502,11 @@
List<TTimePartitionSlot> timePartitionSlots = new ArrayList<>();
String device = entry.getKey();
long endTime = device2MaxTime.get(device);
- long interval = StorageEngineV2.getTimePartitionInterval();
+ long interval =
+ IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting();
long time = (entry.getValue() / interval) * interval;
for (; time <= endTime; time += interval) {
- timePartitionSlots.add(StorageEngineV2.getTimePartitionSlot(time));
+ timePartitionSlots.add(TimePartitionUtils.getTimePartitionForRouting(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 fd0ac00..fffe6cb 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,7 +25,6 @@
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;
@@ -33,6 +32,7 @@
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 @@
Set<TRegionReplicaSet> allRegionReplicaSet = new HashSet<>();
needDecodeTsFile = false;
for (String device : resource.getDevices()) {
- if (!StorageEngineV2.getTimePartitionSlot(resource.getStartTime(device))
- .equals(StorageEngineV2.getTimePartitionSlot(resource.getEndTime(device)))) {
+ if (!TimePartitionUtils.getTimePartitionForRouting(resource.getStartTime(device))
+ .equals(TimePartitionUtils.getTimePartitionForRouting(resource.getEndTime(device)))) {
needDecodeTsFile = true;
return;
}
@@ -229,7 +229,7 @@
== TsFileConstant.TIME_COLUMN_MASK);
IChunkMetadata chunkMetadata = offset2ChunkMetadata.get(chunkOffset - Byte.BYTES);
TTimePartitionSlot timePartitionSlot =
- StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime());
+ TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime());
ChunkData chunkData =
ChunkData.createChunkData(isAligned, reader.position(), curDevice, header);
chunkData.setTimePartitionSlot(timePartitionSlot);
@@ -273,7 +273,7 @@
? chunkMetadata.getStartTime()
: pageHeader.getStartTime();
TTimePartitionSlot pageTimePartitionSlot =
- StorageEngineV2.getTimePartitionSlot(startTime);
+ TimePartitionUtils.getTimePartitionForRouting(startTime);
if (!timePartitionSlot.equals(pageTimePartitionSlot)) {
chunkDataList.add(chunkData);
timePartitionSlot = pageTimePartitionSlot;
@@ -295,7 +295,8 @@
boolean isFirstData = true;
for (long currentTime : timeBatch) {
TTimePartitionSlot currentTimePartitionSlot =
- StorageEngineV2.getTimePartitionSlot(currentTime); // TODO: can speed up
+ TimePartitionUtils.getTimePartitionForRouting(
+ currentTime); // TODO: can speed up
if (!timePartitionSlot.equals(currentTimePartitionSlot)) {
if (!isFirstData) {
chunkData.setTailPageNeedDecode(true); // close last chunk data
@@ -426,17 +427,17 @@
}
private boolean needDecodeChunk(IChunkMetadata chunkMetadata) {
- return !StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime())
- .equals(StorageEngineV2.getTimePartitionSlot(chunkMetadata.getEndTime()));
+ return !TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime())
+ .equals(TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getEndTime()));
}
private boolean needDecodePage(PageHeader pageHeader, IChunkMetadata chunkMetadata) {
if (pageHeader.getStatistics() == null) {
- return !StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime())
- .equals(StorageEngineV2.getTimePartitionSlot(chunkMetadata.getEndTime()));
+ return !TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime())
+ .equals(TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getEndTime()));
}
- return !StorageEngineV2.getTimePartitionSlot(pageHeader.getStartTime())
- .equals(StorageEngineV2.getTimePartitionSlot(pageHeader.getEndTime()));
+ return !TimePartitionUtils.getTimePartitionForRouting(pageHeader.getStartTime())
+ .equals(TimePartitionUtils.getTimePartitionForRouting(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 cd8d1f9..d8e8c10 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,7 +24,6 @@
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;
@@ -36,6 +35,7 @@
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 @@
@Override
public List<WritePlanNode> splitByPartition(Analysis analysis) {
- TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(time);
+ TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(time);
this.dataRegionReplicaSet =
analysis
.getDataPartitionInfo()
@@ -174,7 +174,7 @@
@TestOnly
public List<TTimePartitionSlot> getTimePartitionSlots() {
- return Collections.singletonList(StorageEngineV2.getTimePartitionSlot(time));
+ return Collections.singletonList(TimePartitionUtils.getTimePartitionForRouting(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 a75b81e..0ca29b9 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,7 +22,6 @@
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;
@@ -30,6 +29,7 @@
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 @@
.getDataPartitionInfo()
.getDataRegionReplicaSetForWriting(
insertRowNode.devicePath.getFullPath(),
- StorageEngineV2.getTimePartitionSlot(insertRowNode.getTime()));
+ TimePartitionUtils.getTimePartitionForRouting(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 6cd8a9c..bb1f69d 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,7 +23,6 @@
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;
@@ -31,6 +30,7 @@
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 @@
.getDataPartitionInfo()
.getDataRegionReplicaSetForWriting(
devicePath.getFullPath(),
- StorageEngineV2.getTimePartitionSlot(insertRowNode.getTime()));
+ TimePartitionUtils.getTimePartitionForRouting(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 86acccf..0b5742e 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,7 +23,8 @@
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.engine.StorageEngineV2;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.ServerConfigConsistent;
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;
@@ -34,6 +35,7 @@
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;
@@ -69,6 +71,10 @@
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;
@@ -210,10 +216,9 @@
return Collections.emptyList();
}
long startTime =
- (times[0] / StorageEngineV2.getTimePartitionInterval())
- * StorageEngineV2.getTimePartitionInterval(); // included
- long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded
- TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]);
+ (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included
+ long endTime = startTime + timePartitionIntervalForRouting; // excluded
+ TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[0]);
int startLoc = 0; // included
List<TTimePartitionSlot> timePartitionSlots = new ArrayList<>();
@@ -229,9 +234,8 @@
startLoc = i;
startTime = endTime;
endTime =
- (times[i] / StorageEngineV2.getTimePartitionInterval() + 1)
- * StorageEngineV2.getTimePartitionInterval();
- timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]);
+ (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting;
+ timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[i]);
}
}
@@ -303,18 +307,16 @@
public List<TTimePartitionSlot> getTimePartitionSlots() {
List<TTimePartitionSlot> result = new ArrayList<>();
long startTime =
- (times[0] / StorageEngineV2.getTimePartitionInterval())
- * StorageEngineV2.getTimePartitionInterval(); // included
- long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded
- TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]);
+ (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included
+ long endTime = startTime + timePartitionIntervalForRouting; // excluded
+ TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(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] / StorageEngineV2.getTimePartitionInterval() + 1)
- * StorageEngineV2.getTimePartitionInterval();
- timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]);
+ (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting;
+ timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(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 75eff70..545731e 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.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 @@
TRegionReplicaSet regionReplicaSet =
dataPartition.getDataRegionReplicaSetForWriting(
insertTabletStatement.devicePath.getFullPath(),
- StorageEngineV2.getTimePartitionSlot(
+ TimePartitionUtils.getTimePartitionForRouting(
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 3972d0c..ff43317 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.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 List<TTimePartitionSlot> getTimePartitionSlots() {
- return Collections.singletonList(StorageEngineV2.getTimePartitionSlot(time));
+ return Collections.singletonList(TimePartitionUtils.getTimePartitionForRouting(time));
}
@Override
public List<TEndPoint> collectRedirectInfo(DataPartition dataPartition) {
TRegionReplicaSet regionReplicaSet =
dataPartition.getDataRegionReplicaSetForWriting(
- devicePath.getFullPath(), StorageEngineV2.getTimePartitionSlot(time));
+ devicePath.getFullPath(), TimePartitionUtils.getTimePartitionForRouting(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 a18c19d..f9bc18c 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.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,7 +82,8 @@
public List<TTimePartitionSlot> getTimePartitionSlots() {
Set<TTimePartitionSlot> timePartitionSlotSet = new HashSet<>();
for (InsertRowStatement insertRowStatement : insertRowStatementList) {
- timePartitionSlotSet.add(StorageEngineV2.getTimePartitionSlot(insertRowStatement.getTime()));
+ timePartitionSlotSet.add(
+ TimePartitionUtils.getTimePartitionForRouting(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 8314759..6c130f9 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.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 @@
TRegionReplicaSet regionReplicaSet =
dataPartition.getDataRegionReplicaSetForWriting(
insertRowStatement.devicePath.getFullPath(),
- StorageEngineV2.getTimePartitionSlot(insertRowStatement.getTime()));
+ TimePartitionUtils.getTimePartitionForRouting(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 7621adf..e720790 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,9 +23,11 @@
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.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.ServerConfigConsistent;
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;
@@ -34,6 +36,10 @@
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;
@@ -89,18 +95,16 @@
public List<TTimePartitionSlot> getTimePartitionSlots() {
List<TTimePartitionSlot> result = new ArrayList<>();
long startTime =
- (times[0] / StorageEngineV2.getTimePartitionInterval())
- * StorageEngineV2.getTimePartitionInterval(); // included
- long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded
- TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]);
+ (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included
+ long endTime = startTime + timePartitionIntervalForRouting; // excluded
+ TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(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] / StorageEngineV2.getTimePartitionInterval() + 1)
- * StorageEngineV2.getTimePartitionInterval();
- timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]);
+ (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting;
+ timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[i]);
}
}
result.add(timePartitionSlot);
@@ -112,7 +116,7 @@
TRegionReplicaSet regionReplicaSet =
dataPartition.getDataRegionReplicaSetForWriting(
devicePath.getFullPath(),
- StorageEngineV2.getTimePartitionSlot(times[times.length - 1]));
+ TimePartitionUtils.getTimePartitionForRouting(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
new file mode 100644
index 0000000..b082e94
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/utils/TimePartitionUtils.java
@@ -0,0 +1,41 @@
+/*
+ * 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 8227fc4..780a63c 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 @@
false,
new String[] {"s1"},
new TSDataType[] {TSDataType.INT32},
- 100000L,
+ 10000L,
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 c5a5466..fb8c77b 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,7 +30,6 @@
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;
@@ -38,6 +37,7 @@
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,8 +55,6 @@
long prevTimePartitionInterval;
- boolean prevEnableTimePartition;
-
Map<String, Map<TSeriesPartitionSlot, Map<TTimePartitionSlot, List<TRegionReplicaSet>>>>
dataPartitionMap;
@@ -70,10 +68,10 @@
@Before
public void setUp() {
- prevTimePartitionInterval = StorageEngineV2.getTimePartitionInterval();
- prevEnableTimePartition = StorageEngineV2.isEnablePartition();
- StorageEngineV2.setTimePartitionInterval(100);
- StorageEngineV2.setEnablePartition(true);
+ prevTimePartitionInterval =
+ IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting();
+ IoTDBDescriptor.getInstance().getConfig().setTimePartitionIntervalForRouting(100);
+ TimePartitionUtils.setTimePartitionIntervalForRouting(100);
executorClassName = IoTDBDescriptor.getInstance().getConfig().getSeriesPartitionExecutorClass();
seriesSlotPartitionNum = IoTDBDescriptor.getInstance().getConfig().getSeriesPartitionSlotNum();
@@ -95,7 +93,8 @@
Map<TTimePartitionSlot, List<TRegionReplicaSet>> timePartitionSlotMap = new HashMap<>();
for (int t = 0; t < 5; t++) {
timePartitionSlotMap.put(
- new TTimePartitionSlot(t * StorageEngineV2.getTimePartitionInterval()),
+ new TTimePartitionSlot(
+ t * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting()),
Collections.singletonList(
new TRegionReplicaSet(
new TConsensusGroupId(TConsensusGroupType.DataRegion, t), null)));
@@ -112,7 +111,8 @@
Map<TTimePartitionSlot, List<TRegionReplicaSet>> timePartitionSlotMap = new HashMap<>();
for (int t = 0; t < 5; t++) {
timePartitionSlotMap.put(
- new TTimePartitionSlot(t * StorageEngineV2.getTimePartitionInterval()),
+ new TTimePartitionSlot(
+ t * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting()),
Collections.singletonList(
new TRegionReplicaSet(
new TConsensusGroupId(TConsensusGroupType.DataRegion, 5), null)));
@@ -268,7 +268,8 @@
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 * StorageEngineV2.getTimePartitionInterval());
+ insertRowNode.setTime(
+ i * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting());
insertRowsNode.addOneInsertRowNode(insertRowNode, 2 * i);
insertRowNode = new InsertRowNode(new PlanNodeId("plan node 3"));
@@ -296,7 +297,9 @@
@After
public void tearDown() {
- StorageEngineV2.setTimePartitionInterval(prevTimePartitionInterval);
- StorageEngineV2.setEnablePartition(prevEnableTimePartition);
+ TimePartitionUtils.setTimePartitionIntervalForRouting(prevTimePartitionInterval);
+ IoTDBDescriptor.getInstance()
+ .getConfig()
+ .setTimePartitionIntervalForRouting(prevTimePartitionInterval);
}
}