[IOTDB-4481] Use time_partition_interval_for_routing in PartitionFetcher (#7407)

diff --git a/confignode/src/assembly/resources/conf/iotdb-confignode.properties b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
index c1c314e..43f6f79 100644
--- a/confignode/src/assembly/resources/conf/iotdb-confignode.properties
+++ b/confignode/src/assembly/resources/conf/iotdb-confignode.properties
@@ -133,7 +133,7 @@
 
 # Time partition interval in seconds, default is equal to one day
 # Datatype: long
-# time_partition_interval=86400
+# time_partition_interval_for_routing=86400
 
 
 # Default number of SchemaRegion replicas
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
index a1092e8..c4e81b1 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/conf/ConfigNodeDescriptor.java
@@ -205,7 +205,8 @@
       conf.setTimePartitionInterval(
           Long.parseLong(
               properties.getProperty(
-                  "time_partition_interval", String.valueOf(conf.getTimePartitionInterval()))));
+                  "time_partition_interval_for_routing",
+                  String.valueOf(conf.getTimePartitionInterval()))));
 
       conf.setSchemaReplicationFactor(
           Integer.parseInt(
diff --git a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
index 3c63947..8209c87 100644
--- a/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
+++ b/confignode/src/main/java/org/apache/iotdb/confignode/manager/ConfigManager.java
@@ -670,7 +670,8 @@
       return errorStatus.setMessage(errorPrefix + "default_ttl" + errorSuffix);
     }
     if (req.getTimePartitionInterval() != conf.getTimePartitionInterval()) {
-      return errorStatus.setMessage(errorPrefix + "time_partition_interval" + errorSuffix);
+      return errorStatus.setMessage(
+          errorPrefix + "time_partition_interval_for_routing" + errorSuffix);
     }
     if (req.getSchemaReplicationFactor() != conf.getSchemaReplicationFactor()) {
       return errorStatus.setMessage(errorPrefix + "schema_replication_factor" + errorSuffix);
diff --git a/docs/UserGuide/Data-Concept/Time-Partition.md b/docs/UserGuide/Data-Concept/Time-Partition.md
index 55074c5..aeb2ae3 100644
--- a/docs/UserGuide/Data-Concept/Time-Partition.md
+++ b/docs/UserGuide/Data-Concept/Time-Partition.md
@@ -34,14 +34,14 @@
 |Default| false |
 |Effective|Only allowed to be modified in first start up|
 
-* partition\_interval
+* time\_partition\_interval\_for\_storage
 
-|Name| partition\_interval |
-|:---:|:---|
+|Name| time\_partition\_interval\_for\_storage                                                                |
+|:---:|:-------------------------------------------------------------------------------------------------------|
 |Description| Time range for dividing storage group, time series data will be divided into groups by this time range |
-|Type|Int64|
-|Default| 604800 |
-|Effective|Only allowed to be modified in first start up|
+|Type| Int64                                                                                                  |
+|Default| 86400                                                                                                  |
+|Effective| Only allowed to be modified in first start up                                                          |
 
 ## Configuration example
 
diff --git a/docs/UserGuide/Reference/ConfigNode-Config-Manual.md b/docs/UserGuide/Reference/ConfigNode-Config-Manual.md
index b02fe6c..61aec50 100644
--- a/docs/UserGuide/Reference/ConfigNode-Config-Manual.md
+++ b/docs/UserGuide/Reference/ConfigNode-Config-Manual.md
@@ -244,14 +244,14 @@
 |Default| Infinity |
 |Effective|After restarting system|
 
-* time\_partition\_interval
+* time\_partition\_interval\_for\_routing
 
-|Name| time\_partition\_interval |
-|:---:|:---|
+|Name| time\_partition\_interval\_for\_routing                       |
+|:---:|:--------------------------------------------------------------|
 |Description| Time partition interval of data when ConfigNode allocate data |
-|Type| Long |
-|Default| 604800 |
-|Effective|Only allowed to be modified in first start up|
+|Type| Long                                                          |
+|Default| 86400                                                         |
+|Effective| Only allowed to be modified in first start up                 |
 
 
 ### Data Directory
diff --git a/docs/UserGuide/Reference/DataNode-Config-Manual.md b/docs/UserGuide/Reference/DataNode-Config-Manual.md
index 3199ede..bdfe122 100644
--- a/docs/UserGuide/Reference/DataNode-Config-Manual.md
+++ b/docs/UserGuide/Reference/DataNode-Config-Manual.md
@@ -541,14 +541,14 @@
 |Default| false |
 |Effective|Only allowed to be modified in first start up|
 
-* partition\_interval
+* time\_partition\_interval\_for\_storage
 
-|Name| partition\_interval |
-|:---:|:---|
+|Name| time\_partition\_interval\_for\_storage                                                                |
+|:---:|:-------------------------------------------------------------------------------------------------------|
 |Description| Time range for dividing storage group, time series data will be divided into groups by this time range |
-|Type|Int64|
-|Default| 604800 |
-|Effective|Only allowed to be modified in first start up|
+|Type| Int64                                                                                                  |
+|Default| 86400                                                                                                  |
+|Effective| Only allowed to be modified in first start up                                                          |
 
 
 * concurrent\_writing\_time\_partition
@@ -1113,24 +1113,6 @@
 |Default|FLOAT |
 |Effective|After restarting system|
 
-* enable\_partition
-
-|Name| enable\_partition |
-|:---:|:---|
-|Description| whether enable data partition. If disabled, all data belongs to partition 0|
-|Type| BOOLEAN |
-|Default|false |
-|Effective|Only allowed to be modified in first start up|
-
-* partition\_interval
-
-|Name| partition\_interval |
-|:---:|:---|
-|Description| time range for partitioning data inside each storage group, the unit is second|
-|Type| LONG |
-|Default| 604800 |
-|Effective|Only allowed to be modified in first start up|
-
 * data\_region\_num
 
 |    Name     | data\_region\_num                                                                                                                                                                                                                                                  |
diff --git a/docs/zh/UserGuide/Data-Concept/Time-Partition.md b/docs/zh/UserGuide/Data-Concept/Time-Partition.md
index 24fe59f..4e2572c 100644
--- a/docs/zh/UserGuide/Data-Concept/Time-Partition.md
+++ b/docs/zh/UserGuide/Data-Concept/Time-Partition.md
@@ -34,14 +34,14 @@
 |默认值| false |
 |改后生效方式|仅允许在第一次启动服务前修改|
 
-* partition\_interval
+* time\_partition\_interval\_for\_storage
 
-|名字| partition\_interval |
-|:---:|:---|
-|描述| 存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 |
-|类型|Int64|
-|默认值| 604800 |
-|改后生效方式|仅允许在第一次启动服务前修改|
+|名字| time\_partition\_interval\_for\_storage |
+|:---:|:----------------------------------------|
+|描述| 存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒   |
+|类型| Int64                                   |
+|默认值| 86400                                   |
+|改后生效方式| 仅允许在第一次启动服务前修改                          |
 
 ## 配置示例
 
diff --git a/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md b/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md
index 5c6aa96..45b1dbc 100644
--- a/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md
+++ b/docs/zh/UserGuide/Reference/ConfigNode-Config-Manual.md
@@ -239,14 +239,14 @@
 |默认值| 无限 |
 |改后生效方式|重启服务生效|
 
-* time\_partition\_interval
+* time\_partition\_interval\_for\_routing
 
-|名字| time\_partition\_interval |
-|:---:|:---|
-|描述| 存储组默认的数据时间分区间隔 |
-|类型| Long |
-|默认值| 604800 |
-|改后生效方式|仅允许在第一次启动服务前修改|
+|名字| time\_partition\_interval\_for\_routing |
+|:---:|:----------------------------------------|
+|描述| 存储组默认的数据时间分区间隔                          |
+|类型| Long                                    |
+|默认值| 86400                                   |
+|改后生效方式| 仅允许在第一次启动服务前修改                          |
 
 ### 数据目录
 
diff --git a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
index 7b03b9e..9c0b9e6 100644
--- a/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
+++ b/docs/zh/UserGuide/Reference/DataNode-Config-Manual.md
@@ -1683,14 +1683,14 @@
 |默认值| false |
 |改后生效方式|仅允许在第一次启动服务前修改|
 
-* partition\_interval
+* time\_partition\_interval\_for\_storage
 
-|名字| partition\_interval |
-|:---:|:---|
+|名字| time\_partition\_interval\_for\_storage |
+|:---:|:----------------------------------------|
 |描述| 用于存储组分区的时间段长度,用户指定的存储组下会使用该时间段进行分区,单位:秒 |
-|类型| Int64 |
-|默认值| 604800 |
-|改后生效方式|仅允许在第一次启动服务前修改|
+|类型| Int64                                   |
+|默认值| 86400                                   |
+|改后生效方式| 仅允许在第一次启动服务前修改                          |
 
 * data\_region\_num
 
diff --git a/server/src/assembly/resources/conf/iotdb-datanode.properties b/server/src/assembly/resources/conf/iotdb-datanode.properties
index f4cf85d..38d0e3d 100644
--- a/server/src/assembly/resources/conf/iotdb-datanode.properties
+++ b/server/src/assembly/resources/conf/iotdb-datanode.properties
@@ -1061,6 +1061,10 @@
 # Datatype: long
 # partition_interval=86400
 
+# time range for partitioning data inside each data region, the unit is second
+# Datatype: long
+# time_partition_interval_for_storage=86400
+
 ####################
 ### Influx DB RPC Service Configuration
 ####################
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
index 5513ff5..50d69dc 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBConfig.java
@@ -767,6 +767,12 @@
    */
   private long partitionInterval = 86400;
 
+  /** Time partition interval for storage in seconds */
+  private long timePartitionIntervalForStorage = 86400;
+
+  /** Time partition interval for routing in seconds */
+  private long timePartitionIntervalForRouting = 86400;
+
   /**
    * Level of TimeIndex, which records the start time and end time of TsFileResource. Currently,
    * DEVICE_TIME_INDEX and FILE_TIME_INDEX are supported, and could not be changed after first set.
@@ -1110,6 +1116,22 @@
     this.partitionInterval = partitionInterval;
   }
 
+  public long getTimePartitionIntervalForStorage() {
+    return timePartitionIntervalForStorage;
+  }
+
+  public void setTimePartitionIntervalForStorage(long timePartitionIntervalForStorage) {
+    this.timePartitionIntervalForStorage = timePartitionIntervalForStorage;
+  }
+
+  public long getTimePartitionIntervalForRouting() {
+    return timePartitionIntervalForRouting;
+  }
+
+  public void setTimePartitionIntervalForRouting(long timePartitionIntervalForRouting) {
+    this.timePartitionIntervalForRouting = timePartitionIntervalForRouting;
+  }
+
   public TimeIndexLevel getTimeIndexLevel() {
     return timeIndexLevel;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
index 2d0ac12..57ed301 100644
--- a/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
+++ b/server/src/main/java/org/apache/iotdb/db/conf/IoTDBDescriptor.java
@@ -900,6 +900,12 @@
             properties.getProperty(
                 "partition_interval", String.valueOf(conf.getPartitionInterval()))));
 
+    conf.setTimePartitionIntervalForStorage(
+        Long.parseLong(
+            properties.getProperty(
+                "time_partition_interval_for_storage",
+                String.valueOf(conf.getTimePartitionIntervalForStorage()))));
+
     conf.setSelectIntoInsertTabletPlanRowLimit(
         Integer.parseInt(
             properties.getProperty(
@@ -1915,7 +1921,7 @@
   public void loadGlobalConfig(TGlobalConfig globalConfig) {
     conf.setSeriesPartitionExecutorClass(globalConfig.getSeriesPartitionExecutorClass());
     conf.setSeriesPartitionSlotNum(globalConfig.getSeriesPartitionSlotNum());
-    conf.setPartitionInterval(globalConfig.timePartitionInterval);
+    conf.setTimePartitionIntervalForRouting(globalConfig.timePartitionInterval);
     conf.setReadConsistencyLevel(globalConfig.getReadConsistencyLevel());
   }
 
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java
index b81665d..807a3e5 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/StorageEngineV2.java
@@ -21,7 +21,6 @@
 import org.apache.iotdb.common.rpc.thrift.TFlushReq;
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.common.rpc.thrift.TSetTTLReq;
-import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.concurrent.IoTDBThreadPoolFactory;
 import org.apache.iotdb.commons.concurrent.ThreadName;
 import org.apache.iotdb.commons.concurrent.threadpool.ScheduledExecutorUtil;
@@ -101,7 +100,7 @@
    * Time range for dividing storage group, the time unit is the same with IoTDB's
    * TimestampPrecision
    */
-  @ServerConfigConsistent private static long timePartitionInterval = -1;
+  private static long timePartitionIntervalForStorage = -1;
   /** whether enable data partition if disabled, all data belongs to partition 0 */
   @ServerConfigConsistent private static boolean enablePartition = config.isEnablePartition();
 
@@ -147,9 +146,9 @@
   }
 
   private static void initTimePartition() {
-    timePartitionInterval =
+    timePartitionIntervalForStorage =
         convertMilliWithPrecision(
-            IoTDBDescriptor.getInstance().getConfig().getPartitionInterval() * 1000L);
+            IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForStorage() * 1000L);
   }
 
   public static long convertMilliWithPrecision(long milliTime) {
@@ -168,23 +167,23 @@
     return result;
   }
 
