This is an automated email from the ASF dual-hosted git repository.
jackietien pushed a commit to branch zy131
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/zy131 by this push:
new b5b18f81b1b add timeset in AlignedChunkReader
b5b18f81b1b is described below
commit b5b18f81b1bb83ac2ac7686a03ccbcf997b28cd2
Author: JackieTien97 <[email protected]>
AuthorDate: Thu Mar 14 17:06:03 2024 +0800
add timeset in AlignedChunkReader
---
.../fast/reader/CompactionAlignedChunkReader.java | 7 +++++-
.../ReadChunkAlignedSeriesCompactionExecutor.java | 4 +++-
.../read/reader/chunk/AlignedChunkReader.java | 7 +++++-
.../tsfile/read/reader/page/AlignedPageReader.java | 26 +++++++++++++---------
.../read/reader/AlignedPageReaderPushDownTest.java | 7 ++++--
5 files changed, 35 insertions(+), 16 deletions(-)
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/reader/CompactionAlignedChunkReader.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/reader/CompactionAlignedChunkReader.java
index 9b941717d8c..b2942e79955 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/reader/CompactionAlignedChunkReader.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/fast/reader/CompactionAlignedChunkReader.java
@@ -34,7 +34,9 @@ import
org.apache.iotdb.tsfile.read.reader.page.AlignedPageReader;
import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
import static
org.apache.iotdb.tsfile.read.reader.chunk.ChunkReader.uncompressPageData;
@@ -52,6 +54,8 @@ public class CompactionAlignedChunkReader {
// A list of deleted intervals
private final List<List<TimeRange>> valueDeleteIntervalList = new
ArrayList<>();
+ private final Set<Long> timeSet = new HashSet<>();
+
/**
* Constructor of ChunkReader without deserializing chunk into page. This is
used for fast
* compaction.
@@ -114,7 +118,8 @@ public class CompactionAlignedChunkReader {
uncompressedValuePageDatas,
valueTypes,
valueDecoders,
- null);
+ null,
+ timeSet);
alignedPageReader.initTsBlockBuilder(valueTypes);
alignedPageReader.setDeleteIntervalList(valueDeleteIntervalList);
return alignedPageReader.getLazyPointReader();
diff --git
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
index d03c90a85d9..230163227e5 100644
---
a/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
+++
b/iotdb-core/datanode/src/main/java/org/apache/iotdb/db/storageengine/dataregion/compaction/execute/utils/executor/readchunk/ReadChunkAlignedSeriesCompactionExecutor.java
@@ -58,6 +58,7 @@ import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
import java.util.HashMap;
+import java.util.HashSet;
import java.util.LinkedList;
import java.util.List;
import java.util.Map;
@@ -341,7 +342,8 @@ public class ReadChunkAlignedSeriesCompactionExecutor {
uncompressedValuePageDatas,
valueDataTypes,
valueDecoders,
- null);
+ null,
+ new HashSet<>());
alignedPageReader.setDeleteIntervalList(deleteIntervalLists);
long processedPointNum = 0;
IPointReader lazyPointReader = alignedPageReader.getLazyPointReader();
diff --git
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
index 373187ed6a7..c0648e1cb45 100644
---
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
+++
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/chunk/AlignedChunkReader.java
@@ -34,7 +34,9 @@ import java.io.IOException;
import java.io.Serializable;
import java.nio.ByteBuffer;
import java.util.ArrayList;
+import java.util.HashSet;
import java.util.List;
+import java.util.Set;
public class AlignedChunkReader extends AbstractChunkReader {
@@ -50,6 +52,8 @@ public class AlignedChunkReader extends AbstractChunkReader {
// deleted intervals of all the sub sensors
private final List<List<TimeRange>> valueDeleteIntervalsList = new
ArrayList<>();
+ private final Set<Long> timeSet = new HashSet<>();
+
@SuppressWarnings("unchecked")
public AlignedChunkReader(
Chunk timeChunk, List<Chunk> valueChunkList, long readStopTime, Filter
queryFilter)
@@ -237,7 +241,8 @@ public class AlignedChunkReader extends AbstractChunkReader
{
valuePageDataList,
valueDataTypeList,
valueDecoderList,
- queryFilter);
+ queryFilter,
+ timeSet);
alignedPageReader.setDeleteIntervalList(valueDeleteIntervalsList);
return alignedPageReader;
}
diff --git
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
index b32a64cfdb9..6afbf0c5342 100644
---
a/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
+++
b/iotdb-core/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
@@ -42,6 +42,7 @@ import java.util.Arrays;
import java.util.List;
import java.util.Objects;
import java.util.Optional;
+import java.util.Set;
import static
org.apache.iotdb.tsfile.read.reader.series.PaginationController.UNLIMITED_PAGINATION_CONTROLLER;
@@ -58,6 +59,8 @@ public class AlignedPageReader implements IPageReader {
private boolean isModified;
private TsBlockBuilder builder;
+ private final Set<Long> timeSet;
+
private static final int MASK = 0x80;
@SuppressWarnings("squid:S107")
@@ -69,7 +72,8 @@ public class AlignedPageReader implements IPageReader {
List<ByteBuffer> valuePageDataList,
List<TSDataType> valueDataTypeList,
List<Decoder> valueDecoderList,
- Filter globalTimeFilter) {
+ Filter globalTimeFilter,
+ Set<Long> timeSet) {
timePageReader = new TimePageReader(timePageHeader, timePageData,
timeDecoder);
isModified = timePageReader.isModified();
valuePageReaderList = new ArrayList<>(valuePageHeaderList.size());
@@ -89,6 +93,7 @@ public class AlignedPageReader implements IPageReader {
}
this.globalTimeFilter = globalTimeFilter;
this.valueCount = valuePageReaderList.size();
+ this.timeSet = timeSet;
}
@Override
@@ -169,19 +174,18 @@ public class AlignedPageReader implements IPageReader {
public TsBlock getAllSatisfiedData() throws IOException {
long[] timeBatch = timePageReader.getNextTimeBatch();
- if (allPageDataSatisfy()) {
- buildResultWithoutAnyFilterAndDelete(timeBatch);
- return builder.build();
- }
-
// if all the sub sensors' value are null in current row, just discard it
// if !filter.satisfy, discard this row
boolean[] keepCurrentRow = new boolean[timeBatch.length];
- boolean globalTimeFilterAllSatisfy = globalTimeFilterAllSatisfy();
- if (globalTimeFilterAllSatisfy) {
- Arrays.fill(keepCurrentRow, true);
- } else {
- updateKeepCurrentRowThroughGlobalTimeFilter(keepCurrentRow, timeBatch);
+ for (int i = 0, n = timeBatch.length; i < n; i++) {
+ keepCurrentRow[i] = timeSet.add(timeBatch[i]);
+ }
+ if (globalTimeFilter != null) {
+ for (int i = 0, n = timeBatch.length; i < n; i++) {
+ if (keepCurrentRow[i]) {
+ keepCurrentRow[i] = globalTimeFilter.satisfy(timeBatch[i], null);
+ }
+ }
}
boolean[][] isDeleted = null;
diff --git
a/iotdb-core/tsfile/src/test/java/org/apache/iotdb/tsfile/read/reader/AlignedPageReaderPushDownTest.java
b/iotdb-core/tsfile/src/test/java/org/apache/iotdb/tsfile/read/reader/AlignedPageReaderPushDownTest.java
index 6df11f08b3a..f25aa30b892 100644
---
a/iotdb-core/tsfile/src/test/java/org/apache/iotdb/tsfile/read/reader/AlignedPageReaderPushDownTest.java
+++
b/iotdb-core/tsfile/src/test/java/org/apache/iotdb/tsfile/read/reader/AlignedPageReaderPushDownTest.java
@@ -45,6 +45,7 @@ import java.io.IOException;
import java.nio.ByteBuffer;
import java.util.Arrays;
import java.util.Collections;
+import java.util.HashSet;
import java.util.List;
public class AlignedPageReaderPushDownTest {
@@ -137,7 +138,8 @@ public class AlignedPageReaderPushDownTest {
valuePageDataList,
valueDataTypeList,
valueDecoderList,
- globalTimeFilter);
+ globalTimeFilter,
+ new HashSet<>());
alignedPageReader.initTsBlockBuilder(valueDataTypeList);
return alignedPageReader;
}
@@ -163,7 +165,8 @@ public class AlignedPageReaderPushDownTest {
valuePageDataList,
valueDataTypeList,
valueDecoderList,
- globalTimeFilter);
+ globalTimeFilter,
+ new HashSet<>());
alignedPageReader.initTsBlockBuilder(valueDataTypeList);
return alignedPageReader;
}