This is an automated email from the ASF dual-hosted git repository.

haonan pushed a commit to branch rc/1.3.1
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 864740a4b736a7a38802beeb403014e5b7a5ee6a
Author: Jackie Tien <[email protected]>
AuthorDate: Wed Mar 13 14:28:21 2024 +0800

    [IOTDB-6310] Optimize for query resource init
---
 .../apache/iotdb/db/storageengine/dataregion/DataRegion.java   |  4 ++--
 .../db/storageengine/dataregion/tsfile/TsFileManager.java      | 10 +++++++---
 .../org/apache/iotdb/commons/utils/TimePartitionUtils.java     |  7 ++++++-
 3 files changed, 15 insertions(+), 6 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
index a9a43ebbc87..021cca50284 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/DataRegion.java
@@ -1799,7 +1799,7 @@ public class DataRegion implements IDataRegionForQuery {
     try {
       List<TsFileResource> seqResources =
           getFileResourceListForQuery(
-              tsFileManager.getTsFileList(true, timePartitions),
+              tsFileManager.getTsFileList(true, timePartitions, 
globalTimeFilter),
               pathList,
               singleDeviceId,
               context,
@@ -1807,7 +1807,7 @@ public class DataRegion implements IDataRegionForQuery {
               true);
       List<TsFileResource> unseqResources =
           getFileResourceListForQuery(
-              tsFileManager.getTsFileList(false, timePartitions),
+              tsFileManager.getTsFileList(false, timePartitions, 
globalTimeFilter),
               pathList,
               singleDeviceId,
               context,
diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileManager.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileManager.java
index b40093beb56..0c21234c9d6 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileManager.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileManager.java
@@ -21,6 +21,7 @@ package org.apache.iotdb.db.storageengine.dataregion.tsfile;
 
 import org.apache.iotdb.commons.utils.TimePartitionUtils;
 import org.apache.iotdb.db.storageengine.rescon.memory.TsFileResourceManager;
+import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
 import java.io.IOException;
 import java.util.ArrayList;
@@ -57,14 +58,15 @@ public class TsFileManager {
   }
 
   public List<TsFileResource> getTsFileList(boolean sequence) {
-    return getTsFileList(sequence, null);
+    return getTsFileList(sequence, null, null);
   }
 
   /**
    * @param sequence true for sequence, false for unsequence
    * @param timePartitions null for all time partitions, empty for zero time 
partitions
    */
-  public List<TsFileResource> getTsFileList(boolean sequence, List<Long> 
timePartitions) {
+  public List<TsFileResource> getTsFileList(
+      boolean sequence, List<Long> timePartitions, Filter timeFilter) {
     // the iteration of ConcurrentSkipListMap is not concurrent secure
     // so we must add read lock here
     readLock();
@@ -73,7 +75,9 @@ public class TsFileManager {
       Map<Long, TsFileResourceList> chosenMap = sequence ? sequenceFiles : 
unsequenceFiles;
       if (timePartitions == null) {
         for (Map.Entry<Long, TsFileResourceList> entry : chosenMap.entrySet()) 
{
-          allResources.addAll(entry.getValue().getArrayList());
+          if (TimePartitionUtils.satisfyTimePartition(timeFilter, 
entry.getKey())) {
+            allResources.addAll(entry.getValue().getArrayList());
+          }
         }
       } else {
         for (Long timePartitionId : timePartitions) {
diff --git 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/TimePartitionUtils.java
 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/TimePartitionUtils.java
index 630b60ce20a..6721e1b0398 100644
--- 
a/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/TimePartitionUtils.java
+++ 
b/iotdb-core/node-commons/src/main/java/org/apache/iotdb/commons/utils/TimePartitionUtils.java
@@ -70,7 +70,12 @@ public class TimePartitionUtils {
   public static boolean satisfyPartitionStartTime(Filter timeFilter, long 
partitionStartTime) {
     return timeFilter == null
         || timeFilter.satisfyStartEndTime(
-            partitionStartTime, partitionStartTime + timePartitionInterval);
+            partitionStartTime, partitionStartTime + timePartitionInterval - 
1);
+  }
+
+  public static boolean satisfyTimePartition(Filter timeFilter, long 
partitionId) {
+    long partitionStartTime = partitionId * timePartitionInterval;
+    return satisfyPartitionStartTime(timeFilter, partitionStartTime);
   }
 
   public static void setTimePartitionInterval(long timePartitionInterval) {

Reply via email to