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 {