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);
   }
 }

Reply via email to