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;
   }

Reply via email to