-  public static long getTimePartitionInterval() {
-    if (timePartitionInterval == -1) {
+  public static long getTimePartitionIntervalForStorage() {
+    if (timePartitionIntervalForStorage == -1) {
       initTimePartition();
     }
-    return timePartitionInterval;
+    return timePartitionIntervalForStorage;
   }
 
   @TestOnly
-  public static void setTimePartitionInterval(long timePartitionInterval) {
-    StorageEngineV2.timePartitionInterval = timePartitionInterval;
+  public static void setTimePartitionIntervalForStorage(long timePartitionIntervalForStorage) {
+    StorageEngineV2.timePartitionIntervalForStorage = timePartitionIntervalForStorage;
   }
 
   public static long getTimePartition(long time) {
-    if (timePartitionInterval == -1) {
+    if (timePartitionIntervalForStorage == -1) {
       initTimePartition();
     }
-    return enablePartition ? time / timePartitionInterval : 0;
+    return enablePartition ? time / timePartitionIntervalForStorage : 0;
   }
 
   public static boolean isEnablePartition() {
@@ -216,19 +215,6 @@
     }
   }
 
-  public static TTimePartitionSlot getTimePartitionSlot(long time) {
-    TTimePartitionSlot timePartitionSlot = new TTimePartitionSlot();
-    if (enablePartition) {
-      if (timePartitionInterval == -1) {
-        initTimePartition();
-      }
-      timePartitionSlot.setStartTime(time - time % timePartitionInterval);
-    } else {
-      timePartitionSlot.setStartTime(0);
-    }
-    return timePartitionSlot;
-  }
-
   public boolean isAllSgReady() {
     return isAllSgReady.get();
   }
@@ -337,7 +323,7 @@
   public void start() {
     // build time Interval to divide time partition
     if (!enablePartition) {
-      timePartitionInterval = Long.MAX_VALUE;
+      timePartitionIntervalForStorage = Long.MAX_VALUE;
     } else {
       initTimePartition();
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/load/AlignedChunkData.java b/server/src/main/java/org/apache/iotdb/db/engine/load/AlignedChunkData.java
index 7a2a3eb..54f4885 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/load/AlignedChunkData.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/load/AlignedChunkData.java
@@ -20,7 +20,7 @@
 package org.apache.iotdb.db.engine.load;
 
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
-import org.apache.iotdb.db.engine.StorageEngineV2;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.encoding.decoder.Decoder;
 import org.apache.iotdb.tsfile.exception.write.PageException;
@@ -270,7 +270,8 @@
     for (int i = 0; i < decodeTime.length; i++) {
       if (decodeTime[i] < timePartitionSlot.getStartTime()) {
         continue;
-      } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(decodeTime[i]))) {
+      } else if (!timePartitionSlot.equals(
+          TimePartitionUtils.getTimePartitionForRouting(decodeTime[i]))) {
         break;
       }
       time[satisfiedLength++] = decodeTime[i];
@@ -303,7 +304,8 @@
     for (int i = 0; i < valueBatch.length; i++) {
       if (time[i] < timePartitionSlot.getStartTime()) {
         continue;
-      } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time[i]))) {
+      } else if (!timePartitionSlot.equals(
+          TimePartitionUtils.getTimePartitionForRouting(time[i]))) {
         break;
       }
       if (valueBatch[i] == null) {
@@ -469,7 +471,7 @@
     for (int i = 1; i < chunkHeaderListSize; i++) {
       chunkData.addValueChunk(-1, chunkHeaderList[i], null);
     }
-    chunkData.setTimePartitionSlot(StorageEngineV2.getTimePartitionSlot(timePartition));
+    chunkData.setTimePartitionSlot(TimePartitionUtils.getTimePartitionForRouting(timePartition));
     chunkData.deserializeTsFileData(stream);
     return chunkData;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/engine/load/NonAlignedChunkData.java b/server/src/main/java/org/apache/iotdb/db/engine/load/NonAlignedChunkData.java
index 5f0e9f0..ef3df5e 100644
--- a/server/src/main/java/org/apache/iotdb/db/engine/load/NonAlignedChunkData.java
+++ b/server/src/main/java/org/apache/iotdb/db/engine/load/NonAlignedChunkData.java
@@ -20,7 +20,7 @@
 package org.apache.iotdb.db.engine.load;
 
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
-import org.apache.iotdb.db.engine.StorageEngineV2;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.encoding.decoder.Decoder;
 import org.apache.iotdb.tsfile.exception.write.PageException;
@@ -213,7 +213,7 @@
       if (time < timePartitionSlot.getStartTime()) {
         batchData.next();
         continue;
-      } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time))) {
+      } else if (!timePartitionSlot.equals(TimePartitionUtils.getTimePartitionForRouting(time))) {
         break;
       }
       length += 1;
