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; } } }