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;