Filter those time series metadata whose endTime is less than startTime
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
index b45990a..239f7e6 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/queryengine/execution/operator/source/FileLoaderUtils.java
@@ -192,8 +192,8 @@
if (alignedTimeSeriesMetadata != null) {
final long t2 = System.nanoTime();
try {
- if (alignedTimeSeriesMetadata.getTimeseriesMetadata().getStatistics().getStartTime()
- > alignedTimeSeriesMetadata.getTimeseriesMetadata().getStatistics().getEndTime()) {
+ if (alignedTimeSeriesMetadata.getStatistics().getStartTime()
+ > alignedTimeSeriesMetadata.getStatistics().getEndTime()) {
return null;
}
if (globalTimeFilter != null && globalTimeFilter.canSkip(alignedTimeSeriesMetadata)) {
diff --git a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
index bf30899..757609d 100644
--- a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
+++ b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/buffer/TimeSeriesMetadataCache.java
@@ -129,9 +129,20 @@
}
TimeseriesMetadata timeseriesMetadata =
reader.readTimeseriesMetadata(key.device, key.measurement, ignoreNotExists);
- return (timeseriesMetadata == null || timeseriesMetadata.getStatistics().getCount() == 0)
- ? null
- : timeseriesMetadata;
+ if (timeseriesMetadata == null || timeseriesMetadata.getStatistics().getCount() == 0) {
+ return null;
+ } else if (timeseriesMetadata.getStatistics().getEndTime()
+ < timeseriesMetadata.getStatistics().getStartTime()) {
+ logger.warn(
+ "Found endTime({}) of timeseries metadata statistics{} less than startTime({}), file is {}",
+ timeseriesMetadata.getStatistics().getEndTime(),
+ timeseriesMetadata.getStatistics(),
+ timeseriesMetadata.getStatistics().getStartTime(),
+ key);
+ return null;
+ } else {
+ return timeseriesMetadata;
+ }
}
TimeseriesMetadata timeseriesMetadata = lruCache.getIfPresent(key);
@@ -185,11 +196,25 @@
key.compactionVersion,
key.device,
metadata.getMeasurementId());
+ long startTime1 = metadata.getStatistics().getStartTime();
+ long endTime1 = metadata.getStatistics().getEndTime();
if (metadata.getStatistics().getCount() != 0) {
- lruCache.put(k, metadata);
+ if (endTime1 < startTime1) {
+ logger.warn(
+ "Found endTime({}) of timeseries metadata statistics{} less than startTime({}), file is {}",
+ endTime1,
+ metadata.getStatistics(),
+ startTime1,
+ key);
+ } else {
+ lruCache.put(k, metadata);
+ }
}
if (metadata.getMeasurementId().equals(key.measurement)) {
- timeseriesMetadata = metadata.getStatistics().getCount() == 0 ? null : metadata;
+ timeseriesMetadata =
+ (metadata.getStatistics().getCount() == 0 || endTime1 < startTime1)
+ ? null
+ : metadata;
}
}
}