@@ -227,7 +227,7 @@
       if (time < timePartitionSlot.getStartTime()) {
         batchData.next();
         continue;
-      } else if (!timePartitionSlot.equals(StorageEngineV2.getTimePartitionSlot(time))) {
+      } else if (!timePartitionSlot.equals(TimePartitionUtils.getTimePartitionForRouting(time))) {
         break;
       }
 
@@ -338,7 +338,7 @@
     byte chunkType = ReadWriteIOUtils.readByte(stream);
     ChunkHeader chunkHeader = ChunkHeader.deserializeFrom(stream, chunkType);
     NonAlignedChunkData chunkData = new NonAlignedChunkData(-1, device, chunkHeader);
-    chunkData.setTimePartitionSlot(StorageEngineV2.getTimePartitionSlot(timePartition));
+    chunkData.setTimePartitionSlot(TimePartitionUtils.getTimePartitionForRouting(timePartition));
     chunkData.deserializeTsFileData(stream);
     return chunkData;
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
index c0df8bc..bdccefb 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/AnalyzeVisitor.java
@@ -29,7 +29,6 @@
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.path.PathPatternTree;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResourceStatus;
 import org.apache.iotdb.db.exception.LoadFileException;
@@ -105,6 +104,7 @@
 import org.apache.iotdb.db.mpp.plan.statement.sys.sync.ShowPipeSinkTypeStatement;
 import org.apache.iotdb.db.query.control.SessionManager;
 import org.apache.iotdb.db.utils.FileLoaderUtils;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.rpc.TSStatusCode;
 import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
 import org.apache.iotdb.tsfile.file.header.ChunkHeader;
