This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch rel/0.12
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/rel/0.12 by this push:
new 67840ef [To rel/0.12] [IOTDB-2400] Fix series reader bug (#4828)
67840ef is described below
commit 67840effafdb58531b62612cd2081e5cb0822c6d
Author: Jackie Tien <[email protected]>
AuthorDate: Sat Jan 15 09:27:25 2022 +0800
[To rel/0.12] [IOTDB-2400] Fix series reader bug (#4828)
---
.../iotdb/db/query/reader/series/SeriesReader.java | 19 ++++++++++++++-----
1 file changed, 14 insertions(+), 5 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
index 62e9518..b024b3a 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReader.java
@@ -408,7 +408,7 @@ public class SeriesReader {
*/
if (hasCachedNextOverlappedPage) {
return true;
- } else if (mergeReader.hasNextTimeValuePair()) {
+ } else if (mergeReader.hasNextTimeValuePair() || firstPageOverlapped()) {
if (hasNextOverlappedPage()) {
cachedBatchData = nextOverlappedPage();
if (cachedBatchData != null && cachedBatchData.hasCurrent()) {
@@ -486,6 +486,12 @@ public class SeriesReader {
if (firstPageReader == null) {
return false;
}
+
+ long endpointTime =
orderUtils.getOverlapCheckTime(firstPageReader.getStatistics());
+ unpackAllOverlappedTsFilesToTimeSeriesMetadata(endpointTime);
+ unpackAllOverlappedTimeSeriesMetadataToCachedChunkMetadata(endpointTime,
false);
+ unpackAllOverlappedChunkMetadataToPageReaders(endpointTime, false);
+
return (!seqPageReaders.isEmpty()
&& orderUtils.isOverlapped(
firstPageReader.getStatistics(),
seqPageReaders.get(0).getStatistics()))
@@ -493,8 +499,9 @@ public class SeriesReader {
&& orderUtils.isOverlapped(
firstPageReader.getStatistics(),
unSeqPageReaders.peek().getStatistics())
|| (mergeReader.hasNextTimeValuePair()
- && mergeReader.currentTimeValuePair().getTimestamp()
- >= firstPageReader.getStatistics().getStartTime()));
+ && orderUtils.isOverlapped(
+ mergeReader.currentTimeValuePair().getTimestamp(),
+ firstPageReader.getStatistics())));
}
private void unpackAllOverlappedChunkMetadataToPageReaders(long
endpointTime, boolean init)
@@ -721,7 +728,8 @@ public class SeriesReader {
cachedBatchData.flip();
hasCachedNextOverlappedPage = cachedBatchData.hasCurrent();
return hasCachedNextOverlappedPage;
- } else {
+ } else if (orderUtils.isOverlapped(
+ timeValuePair.getTimestamp(),
firstPageReader.getStatistics())) {
// current timeValuePair is overlapped with firstPageReader, add
it to merged reader
// and update endTime to the max end time
mergeReader.addReader(
@@ -748,7 +756,8 @@ public class SeriesReader {
cachedBatchData.flip();
hasCachedNextOverlappedPage = cachedBatchData.hasCurrent();
return hasCachedNextOverlappedPage;
- } else {
+ } else if (orderUtils.isOverlapped(
+ timeValuePair.getTimestamp(),
seqPageReaders.get(0).getStatistics())) {
VersionPageReader pageReader = seqPageReaders.remove(0);
mergeReader.addReader(
pageReader