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

jackietien 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 dc049d4e81b check startTime and endTime in isSatisfied of 
TsFileResource
dc049d4e81b is described below

commit dc049d4e81b8cd191d23eec2ca9091ea9126ddbd
Author: Liao Lanyu <[email protected]>
AuthorDate: Thu Oct 26 11:22:06 2023 +0800

    check startTime and endTime in isSatisfied of TsFileResource
---
 .../dataregion/tsfile/TsFileResource.java            | 20 ++++++++++++++++++++
 .../compaction/ReadPointCompactionPerformerTest.java |  8 ++------
 2 files changed, 22 insertions(+), 6 deletions(-)

diff --git 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
index 4aa7f546df3..cd8eb0b65f9 100644
--- 
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
+++ 
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/tsfile/TsFileResource.java
@@ -730,6 +730,16 @@ public class TsFileResource {
   private boolean isSatisfied(Filter timeFilter, boolean isSeq, long ttl, 
boolean debug) {
     long startTime = getFileStartTime();
     long endTime = isClosed() || !isSeq ? getFileEndTime() : Long.MAX_VALUE;
+    if (startTime > endTime) {
+      // startTime > endTime indicates that there is something wrong with this 
TsFile. Return false
+      // directly, or it may lead to infinite loop in 
GroupByMonthFilter#getTimePointPosition.
+      LOGGER.warn(
+          "startTime[{}] of TsFileResource[{}] is greater than its 
endTime[{}]",
+          startTime,
+          this,
+          endTime);
+      return false;
+    }
 
     if (!isAlive(endTime, ttl)) {
       if (debug) {
@@ -760,6 +770,16 @@ public class TsFileResource {
 
     long startTime = getStartTime(deviceId);
     long endTime = isClosed() || !isSeq ? getEndTime(deviceId) : 
Long.MAX_VALUE;
+    if (startTime > endTime) {
+      // startTime > endTime indicates that there is something wrong with this 
TsFile. Return false
+      // directly, or it may lead to infinite loop in 
GroupByMonthFilter#getTimePointPosition.
+      LOGGER.warn(
+          "startTime[{}] of TsFileResource[{}] is greater than its 
endTime[{}]",
+          startTime,
+          this,
+          endTime);
+      return false;
+    }
 
     if (timeFilter != null) {
       boolean res = timeFilter.satisfyStartEndTime(startTime, endTime);
diff --git 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadPointCompactionPerformerTest.java
 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadPointCompactionPerformerTest.java
index 9b09e8d443b..79999e02b96 100644
--- 
a/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadPointCompactionPerformerTest.java
+++ 
b/iotdb-core/datanode/src/test/java/org/apache/iotdb/db/storageengine/dataregion/compaction/ReadPointCompactionPerformerTest.java
@@ -5587,12 +5587,8 @@ public class ReadPointCompactionPerformerTest extends 
AbstractCompactionTest {
     generateModsFile(seriesPaths, unseqResources, Long.MIN_VALUE, 
Long.MAX_VALUE);
     deleteTimeseriesInMManager(seriesPaths);
 
-    for (TsFileResource resource : seqResources) {
-      resource.setTimeIndexType((byte) 2);
-    }
-    for (TsFileResource resource : unseqResources) {
-      resource.setTimeIndexType((byte) 2);
-    }
+    seqResources.forEach(TsFileResource::degradeTimeIndex);
+    unseqResources.forEach(TsFileResource::degradeTimeIndex);
 
     for (int i = TsFileGeneratorUtils.getAlignDeviceOffset();
         i < TsFileGeneratorUtils.getAlignDeviceOffset() + 4;

Reply via email to