@@ -1502,10 +1502,11 @@
       List<TTimePartitionSlot> timePartitionSlots = new ArrayList<>();
       String device = entry.getKey();
       long endTime = device2MaxTime.get(device);
-      long interval = StorageEngineV2.getTimePartitionInterval();
+      long interval =
+          IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting();
       long time = (entry.getValue() / interval) * interval;
       for (; time <= endTime; time += interval) {
-        timePartitionSlots.add(StorageEngineV2.getTimePartitionSlot(time));
+        timePartitionSlots.add(TimePartitionUtils.getTimePartitionForRouting(time));
       }
 
       DataPartitionQueryParam dataPartitionQueryParam = new DataPartitionQueryParam();
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/load/LoadSingleTsFileNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/load/LoadSingleTsFileNode.java
index fd0ac00..fffe6cb 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/load/LoadSingleTsFileNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/load/LoadSingleTsFileNode.java
@@ -25,7 +25,6 @@
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.engine.load.AlignedChunkData;
 import org.apache.iotdb.db.engine.load.ChunkData;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
@@ -33,6 +32,7 @@
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.common.conf.TSFileConfig;
 import org.apache.iotdb.tsfile.common.conf.TSFileDescriptor;
 import org.apache.iotdb.tsfile.common.constant.TsFileConstant;
@@ -91,8 +91,8 @@
     Set<TRegionReplicaSet> allRegionReplicaSet = new HashSet<>();
     needDecodeTsFile = false;
     for (String device : resource.getDevices()) {
-      if (!StorageEngineV2.getTimePartitionSlot(resource.getStartTime(device))
-          .equals(StorageEngineV2.getTimePartitionSlot(resource.getEndTime(device)))) {
+      if (!TimePartitionUtils.getTimePartitionForRouting(resource.getStartTime(device))
+          .equals(TimePartitionUtils.getTimePartitionForRouting(resource.getEndTime(device)))) {
         needDecodeTsFile = true;
         return;
       }
@@ -229,7 +229,7 @@
                     == TsFileConstant.TIME_COLUMN_MASK);
             IChunkMetadata chunkMetadata = offset2ChunkMetadata.get(chunkOffset - Byte.BYTES);
             TTimePartitionSlot timePartitionSlot =
-                StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime());
+                TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime());
             ChunkData chunkData =
                 ChunkData.createChunkData(isAligned, reader.position(), curDevice, header);
             chunkData.setTimePartitionSlot(timePartitionSlot);
