This is an automated email from the ASF dual-hosted git repository.
haonan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/master by this push:
new f352932 [IOTDB-942] Optimization of query with long time unsequence
page (#1824)
f352932 is described below
commit f352932dfeb1daa2d9213b9e7064156d6d26e987
Author: Xiangwei Wei <[email protected]>
AuthorDate: Wed Oct 21 10:22:45 2020 +0800
[IOTDB-942] Optimization of query with long time unsequence page (#1824)
* init
* add some todo
* implement function of ascending
* implement desc part
* mark the bug position
* fix bugs
* update currentPageEndPointTime
* fix code style
* add javadoc
Co-authored-by: JackieTien97 <[email protected]>
---
.../iotdb/db/query/reader/series/SeriesReader.java | 243 ++++++++++++++++-----
.../iotdb/tsfile/file/metadata/ChunkMetadata.java | 11 +
.../tsfile/file/metadata/TimeseriesMetadata.java | 11 +
3 files changed, 208 insertions(+), 57 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 e74d4b9..a2a9988 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
@@ -95,12 +95,13 @@ public class SeriesReader {
* page cache
*/
private VersionPageReader firstPageReader;
- private PriorityQueue<VersionPageReader> cachedPageReaders;
+ private final List<VersionPageReader> seqPageReaders = new LinkedList<>();
+ private final PriorityQueue<VersionPageReader> unSeqPageReaders;
/*
* point cache
*/
- private PriorityMergeReader mergeReader;
+ private final PriorityMergeReader mergeReader;
/*
* result cache
@@ -133,7 +134,7 @@ public class SeriesReader {
timeSeriesMetadata ->
orderUtils.getOrderTime(timeSeriesMetadata.getStatistics())));
cachedChunkMetadata = new PriorityQueue<>(orderUtils.comparingLong(
chunkMetadata ->
orderUtils.getOrderTime(chunkMetadata.getStatistics())));
- cachedPageReaders = new PriorityQueue<>(orderUtils.comparingLong(
+ unSeqPageReaders = new PriorityQueue<>(orderUtils.comparingLong(
versionPageReader ->
orderUtils.getOrderTime(versionPageReader.getStatistics())));
}
@@ -163,7 +164,7 @@ public class SeriesReader {
timeSeriesMetadata ->
orderUtils.getOrderTime(timeSeriesMetadata.getStatistics())));
cachedChunkMetadata = new PriorityQueue<>(orderUtils.comparingLong(
chunkMetadata ->
orderUtils.getOrderTime(chunkMetadata.getStatistics())));
- cachedPageReaders = new PriorityQueue<>(orderUtils.comparingLong(
+ unSeqPageReaders = new PriorityQueue<>(orderUtils.comparingLong(
versionPageReader ->
orderUtils.getOrderTime(versionPageReader.getStatistics())));
}
@@ -173,12 +174,12 @@ public class SeriesReader {
boolean hasNextFile() throws IOException {
- if (!cachedPageReaders.isEmpty()
+ if (!unSeqPageReaders.isEmpty()
|| firstPageReader != null
|| mergeReader.hasNextTimeValuePair()) {
throw new IOException(
"all cached pages should be consumed first
cachedPageReaders.isEmpty() is "
- + cachedPageReaders.isEmpty()
+ + unSeqPageReaders.isEmpty()
+ " firstPageReader != null is "
+ (firstPageReader != null)
+ " mergeReader.hasNextTimeValuePair() = "
@@ -231,12 +232,12 @@ public class SeriesReader {
* overlapped chunks are consumed
*/
boolean hasNextChunk() throws IOException {
- if (!cachedPageReaders.isEmpty()
+ if (!unSeqPageReaders.isEmpty()
|| firstPageReader != null
|| mergeReader.hasNextTimeValuePair()) {
throw new IOException(
"all cached pages should be consumed first
cachedPageReaders.isEmpty() is "
- + cachedPageReaders.isEmpty()
+ + unSeqPageReaders.isEmpty()
+ " firstPageReader != null is "
+ (firstPageReader != null)
+ " mergeReader.hasNextTimeValuePair() = "
@@ -300,6 +301,7 @@ public class SeriesReader {
throws IOException {
List<ChunkMetadata> chunkMetadataList = FileLoaderUtils
.loadChunkMetadataList(timeSeriesMetadata);
+ chunkMetadataList.forEach(chunkMetadata ->
chunkMetadata.setSeq(timeSeriesMetadata.isSeq()));
// try to calculate the total number of chunk and time-value points in
chunk
if
(IoTDBDescriptor.getInstance().getConfig().isEnablePerformanceTracing()) {
QueryResourceManager queryResourceManager =
QueryResourceManager.getInstance();
@@ -381,8 +383,8 @@ public class SeriesReader {
/*
* first chunk metadata is already unpacked, consume cached pages
*/
- if (!cachedPageReaders.isEmpty()) {
- firstPageReader = cachedPageReaders.poll();
+ initFirstPageReader();
+ if (firstPageReader != null) {
long endpointTime =
orderUtils.getOverlapCheckTime(firstPageReader.getStatistics());
unpackAllOverlappedTsFilesToTimeSeriesMetadata(endpointTime);
unpackAllOverlappedTimeSeriesMetadataToCachedChunkMetadata(endpointTime, false);
@@ -390,10 +392,7 @@ public class SeriesReader {
}
}
- if (firstPageReader != null
- && !cachedPageReaders.isEmpty()
- && orderUtils
- .isOverlapped(firstPageReader.getStatistics(),
cachedPageReaders.peek().getStatistics())) {
+ if (firstPageOverlapped()) {
/*
* next page is overlapped, read overlapped data and cache it
*/
@@ -407,11 +406,11 @@ public class SeriesReader {
}
// make sure firstPageReader won't be null while cachedPageReaders has
more cached page readers
- while (firstPageReader == null && !cachedPageReaders.isEmpty()) {
- firstPageReader = cachedPageReaders.poll();
- if (!cachedPageReaders.isEmpty()
- && orderUtils.isOverlapped(firstPageReader.getStatistics(),
- cachedPageReaders.peek().getStatistics())) {
+ while (firstPageReader == null && (!seqPageReaders.isEmpty() ||
!unSeqPageReaders.isEmpty())) {
+
+ initFirstPageReader();
+
+ if (firstPageOverlapped()) {
/*
* next page is overlapped, read overlapped data and cache it
*/
@@ -427,6 +426,13 @@ public class SeriesReader {
return firstPageReader != null;
}
+ private boolean firstPageOverlapped() {
+ return firstPageReader != null && (!seqPageReaders.isEmpty() && orderUtils
+ .isOverlapped(firstPageReader.getStatistics(),
seqPageReaders.get(0).getStatistics())) || (
+ !unSeqPageReaders.isEmpty() &&
orderUtils.isOverlapped(firstPageReader.getStatistics(),
+ unSeqPageReaders.peek().getStatistics()));
+ }
+
private void unpackAllOverlappedChunkMetadataToCachedPageReaders(long
endpointTime, boolean init)
throws IOException {
while (!cachedChunkMetadata.isEmpty() &&
@@ -438,17 +444,31 @@ public class SeriesReader {
unpackOneChunkMetaData(firstChunkMetadata);
firstChunkMetadata = null;
}
- if (init && firstPageReader == null && !cachedPageReaders.isEmpty()) {
- firstPageReader = cachedPageReaders.poll();
+ if (init && firstPageReader == null && (!seqPageReaders.isEmpty() ||
!unSeqPageReaders
+ .isEmpty())) {
+ initFirstPageReader();
}
}
- private void unpackOneChunkMetaData(ChunkMetadata chunkMetaData) throws
IOException {
- FileLoaderUtils.loadPageReaderList(chunkMetaData, timeFilter)
- .forEach(
- pageReader ->
- cachedPageReaders.add(
- new VersionPageReader(chunkMetaData.getVersion(),
pageReader)));
+ private void unpackOneChunkMetaData(ChunkMetadata chunkMetaData)
+ throws IOException {
+ FileLoaderUtils.loadPageReaderList(chunkMetaData, timeFilter).forEach(
+ pageReader -> {
+ if (chunkMetaData.isSeq()) {
+ // addLast for asc; addFirst for desc
+ if (orderUtils.getAscending()) {
+ seqPageReaders
+ .add(new VersionPageReader(chunkMetaData.getVersion(),
pageReader, true));
+ } else {
+ seqPageReaders
+ .add(0, new VersionPageReader(chunkMetaData.getVersion(),
pageReader, true));
+ }
+
+ } else {
+ unSeqPageReaders
+ .add(new VersionPageReader(chunkMetaData.getVersion(),
pageReader, false));
+ }
+ });
}
/**
@@ -469,14 +489,16 @@ public class SeriesReader {
/*
* has a non-overlapped page in firstPageReader
*/
- if (mergeReader.hasNextTimeValuePair()) {
+ if (mergeReader.hasNextTimeValuePair()
+ && mergeReader.currentTimeValuePair().getTimestamp() <=
firstPageReader.getStatistics()
+ .getEndTime()) {
throw new IOException("overlapped data should be consumed first");
}
Statistics firstPageStatistics = firstPageReader.getStatistics();
- return !cachedPageReaders.isEmpty()
- && orderUtils.isOverlapped(firstPageStatistics,
cachedPageReaders.peek().getStatistics());
+ return !unSeqPageReaders.isEmpty()
+ && orderUtils.isOverlapped(firstPageStatistics,
unSeqPageReaders.peek().getStatistics());
}
Statistics currentPageStatistics() {
@@ -535,7 +557,7 @@ public class SeriesReader {
return true;
}
- tryToPutAllDirectlyOverlappedPageReadersIntoMergeReader();
+ tryToPutAllDirectlyOverlappedUnseqPageReadersIntoMergeReader();
while (true) {
@@ -543,7 +565,14 @@ public class SeriesReader {
cachedBatchData = BatchDataFactory.createBatchData(dataType);
long currentPageEndPointTime = mergeReader.getCurrentReadStopTime();
-
+ if (firstPageReader != null) {
+ currentPageEndPointTime = orderUtils
+ .getCurrentEndPoint(currentPageEndPointTime,
firstPageReader.getStatistics());
+ }
+ if (!seqPageReaders.isEmpty()) {
+ currentPageEndPointTime = orderUtils
+ .getCurrentEndPoint(currentPageEndPointTime,
seqPageReaders.get(0).getStatistics());
+ }
while (mergeReader.hasNextTimeValuePair()) {
/*
@@ -552,23 +581,55 @@ public class SeriesReader {
TimeValuePair timeValuePair = mergeReader.currentTimeValuePair();
if (orderUtils.isExcessEndpoint(timeValuePair.getTimestamp(),
currentPageEndPointTime)) {
- break;
+ if (cachedBatchData.hasCurrent() || firstPageReader != null ||
!seqPageReaders.isEmpty()) {
+ break;
+ }
+ currentPageEndPointTime = mergeReader.getCurrentReadStopTime();
}
unpackAllOverlappedTsFilesToTimeSeriesMetadata(timeValuePair.getTimestamp());
unpackAllOverlappedTimeSeriesMetadataToCachedChunkMetadata(
timeValuePair.getTimestamp(), false);
unpackAllOverlappedChunkMetadataToCachedPageReaders(timeValuePair.getTimestamp(),
false);
-
unpackAllOverlappedCachedPageReadersToMergeReader(timeValuePair.getTimestamp());
+
unpackAllOverlappedUnseqPageReadersToMergeReader(timeValuePair.getTimestamp());
+
+ if (firstPageReader != null) {
+ if ((orderUtils.getAscending() && timeValuePair.getTimestamp() >
firstPageReader
+ .getStatistics().getEndTime()) || (!orderUtils.getAscending()
+ && timeValuePair.getTimestamp() <
firstPageReader.getStatistics().getStartTime())) {
+ hasCachedNextOverlappedPage = cachedBatchData.hasCurrent();
+ return hasCachedNextOverlappedPage;
+ } else {
+ mergeReader
+
.addReader(firstPageReader.getAllSatisfiedPageData(orderUtils.getAscending())
+ .getBatchDataIterator(), firstPageReader.version,
+
orderUtils.getOverlapCheckTime(firstPageReader.getStatistics()));
+ firstPageReader = null;
+ }
+ }
+
+ if (!seqPageReaders.isEmpty()) {
+ if ((orderUtils.getAscending() && timeValuePair.getTimestamp() >
seqPageReaders.get(0)
+ .getStatistics().getEndTime()) || (!orderUtils.getAscending()
+ && timeValuePair.getTimestamp() <
seqPageReaders.get(0).getStatistics()
+ .getStartTime())) {
+ hasCachedNextOverlappedPage = cachedBatchData.hasCurrent();
+ return hasCachedNextOverlappedPage;
+ } else {
+ VersionPageReader pageReader = seqPageReaders.remove(0);
+
mergeReader.addReader(pageReader.getAllSatisfiedPageData(orderUtils.getAscending())
+ .getBatchDataIterator(), pageReader.version,
+ orderUtils.getOverlapCheckTime(pageReader.getStatistics()));
+ }
+ }
/*
* get the latest first point in mergeReader
*/
timeValuePair = mergeReader.nextTimeValuePair();
- if (valueFilter == null
- || valueFilter.satisfy(
- timeValuePair.getTimestamp(),
timeValuePair.getValue().getValue())) {
+ if (valueFilter == null || valueFilter
+ .satisfy(timeValuePair.getTimestamp(),
timeValuePair.getValue().getValue())) {
cachedBatchData.putAnObject(
timeValuePair.getTimestamp(),
timeValuePair.getValue().getValue());
}
@@ -579,6 +640,9 @@ public class SeriesReader {
*/
if (hasCachedNextOverlappedPage) {
return true;
+ // condition: seqPage.endTime < mergeReader.currentTime
+ } else if (mergeReader.hasNextTimeValuePair()) {
+ return false;
}
} else {
return false;
@@ -586,12 +650,12 @@ public class SeriesReader {
}
}
- private void tryToPutAllDirectlyOverlappedPageReadersIntoMergeReader()
throws IOException {
+ private void tryToPutAllDirectlyOverlappedUnseqPageReadersIntoMergeReader()
throws IOException {
/*
* no cached page readers
*/
- if (firstPageReader == null && cachedPageReaders.isEmpty()) {
+ if (firstPageReader == null && unSeqPageReaders.isEmpty() &&
seqPageReaders.isEmpty()) {
return;
}
@@ -599,7 +663,7 @@ public class SeriesReader {
* init firstPageReader
*/
if (firstPageReader == null) {
- firstPageReader = cachedPageReaders.poll();
+ initFirstPageReader();
}
long currentPageEndpointTime;
@@ -610,18 +674,33 @@ public class SeriesReader {
}
/*
- * put all currently directly overlapped page reader to merge reader
+ * put all currently directly overlapped unseq page reader to merge reader
*/
- unpackAllOverlappedCachedPageReadersToMergeReader(currentPageEndpointTime);
+ unpackAllOverlappedUnseqPageReadersToMergeReader(currentPageEndpointTime);
+ }
+
+ private void initFirstPageReader() {
+ if (!seqPageReaders.isEmpty() && !unSeqPageReaders.isEmpty()) {
+ if (orderUtils.isTakeSeqAsFirst(seqPageReaders.get(0).getStatistics(),
unSeqPageReaders.peek()
+ .getStatistics())) {
+ firstPageReader = seqPageReaders.remove(0);
+ } else {
+ firstPageReader = unSeqPageReaders.poll();
+ }
+ } else if (!seqPageReaders.isEmpty()) {
+ firstPageReader = seqPageReaders.remove(0);
+ } else if (!unSeqPageReaders.isEmpty()) {
+ firstPageReader = unSeqPageReaders.poll();
+ }
}
- private void unpackAllOverlappedCachedPageReadersToMergeReader(long
endpointTime)
+ private void unpackAllOverlappedUnseqPageReadersToMergeReader(long
endpointTime)
throws IOException {
- while (!cachedPageReaders.isEmpty()
- && orderUtils.isOverlapped(endpointTime,
cachedPageReaders.peek().data.getStatistics())) {
- putPageReaderToMergeReader(cachedPageReaders.poll());
+ while (!unSeqPageReaders.isEmpty()
+ && orderUtils.isOverlapped(endpointTime,
unSeqPageReaders.peek().data.getStatistics())) {
+ putPageReaderToMergeReader(unSeqPageReaders.poll());
}
- if (firstPageReader != null &&
+ if (firstPageReader != null && !firstPageReader.isSeq() &&
orderUtils.isOverlapped(endpointTime,
firstPageReader.getStatistics())) {
putPageReaderToMergeReader(firstPageReader);
firstPageReader = null;
@@ -668,6 +747,7 @@ public class SeriesReader {
orderUtils.getNextSeqFileResource(seqFileResource, true),
seriesPath, context,
getAnyFilter(), allSensors);
if (timeseriesMetadata != null) {
+ timeseriesMetadata.setSeq(true);
seqTimeSeriesMetadata.add(timeseriesMetadata);
}
}
@@ -681,6 +761,7 @@ public class SeriesReader {
unseqFileResource.remove(0), seriesPath, context,
getAnyFilter(), allSensors);
if (timeseriesMetadata != null) {
timeseriesMetadata.setModified(true);
+ timeseriesMetadata.setSeq(false);
unSeqTimeSeriesMetadata.add(timeseriesMetadata);
}
}
@@ -691,19 +772,14 @@ public class SeriesReader {
long endTime = -1L;
if (!seqTimeSeriesMetadata.isEmpty() && unSeqTimeSeriesMetadata.isEmpty())
{
// only has seq
-
endTime =
orderUtils.getOverlapCheckTime(seqTimeSeriesMetadata.get(0).getStatistics());
} else if (seqTimeSeriesMetadata.isEmpty() &&
!unSeqTimeSeriesMetadata.isEmpty()) {
// only has unseq
endTime =
orderUtils.getOverlapCheckTime(unSeqTimeSeriesMetadata.peek().getStatistics());
} else if (!seqTimeSeriesMetadata.isEmpty()) {
// has seq and unseq
- if
(orderUtils.getOverlapCheckTime(seqTimeSeriesMetadata.get(0).getStatistics())
- <=
orderUtils.getOverlapCheckTime(unSeqTimeSeriesMetadata.peek().getStatistics()))
{
- endTime =
orderUtils.getOverlapCheckTime(seqTimeSeriesMetadata.get(0).getStatistics());
- } else {
- endTime =
orderUtils.getOverlapCheckTime(unSeqTimeSeriesMetadata.peek().getStatistics());
- }
+ endTime =
orderUtils.getCurrentEndPoint(seqTimeSeriesMetadata.get(0).getStatistics(),
+ unSeqTimeSeriesMetadata.peek().getStatistics());
}
/*
@@ -724,8 +800,8 @@ public class SeriesReader {
firstTimeSeriesMetadata = unSeqTimeSeriesMetadata.poll();
} else if (!seqTimeSeriesMetadata.isEmpty()) {
// has seq and unseq
- if (orderUtils.getOrderTime(seqTimeSeriesMetadata.get(0).getStatistics())
- <=
orderUtils.getOrderTime(unSeqTimeSeriesMetadata.peek().getStatistics())) {
+ if
(orderUtils.isTakeSeqAsFirst(seqTimeSeriesMetadata.get(0).getStatistics(),
+ unSeqTimeSeriesMetadata.peek().getStatistics())) {
firstTimeSeriesMetadata = seqTimeSeriesMetadata.remove(0);
} else {
firstTimeSeriesMetadata = unSeqTimeSeriesMetadata.poll();
@@ -742,6 +818,7 @@ public class SeriesReader {
unseqFileResource.remove(0), seriesPath, context,
getAnyFilter(), allSensors);
if (timeseriesMetadata != null) {
timeseriesMetadata.setModified(true);
+ timeseriesMetadata.setSeq(false);
unSeqTimeSeriesMetadata.add(timeseriesMetadata);
}
}
@@ -753,6 +830,7 @@ public class SeriesReader {
orderUtils.getNextSeqFileResource(seqFileResource, true),
seriesPath, context,
getAnyFilter(), allSensors);
if (timeseriesMetadata != null) {
+ timeseriesMetadata.setSeq(true);
seqTimeSeriesMetadata.add(timeseriesMetadata);
}
}
@@ -775,9 +853,12 @@ public class SeriesReader {
protected long version;
protected IPageReader data;
- VersionPageReader(long version, IPageReader data) {
+ protected boolean isSeq;
+
+ VersionPageReader(long version, IPageReader data, boolean isSeq) {
this.version = version;
this.data = data;
+ this.isSeq = isSeq;
}
Statistics getStatistics() {
@@ -795,6 +876,10 @@ public class SeriesReader {
boolean isModified() {
return data.isModified();
}
+
+ public boolean isSeq() {
+ return isSeq;
+ }
}
@@ -816,8 +901,19 @@ public class SeriesReader {
<T> Comparator<T> comparingLong(ToLongFunction<? super T> keyExtractor);
+ long getCurrentEndPoint(long time, Statistics<? extends Object>
statistics);
+
+ long getCurrentEndPoint(Statistics<? extends Object> seqStatistics,
+ Statistics<? extends Object> unseqStatistics);
+
boolean isExcessEndpoint(long time, long endpointTime);
+ /**
+ * Return true if taking first page reader from seq readers
+ */
+ boolean isTakeSeqAsFirst(Statistics<? extends Object> seqStatistics,
+ Statistics<? extends Object> unseqStatistics);
+
boolean getAscending();
}
@@ -870,6 +966,16 @@ public class SeriesReader {
(c1, c2) -> Long.compare(keyExtractor.applyAsLong(c2),
keyExtractor.applyAsLong(c1));
}
+ @Override
+ public long getCurrentEndPoint(long time, Statistics<? extends Object>
statistics) {
+ return Math.max(time, statistics.getStartTime());
+ }
+
+ @Override
+ public long getCurrentEndPoint(Statistics<? extends Object> seqStatistics,
+ Statistics<? extends Object> unseqStatistics) {
+ return Math.max(seqStatistics.getStartTime(),
unseqStatistics.getStartTime());
+ }
@Override
public boolean isExcessEndpoint(long time, long endpointTime) {
@@ -877,6 +983,12 @@ public class SeriesReader {
}
@Override
+ public boolean isTakeSeqAsFirst(Statistics<? extends Object> seqStatistics,
+ Statistics<? extends Object> unseqStatistics) {
+ return seqStatistics.getEndTime() > unseqStatistics.getEndTime();
+ }
+
+ @Override
public boolean getAscending() {
return false;
}
@@ -932,11 +1044,28 @@ public class SeriesReader {
}
@Override
+ public long getCurrentEndPoint(long time, Statistics<? extends Object>
statistics) {
+ return Math.min(time, statistics.getEndTime());
+ }
+
+ @Override
+ public long getCurrentEndPoint(Statistics<? extends Object> seqStatistics,
+ Statistics<? extends Object> unseqStatistics) {
+ return Math.min(seqStatistics.getEndTime(),
unseqStatistics.getEndTime());
+ }
+
+ @Override
public boolean isExcessEndpoint(long time, long endpointTime) {
return time > endpointTime;
}
@Override
+ public boolean isTakeSeqAsFirst(Statistics<? extends Object> seqStatistics,
+ Statistics<? extends Object> unseqStatistics) {
+ return seqStatistics.getStartTime() < unseqStatistics.getStartTime();
+ }
+
+ @Override
public boolean getAscending() {
return true;
}
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
index da68c93..499bf57 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/ChunkMetadata.java
@@ -73,6 +73,9 @@ public class ChunkMetadata implements Accountable {
private static final int CHUNK_METADATA_FIXED_RAM_SIZE = 80;
+ // used for SeriesReader to indicate whether it is a seq/unseq timeseries
metadata
+ private boolean isSeq = true;
+
private ChunkMetadata() {
}
@@ -269,4 +272,12 @@ public class ChunkMetadata implements Accountable {
this.statistics.mergeStatistics(chunkMetadata.getStatistics());
this.ramSize = calculateRamSize();
}
+
+ public void setSeq(boolean seq) {
+ isSeq = seq;
+ }
+
+ public boolean isSeq() {
+ return isSeq;
+ }
}
\ No newline at end of file
diff --git
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
index 754d48b..ad8fc3f 100644
---
a/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
+++
b/tsfile/src/main/java/org/apache/iotdb/tsfile/file/metadata/TimeseriesMetadata.java
@@ -46,6 +46,9 @@ public class TimeseriesMetadata implements Accountable {
private long ramSize;
+ // used for SeriesReader to indicate whether it is a seq/unseq timeseries
metadata
+ private boolean isSeq = true;
+
public TimeseriesMetadata() {
}
@@ -158,4 +161,12 @@ public class TimeseriesMetadata implements Accountable {
public long getRamSize() {
return ramSize;
}
+
+ public void setSeq(boolean seq) {
+ isSeq = seq;
+ }
+
+ public boolean isSeq() {
+ return isSeq;
+ }
}