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

qiaojialin pushed a commit to branch optimize_series_reader
in repository https://gitbox.apache.org/repos/asf/incubator-iotdb.git


The following commit(s) were added to refs/heads/optimize_series_reader by this 
push:
     new 18068a9  fix bytimestamp
18068a9 is described below

commit 18068a9258e87eabf2c0f1576a4247ea5b820b42
Author: qiaojialin <[email protected]>
AuthorDate: Sat Feb 29 20:00:59 2020 +0800

    fix bytimestamp
---
 .../reader/series/SeriesRawDataBatchReader.java    |  3 --
 .../iotdb/db/query/reader/series/SeriesReader.java |  9 +++-
 .../reader/series/SeriesReaderByTimestamp.java     | 58 ++++++++++++++++++----
 .../reader/series/SeriesReaderByTimestampTest.java |  2 -
 4 files changed, 55 insertions(+), 17 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
index 9475b2f..d1e6ea5 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesRawDataBatchReader.java
@@ -18,7 +18,6 @@
  */
 package org.apache.iotdb.db.query.reader.series;
 
-import java.util.LinkedList;
 import org.apache.iotdb.db.engine.querycontext.QueryDataSource;
 import org.apache.iotdb.db.engine.storagegroup.TsFileResource;
 import org.apache.iotdb.db.query.context.QueryContext;
@@ -28,11 +27,9 @@ import 
org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
-
 import java.io.IOException;
 import java.util.List;
 
-
 public class SeriesRawDataBatchReader implements ManagedSeriesReader {
 
   private final SeriesReader seriesReader;
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 a299837..7ef65e4 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
@@ -157,6 +157,13 @@ public class SeriesReader {
       throw new IOException("all overlapped pages should be consumed first");
     }
 
+    /*
+     * consume cached pages firstly
+     */
+    if (firstChunkMetaData == null && firstPageReader == null && 
cachedPageReaders.isEmpty()) {
+      tryToUnpackAllOverlappedFilesToChunkMetadatas();
+    }
+
     if (firstChunkMetaData != null) {
       /*
        * try to unpack all overlapped ChunkMetadata to cachedPageReaders
@@ -166,7 +173,7 @@ public class SeriesReader {
       /*
        * first chunk metadata is already unpacked
        */
-      if (firstPageReader == null && !cachedPageReaders.isEmpty()) {
+      if (!cachedPageReaders.isEmpty()) {
         firstPageReader = cachedPageReaders.poll();
       }
     }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
index dd1273f..a464d32 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestamp.java
@@ -26,10 +26,8 @@ import 
org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.apache.iotdb.tsfile.read.common.Path;
 import org.apache.iotdb.tsfile.read.filter.TimeFilter;
-
 import java.io.IOException;
 
-
 public class SeriesReaderByTimestamp implements IReaderByTimestamp {
 
   private SeriesReader seriesReader;
@@ -63,26 +61,64 @@ public class SeriesReaderByTimestamp implements 
IReaderByTimestamp {
   }
 
   private boolean hasNext(long timestamp) throws IOException {
-    while (seriesReader.hasNextChunk()) {
-      if (!satisfyTimeFilter(seriesReader.currentChunkStatistics())) {
-        seriesReader.skipCurrentChunk();
-        continue;
+
+    /*
+     * consume overlapped data firstly
+     */
+    while (seriesReader.hasNextOverlappedPage()) {
+      batchData = seriesReader.nextOverlappedPage();
+      if (batchData.getTimeByIndex(batchData.length() - 1) >= timestamp) {
+        return true;
       }
-      while (seriesReader.hasNextPage()) {
+    }
+
+    /*
+     * consume pages secondly
+     */
+    while (seriesReader.hasNextPage()) {
+      if (!seriesReader.isPageOverlapped()) {
         if (!satisfyTimeFilter(seriesReader.currentPageStatistics())) {
           seriesReader.skipCurrentPage();
           continue;
-        }
-        if (!seriesReader.isPageOverlapped()) {
-          batchData = seriesReader.nextPage();
         } else {
-          batchData = seriesReader.nextOverlappedPage();
+          batchData = seriesReader.nextPage();
+          if (batchData.getTimeByIndex(batchData.length() - 1) >= timestamp) {
+            return true;
+          }
         }
+      }
+      while (seriesReader.hasNextOverlappedPage()) {
+        batchData = seriesReader.nextOverlappedPage();
         if (batchData.getTimeByIndex(batchData.length() - 1) >= timestamp) {
           return true;
         }
       }
     }
+
+    /*
+     * consume next chunk
+     */
+    while (seriesReader.hasNextChunk()) {
+      while (seriesReader.hasNextPage()) {
+        if (!seriesReader.isPageOverlapped()) {
+          if (!satisfyTimeFilter(seriesReader.currentPageStatistics())) {
+            seriesReader.skipCurrentPage();
+            continue;
+          } else {
+            batchData = seriesReader.nextPage();
+            if (batchData.getTimeByIndex(batchData.length() - 1) >= timestamp) 
{
+              return true;
+            }
+          }
+        }
+        while (seriesReader.hasNextOverlappedPage()) {
+          batchData = seriesReader.nextOverlappedPage();
+          if (batchData.getTimeByIndex(batchData.length() - 1) >= timestamp) {
+            return true;
+          }
+        }
+      }
+    }
     return false;
   }
 
diff --git 
a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestampTest.java
 
b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestampTest.java
index a0cdba0..7245af8 100644
--- 
a/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestampTest.java
+++ 
b/server/src/test/java/org/apache/iotdb/db/query/reader/series/SeriesReaderByTimestampTest.java
@@ -33,11 +33,9 @@ import org.junit.After;
 import org.junit.Assert;
 import org.junit.Before;
 import org.junit.Test;
-
 import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
-
 import static org.apache.iotdb.db.conf.IoTDBConstant.PATH_SEPARATOR;
 
 public class SeriesReaderByTimestampTest {

Reply via email to