@@ -273,7 +273,7 @@
                         ? chunkMetadata.getStartTime()
                         : pageHeader.getStartTime();
                 TTimePartitionSlot pageTimePartitionSlot =
-                    StorageEngineV2.getTimePartitionSlot(startTime);
+                    TimePartitionUtils.getTimePartitionForRouting(startTime);
                 if (!timePartitionSlot.equals(pageTimePartitionSlot)) {
                   chunkDataList.add(chunkData);
                   timePartitionSlot = pageTimePartitionSlot;
@@ -295,7 +295,8 @@
                 boolean isFirstData = true;
                 for (long currentTime : timeBatch) {
                   TTimePartitionSlot currentTimePartitionSlot =
-                      StorageEngineV2.getTimePartitionSlot(currentTime); // TODO: can speed up
+                      TimePartitionUtils.getTimePartitionForRouting(
+                          currentTime); // TODO: can speed up
                   if (!timePartitionSlot.equals(currentTimePartitionSlot)) {
                     if (!isFirstData) {
                       chunkData.setTailPageNeedDecode(true); // close last chunk data
@@ -426,17 +427,17 @@
   }
 
   private boolean needDecodeChunk(IChunkMetadata chunkMetadata) {
-    return !StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime())
-        .equals(StorageEngineV2.getTimePartitionSlot(chunkMetadata.getEndTime()));
+    return !TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime())
+        .equals(TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getEndTime()));
   }
 
   private boolean needDecodePage(PageHeader pageHeader, IChunkMetadata chunkMetadata) {
     if (pageHeader.getStatistics() == null) {
-      return !StorageEngineV2.getTimePartitionSlot(chunkMetadata.getStartTime())
-          .equals(StorageEngineV2.getTimePartitionSlot(chunkMetadata.getEndTime()));
+      return !TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getStartTime())
+          .equals(TimePartitionUtils.getTimePartitionForRouting(chunkMetadata.getEndTime()));
     }
-    return !StorageEngineV2.getTimePartitionSlot(pageHeader.getStartTime())
-        .equals(StorageEngineV2.getTimePartitionSlot(pageHeader.getEndTime()));
+    return !TimePartitionUtils.getTimePartitionForRouting(pageHeader.getStartTime())
+        .equals(TimePartitionUtils.getTimePartitionForRouting(pageHeader.getEndTime()));
   }
 
   private long[] decodePage(
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowNode.java
index cd8d1f9..d8e8c10 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowNode.java
@@ -24,7 +24,6 @@
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.TestOnly;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.exception.metadata.PathNotExistException;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.mpp.common.schematree.DeviceSchemaInfo;
@@ -36,6 +35,7 @@
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode;
 import org.apache.iotdb.db.utils.CommonUtils;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.db.utils.TypeInferenceUtils;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
 import org.apache.iotdb.db.wal.buffer.WALEntryValue;
@@ -95,7 +95,7 @@
 
   @Override
   public List<WritePlanNode> splitByPartition(Analysis analysis) {
-    TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(time);
+    TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(time);
     this.dataRegionReplicaSet =
         analysis
             .getDataPartitionInfo()
@@ -174,7 +174,7 @@
 
   @TestOnly
   public List<TTimePartitionSlot> getTimePartitionSlots() {
-    return Collections.singletonList(StorageEngineV2.getTimePartitionSlot(time));
+    return Collections.singletonList(TimePartitionUtils.getTimePartitionForRouting(time));
   }
 
   @Override
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsNode.java
index a75b81e..0ca29b9 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsNode.java
@@ -22,7 +22,6 @@
 import org.apache.iotdb.common.rpc.thrift.TSStatus;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.StatusUtils;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.mpp.common.schematree.ISchemaTree;
 import org.apache.iotdb.db.mpp.plan.analyze.Analysis;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
@@ -30,6 +29,7 @@
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.exception.NotImplementedException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -268,7 +268,7 @@
               .getDataPartitionInfo()
               .getDataRegionReplicaSetForWriting(
                   insertRowNode.devicePath.getFullPath(),
-                  StorageEngineV2.getTimePartitionSlot(insertRowNode.getTime()));
+                  TimePartitionUtils.getTimePartitionForRouting(insertRowNode.getTime()));
       if (splitMap.containsKey(dataRegionReplicaSet)) {
         InsertRowsNode tmpNode = splitMap.get(dataRegionReplicaSet);
         tmpNode.addOneInsertRowNode(insertRowNode, i);
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsOfOneDeviceNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsOfOneDeviceNode.java
index 6cd8a9c..bb1f69d 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsOfOneDeviceNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertRowsOfOneDeviceNode.java
@@ -23,7 +23,6 @@
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.StatusUtils;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.mpp.common.schematree.ISchemaTree;
 import org.apache.iotdb.db.mpp.plan.analyze.Analysis;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNode;
@@ -31,6 +30,7 @@
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeType;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanVisitor;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.exception.NotImplementedException;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
@@ -175,7 +175,7 @@
               .getDataPartitionInfo()
               .getDataRegionReplicaSetForWriting(
                   devicePath.getFullPath(),
-                  StorageEngineV2.getTimePartitionSlot(insertRowNode.getTime()));
+                  TimePartitionUtils.getTimePartitionForRouting(insertRowNode.getTime()));
       List<InsertRowNode> tmpMap =
           splitMap.computeIfAbsent(dataRegionReplicaSet, k -> new ArrayList<>());
       List<Integer> tmpIndexMap =
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertTabletNode.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertTabletNode.java
index 86acccf..0b5742e 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertTabletNode.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/plan/node/write/InsertTabletNode.java
@@ -23,7 +23,8 @@
 import org.apache.iotdb.commons.exception.IllegalPathException;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.commons.utils.TestOnly;
-import org.apache.iotdb.db.engine.StorageEngineV2;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.ServerConfigConsistent;
 import org.apache.iotdb.db.mpp.common.schematree.DeviceSchemaInfo;
 import org.apache.iotdb.db.mpp.common.schematree.ISchemaTree;
 import org.apache.iotdb.db.mpp.plan.analyze.Analysis;
@@ -34,6 +35,7 @@
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode;
 import org.apache.iotdb.db.utils.CommonUtils;
 import org.apache.iotdb.db.utils.QueryDataSetUtils;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.db.wal.buffer.IWALByteBufferView;
 import org.apache.iotdb.db.wal.buffer.WALEntryValue;
 import org.apache.iotdb.db.wal.utils.WALWriteUtils;
@@ -69,6 +71,10 @@
 
   private static final String DATATYPE_UNSUPPORTED = "Data type %s is not supported.";
 
+  @ServerConfigConsistent
+  private long timePartitionIntervalForRouting =
+      IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting();
+
   private long[] times; // times should be sorted. It is done in the session API.
 
   private BitMap[] bitMaps;
@@ -210,10 +216,9 @@
       return Collections.emptyList();
     }
     long startTime =
