This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new 6b04945052 [IOTDB-4481] Use time_partition_interval_for_routing in
PartitionFetcher (#7407)
6b04945052 is described below
commit 6b04945052b09ef2561b8bb06ec7986105643596
Author: Mrquan <[email protected]>
AuthorDate: Fri Sep 23 16:56:15 2022 +0800
[IOTDB-4481] Use time_partition_interval_for_routing in PartitionFetcher
(#7407)
---
.../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, 220 insertions(+), 163 deletions(-)
diff --git a/confignode/src/assembly/resources/conf/iotdb-confignode.properties
b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
index c1c314eca6..43f6f79f1f 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=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 a1092e8820..c4e81b121f 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 @@ public class ConfigNodeDescriptor {
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 3c63947ebd..8209c8701c 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 @@ public class ConfigManager implements IManager {
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 55074c50a4..aeb2ae39a6 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|
-* 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 b02fe6c7ca..61aec50a1a 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
+* 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 3199ede743..bdfe122316 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|
-* 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 @@ 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 24fe59f5bf..4e2572c6d2 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
-
-|名字| partition\_interval |
-|:---:|:---|
-|描述| 存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 |
-|类型|Int64|
-|默认值| 604800 |
-|改后生效方式|仅允许在第一次启动服务前修改|
+* time\_partition\_interval\_for\_storage
+
+|名字| 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 5c6aa96745..45b1dbccbe 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
-
-|名字| time\_partition\_interval |
-|:---:|:---|
-|描述| 存储组默认的数据时间分区间隔 |
-|类型| Long |
-|默认值| 604800 |
-|改后生效方式|仅允许在第一次启动服务前修改|
+* time\_partition\_interval\_for\_routing
+
+|名字| 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 7b03b9ef36..9c0b9e695d 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 |
|改后生效方式|仅允许在第一次启动服务前修改|
-* 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 f4cf85d05c..38d0e3d1e3 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -1061,6 +1061,10 @@ 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 5513ff51c5..50d69dc5aa 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 @@ 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.
@@ -1110,6 +1116,22 @@ 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 2d0ac129d1..57ed301e3b 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 @@ 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(
@@ -1915,7 +1921,7 @@ public class IoTDBDescriptor {
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 b81665d4af..807a3e59b8 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 @@ 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;
@@ -101,7 +100,7 @@ public class StorageEngineV2 implements IService {
* 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 @@ public class StorageEngineV2 implements IService {
}
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 @@ public class StorageEngineV2 implements IService {
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 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();
}
@@ -337,7 +323,7 @@ public class StorageEngineV2 implements IService {
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 7a2a3eb776..54f4885d41 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 @@ public class AlignedChunkData implements ChunkData {
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 @@ public class AlignedChunkData implements ChunkData {
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 @@ public class AlignedChunkData implements ChunkData {
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 5f0e9f0847..ef3df5e769 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 @@ public class NonAlignedChunkData implements ChunkData {
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 @@ public class NonAlignedChunkData implements ChunkData {
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 @@ 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(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 c0df8bc3cb..bdccefb5b1 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.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;
@@ -105,6 +104,7 @@ 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,10 +1502,11 @@ public class AnalyzeVisitor extends
StatementVisitor<Analysis, MPPQueryContext>
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 fd0ac00ebc..fffe6cbc69 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.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;
@@ -33,6 +32,7 @@ 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 (!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 @@ public class LoadSingleTsFileNode extends WritePlanNode {
== 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 @@ public class LoadSingleTsFileNode extends WritePlanNode {
? 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 @@ public class LoadSingleTsFileNode extends WritePlanNode {
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 @@ public class LoadSingleTsFileNode extends WritePlanNode {
}
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 cd8d1f9550..d8e8c1030e 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.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;
@@ -36,6 +35,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.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 =
StorageEngineV2.getTimePartitionSlot(time);
+ TTimePartitionSlot timePartitionSlot =
TimePartitionUtils.getTimePartitionForRouting(time);
this.dataRegionReplicaSet =
analysis
.getDataPartitionInfo()
@@ -174,7 +174,7 @@ public class InsertRowNode extends InsertNode implements
WALEntryValue {
@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 a75b81e57c..0ca29b9c75 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.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;
@@ -30,6 +29,7 @@ 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(),
-
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 6cd8a9cbd2..bb1f69d25c 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.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;
@@ -31,6 +30,7 @@ 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(),
-
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 86acccf1a1..0b5742e7a2 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.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.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.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;
@@ -69,6 +71,10 @@ 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;
@@ -210,10 +216,9 @@ public class InsertTabletNode extends InsertNode
implements WALEntryValue {
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 @@ public class InsertTabletNode extends InsertNode implements
WALEntryValue {
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 class InsertTabletNode extends InsertNode
implements WALEntryValue {
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 75eff705e0..545731e780 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(),
- 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 3972d0cf48..ff43317e67 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(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 a18c19db45..f9bc18c066 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,7 +82,8 @@ public class InsertRowsOfOneDeviceStatement extends
InsertBaseStatement {
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 8314759daa..6c130f99d7 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(),
-
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 7621adf041..e720790a1d 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.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.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 @@ 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;
@@ -89,18 +95,16 @@ public class InsertTabletStatement extends
InsertBaseStatement {
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 @@ public class InsertTabletStatement extends
InsertBaseStatement {
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 0000000000..b082e94cb2
--- /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 8227fc49c1..780a63ce08 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},
- 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 c5a5466b2f..fb8c77b181 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.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;
@@ -38,6 +37,7 @@ 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,8 +55,6 @@ public class WritePlanNodeSplitTest {
long prevTimePartitionInterval;
- boolean prevEnableTimePartition;
-
Map<String, Map<TSeriesPartitionSlot, Map<TTimePartitionSlot,
List<TRegionReplicaSet>>>>
dataPartitionMap;
@@ -70,10 +68,10 @@ public class WritePlanNodeSplitTest {
@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 @@ public class WritePlanNodeSplitTest {
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 @@ public class WritePlanNodeSplitTest {
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 @@ 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 * 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 @@ public class WritePlanNodeSplitTest {
@After
public void tearDown() {
- StorageEngineV2.setTimePartitionInterval(prevTimePartitionInterval);
- StorageEngineV2.setEnablePartition(prevEnableTimePartition);
+
TimePartitionUtils.setTimePartitionIntervalForRouting(prevTimePartitionInterval);
+ IoTDBDescriptor.getInstance()
+ .getConfig()
+ .setTimePartitionIntervalForRouting(prevTimePartitionInterval);
}
}