-        (times[0] / StorageEngineV2.getTimePartitionInterval())
-            * StorageEngineV2.getTimePartitionInterval(); // included
-    long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded
-    TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]);
+        (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included
+    long endTime = startTime + timePartitionIntervalForRouting; // excluded
+    TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[0]);
     int startLoc = 0; // included
 
     List<TTimePartitionSlot> timePartitionSlots = new ArrayList<>();
@@ -229,9 +234,8 @@
         startLoc = i;
         startTime = endTime;
         endTime =
-            (times[i] / StorageEngineV2.getTimePartitionInterval() + 1)
-                * StorageEngineV2.getTimePartitionInterval();
-        timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]);
+            (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting;
+        timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[i]);
       }
     }
 
@@ -303,18 +307,16 @@
   public List<TTimePartitionSlot> getTimePartitionSlots() {
     List<TTimePartitionSlot> result = new ArrayList<>();
     long startTime =
-        (times[0] / StorageEngineV2.getTimePartitionInterval())
-            * StorageEngineV2.getTimePartitionInterval(); // included
-    long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded
-    TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]);
+        (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included
+    long endTime = startTime + timePartitionIntervalForRouting; // excluded
+    TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[0]);
     for (int i = 1; i < times.length; i++) { // times are sorted in session API.
       if (times[i] >= endTime) {
         result.add(timePartitionSlot);
         // next init
         endTime =
-            (times[i] / StorageEngineV2.getTimePartitionInterval() + 1)
-                * StorageEngineV2.getTimePartitionInterval();
-        timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]);
+            (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting;
+        timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[i]);
       }
     }
     result.add(timePartitionSlot);
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java
index 75eff70..545731e 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertMultiTabletsStatement.java
@@ -23,9 +23,9 @@
 import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.mpp.plan.constant.StatementType;
 import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 import java.util.ArrayList;
@@ -106,7 +106,7 @@
       TRegionReplicaSet regionReplicaSet =
           dataPartition.getDataRegionReplicaSetForWriting(
               insertTabletStatement.devicePath.getFullPath(),
-              StorageEngineV2.getTimePartitionSlot(
+              TimePartitionUtils.getTimePartitionForRouting(
                   insertTabletStatement.getTimes()[insertTabletStatement.getTimes().length - 1]));
       result.add(regionReplicaSet.getDataNodeLocations().get(0).getClientRpcEndPoint());
     }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowStatement.java
index 3972d0c..ff43317 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowStatement.java
@@ -24,10 +24,10 @@
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.exception.query.QueryProcessException;
 import org.apache.iotdb.db.mpp.plan.constant.StatementType;
 import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.utils.ReadWriteIOUtils;
 
@@ -127,14 +127,14 @@
   }
 
   public List<TTimePartitionSlot> getTimePartitionSlots() {
-    return Collections.singletonList(StorageEngineV2.getTimePartitionSlot(time));
+    return Collections.singletonList(TimePartitionUtils.getTimePartitionForRouting(time));
   }
 
   @Override
   public List<TEndPoint> collectRedirectInfo(DataPartition dataPartition) {
     TRegionReplicaSet regionReplicaSet =
         dataPartition.getDataRegionReplicaSetForWriting(
-            devicePath.getFullPath(), StorageEngineV2.getTimePartitionSlot(time));
+            devicePath.getFullPath(), TimePartitionUtils.getTimePartitionForRouting(time));
     return Collections.singletonList(
         regionReplicaSet.getDataNodeLocations().get(0).getClientRpcEndPoint());
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsOfOneDeviceStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsOfOneDeviceStatement.java
index a18c19d..f9bc18c 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsOfOneDeviceStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsOfOneDeviceStatement.java
@@ -23,9 +23,9 @@
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.mpp.plan.constant.StatementType;
 import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 import java.util.ArrayList;
@@ -82,7 +82,8 @@
   public List<TTimePartitionSlot> getTimePartitionSlots() {
     Set<TTimePartitionSlot> timePartitionSlotSet = new HashSet<>();
     for (InsertRowStatement insertRowStatement : insertRowStatementList) {
-      timePartitionSlotSet.add(StorageEngineV2.getTimePartitionSlot(insertRowStatement.getTime()));
+      timePartitionSlotSet.add(
+          TimePartitionUtils.getTimePartitionForRouting(insertRowStatement.getTime()));
     }
     return new ArrayList<>(timePartitionSlotSet);
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java
index 8314759..6c130f9 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertRowsStatement.java
@@ -23,9 +23,9 @@
 import org.apache.iotdb.common.rpc.thrift.TRegionReplicaSet;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.mpp.plan.constant.StatementType;
 import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 import java.util.ArrayList;
@@ -106,7 +106,7 @@
       TRegionReplicaSet regionReplicaSet =
           dataPartition.getDataRegionReplicaSetForWriting(
               insertRowStatement.devicePath.getFullPath(),
-              StorageEngineV2.getTimePartitionSlot(insertRowStatement.getTime()));
+              TimePartitionUtils.getTimePartitionForRouting(insertRowStatement.getTime()));
       result.add(regionReplicaSet.getDataNodeLocations().get(0).getClientRpcEndPoint());
     }
     return result;
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertTabletStatement.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertTabletStatement.java
index 7621adf..e720790 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertTabletStatement.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/statement/crud/InsertTabletStatement.java
@@ -23,9 +23,11 @@
 import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
 import org.apache.iotdb.commons.partition.DataPartition;
 import org.apache.iotdb.commons.path.PartialPath;
-import org.apache.iotdb.db.engine.StorageEngineV2;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.ServerConfigConsistent;
 import org.apache.iotdb.db.mpp.plan.constant.StatementType;
 import org.apache.iotdb.db.mpp.plan.statement.StatementVisitor;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.utils.BitMap;
 
 import java.util.ArrayList;
@@ -34,6 +36,10 @@
 
 public class InsertTabletStatement extends InsertBaseStatement {
 
+  @ServerConfigConsistent
+  private long timePartitionIntervalForRouting =
+      IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting();
+
   private long[] times; // times should be sorted. It is done in the session API.
   private BitMap[] bitMaps;
   private Object[] columns;
@@ -89,18 +95,16 @@
   public List<TTimePartitionSlot> getTimePartitionSlots() {
     List<TTimePartitionSlot> result = new ArrayList<>();
     long startTime =
-        (times[0] / StorageEngineV2.getTimePartitionInterval())
-            * StorageEngineV2.getTimePartitionInterval(); // included
-    long endTime = startTime + StorageEngineV2.getTimePartitionInterval(); // excluded
-    TTimePartitionSlot timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[0]);
+        (times[0] / timePartitionIntervalForRouting) * timePartitionIntervalForRouting; // included
+    long endTime = startTime + timePartitionIntervalForRouting; // excluded
+    TTimePartitionSlot timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[0]);
     for (int i = 1; i < times.length; i++) { // times are sorted in session API.
       if (times[i] >= endTime) {
         result.add(timePartitionSlot);
         // next init
         endTime =
-            (times[i] / StorageEngineV2.getTimePartitionInterval() + 1)
-                * StorageEngineV2.getTimePartitionInterval();
-        timePartitionSlot = StorageEngineV2.getTimePartitionSlot(times[i]);
+            (times[i] / timePartitionIntervalForRouting + 1) * timePartitionIntervalForRouting;
+        timePartitionSlot = TimePartitionUtils.getTimePartitionForRouting(times[i]);
       }
     }
     result.add(timePartitionSlot);
@@ -112,7 +116,7 @@
     TRegionReplicaSet regionReplicaSet =
         dataPartition.getDataRegionReplicaSetForWriting(
             devicePath.getFullPath(),
-            StorageEngineV2.getTimePartitionSlot(times[times.length - 1]));
+            TimePartitionUtils.getTimePartitionForRouting(times[times.length - 1]));
     return Collections.singletonList(
         regionReplicaSet.getDataNodeLocations().get(0).getClientRpcEndPoint());
   }
diff --git a/server/src/main/java/org/apache/iotdb/db/utils/TimePartitionUtils.java b/server/src/main/java/org/apache/iotdb/db/utils/TimePartitionUtils.java
new file mode 100644
index 0000000..b082e94
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/utils/TimePartitionUtils.java
@@ -0,0 +1,41 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ *     http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.iotdb.db.utils;
+
+import org.apache.iotdb.common.rpc.thrift.TTimePartitionSlot;
+import org.apache.iotdb.commons.utils.TestOnly;
+import org.apache.iotdb.db.conf.IoTDBDescriptor;
+import org.apache.iotdb.db.conf.ServerConfigConsistent;
+
+public class TimePartitionUtils {
+  @ServerConfigConsistent
+  private static long timePartitionIntervalForRouting =
+      IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting();
+
+  public static TTimePartitionSlot getTimePartitionForRouting(long time) {
+    TTimePartitionSlot timePartitionSlot = new TTimePartitionSlot();
+    timePartitionSlot.setStartTime(time - time % timePartitionIntervalForRouting);
+    return timePartitionSlot;
+  }
+
+  @TestOnly
+  public static void setTimePartitionIntervalForRouting(long timePartitionIntervalForRouting) {
+    TimePartitionUtils.timePartitionIntervalForRouting = timePartitionIntervalForRouting;
+  }
+}
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/distribution/DistributionPlannerBasicTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/distribution/DistributionPlannerBasicTest.java
index 8227fc4..780a63c 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/distribution/DistributionPlannerBasicTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/distribution/DistributionPlannerBasicTest.java
@@ -353,7 +353,7 @@
             false,
             new String[] {"s1"},
             new TSDataType[] {TSDataType.INT32},
-            100000L,
+            10000L,
             new Object[] {10},
             false);
     insertRowNode2.setMeasurementSchemas(
diff --git a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/write/WritePlanNodeSplitTest.java b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/write/WritePlanNodeSplitTest.java
index c5a5466..fb8c77b 100644
--- a/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/write/WritePlanNodeSplitTest.java
+++ b/server/src/test/java/org/apache/iotdb/db/mpp/plan/plan/node/write/WritePlanNodeSplitTest.java
@@ -30,7 +30,6 @@
 import org.apache.iotdb.commons.partition.executor.SeriesPartitionExecutor;
 import org.apache.iotdb.commons.path.PartialPath;
 import org.apache.iotdb.db.conf.IoTDBDescriptor;
-import org.apache.iotdb.db.engine.StorageEngineV2;
 import org.apache.iotdb.db.mpp.plan.analyze.Analysis;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.PlanNodeId;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.WritePlanNode;
@@ -38,6 +37,7 @@
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertRowsNode;
 import org.apache.iotdb.db.mpp.plan.planner.plan.node.write.InsertTabletNode;
+import org.apache.iotdb.db.utils.TimePartitionUtils;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 
 import org.junit.After;
@@ -55,8 +55,6 @@
 
   long prevTimePartitionInterval;
 
-  boolean prevEnableTimePartition;
-
   Map<String, Map<TSeriesPartitionSlot, Map<TTimePartitionSlot, List<TRegionReplicaSet>>>>
       dataPartitionMap;
 
@@ -70,10 +68,10 @@
 
   @Before
   public void setUp() {
-    prevTimePartitionInterval = StorageEngineV2.getTimePartitionInterval();
-    prevEnableTimePartition = StorageEngineV2.isEnablePartition();
-    StorageEngineV2.setTimePartitionInterval(100);
-    StorageEngineV2.setEnablePartition(true);
+    prevTimePartitionInterval =
+        IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting();
+    IoTDBDescriptor.getInstance().getConfig().setTimePartitionIntervalForRouting(100);
+    TimePartitionUtils.setTimePartitionIntervalForRouting(100);
 
     executorClassName = IoTDBDescriptor.getInstance().getConfig().getSeriesPartitionExecutorClass();
     seriesSlotPartitionNum = IoTDBDescriptor.getInstance().getConfig().getSeriesPartitionSlotNum();
@@ -95,7 +93,8 @@
       Map<TTimePartitionSlot, List<TRegionReplicaSet>> timePartitionSlotMap = new HashMap<>();
       for (int t = 0; t < 5; t++) {
         timePartitionSlotMap.put(
-            new TTimePartitionSlot(t * StorageEngineV2.getTimePartitionInterval()),
+            new TTimePartitionSlot(
+                t * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting()),
             Collections.singletonList(
                 new TRegionReplicaSet(
                     new TConsensusGroupId(TConsensusGroupType.DataRegion, t), null)));
@@ -112,7 +111,8 @@
       Map<TTimePartitionSlot, List<TRegionReplicaSet>> timePartitionSlotMap = new HashMap<>();
       for (int t = 0; t < 5; t++) {
         timePartitionSlotMap.put(
-            new TTimePartitionSlot(t * StorageEngineV2.getTimePartitionInterval()),
+            new TTimePartitionSlot(
+                t * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting()),
             Collections.singletonList(
                 new TRegionReplicaSet(
                     new TConsensusGroupId(TConsensusGroupType.DataRegion, 5), null)));
@@ -268,7 +268,8 @@
     for (int i = 0; i < 5; i++) {
       InsertRowNode insertRowNode = new InsertRowNode(new PlanNodeId("plan node 3"));
       insertRowNode.setDevicePath(new PartialPath(String.format("root.sg1.d%d", i)));
-      insertRowNode.setTime(i * StorageEngineV2.getTimePartitionInterval());
+      insertRowNode.setTime(
+          i * IoTDBDescriptor.getInstance().getConfig().getTimePartitionIntervalForRouting());
       insertRowsNode.addOneInsertRowNode(insertRowNode, 2 * i);
 
       insertRowNode = new InsertRowNode(new PlanNodeId("plan node 3"));
@@ -296,7 +297,9 @@
 
   @After
   public void tearDown() {
-    StorageEngineV2.setTimePartitionInterval(prevTimePartitionInterval);
-    StorageEngineV2.setEnablePartition(prevEnableTimePartition);
+    TimePartitionUtils.setTimePartitionIntervalForRouting(prevTimePartitionInterval);
+    IoTDBDescriptor.getInstance()
+        .getConfig()
+        .setTimePartitionIntervalForRouting(prevTimePartitionInterval);
   }
 }