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

qiaojialin 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 3226bb7a74 fix aligned page reader bug (#6054)
3226bb7a74 is described below

commit 3226bb7a7426957bbbe1cbee38e2c43a4c54239b
Author: Jackie Tien <[email protected]>
AuthorDate: Sat May 28 10:19:26 2022 +0800

    fix aligned page reader bug (#6054)
---
 .../db/mpp/execution/operator/source/SeriesScanUtil.java |  3 +++
 .../db/query/reader/chunk/MemAlignedPageReader.java      | 16 +++++++++-------
 .../iotdb/db/query/reader/chunk/MemPageReader.java       |  4 ++++
 .../org/apache/iotdb/tsfile/read/reader/IPageReader.java |  4 ++++
 .../iotdb/tsfile/read/reader/page/AlignedPageReader.java | 13 +++++++------
 .../apache/iotdb/tsfile/read/reader/page/PageReader.java |  3 +++
 6 files changed, 30 insertions(+), 13 deletions(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
index 5bde17b84b..279f6be932 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanUtil.java
@@ -514,6 +514,9 @@ public class SeriesScanUtil {
     List<IPageReader> pageReaderList =
         FileLoaderUtils.loadPageReaderList(chunkMetaData, timeFilter);
 
+    // init TsBlockBuilder for each page reader
+    pageReaderList.forEach(p -> p.initTsBlockBuilder(getTsDataTypeList()));
+
     if (chunkMetaData.isSeq()) {
       if (orderUtils.getAscending()) {
         for (IPageReader iPageReader : pageReaderList) {
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemAlignedPageReader.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemAlignedPageReader.java
index 30162e7c82..a29d20bf12 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemAlignedPageReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemAlignedPageReader.java
@@ -19,7 +19,6 @@
 package org.apache.iotdb.db.query.reader.chunk;
 
 import org.apache.iotdb.tsfile.file.metadata.AlignedChunkMetadata;
-import org.apache.iotdb.tsfile.file.metadata.IChunkMetadata;
 import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.common.BatchData;
@@ -35,7 +34,7 @@ import org.apache.iotdb.tsfile.read.reader.IPageReader;
 import org.apache.iotdb.tsfile.utils.TsPrimitiveType;
 
 import java.io.IOException;
-import java.util.stream.Collectors;
+import java.util.List;
 
 public class MemAlignedPageReader implements IPageReader, IAlignedPageReader {
 
@@ -43,6 +42,8 @@ public class MemAlignedPageReader implements IPageReader, 
IAlignedPageReader {
   private final AlignedChunkMetadata chunkMetadata;
   private Filter valueFilter;
 
+  private TsBlockBuilder builder;
+
   public MemAlignedPageReader(TsBlock tsBlock, AlignedChunkMetadata 
chunkMetadata, Filter filter) {
     this.tsBlock = tsBlock;
     this.chunkMetadata = chunkMetadata;
@@ -87,11 +88,7 @@ public class MemAlignedPageReader implements IPageReader, 
IAlignedPageReader {
 
   @Override
   public TsBlock getAllSatisfiedData() {
-    TsBlockBuilder builder =
-        new TsBlockBuilder(
-            chunkMetadata.getValueChunkMetadataList().stream()
-                .map(IChunkMetadata::getDataType)
-                .collect(Collectors.toList()));
+    builder.reset();
 
     boolean[] satisfyInfo = new boolean[tsBlock.getPositionCount()];
 
@@ -158,4 +155,9 @@ public class MemAlignedPageReader implements IPageReader, 
IAlignedPageReader {
   public boolean isModified() {
     return false;
   }
+
+  @Override
+  public void initTsBlockBuilder(List<TSDataType> dataTypes) {
+    builder = new TsBlockBuilder(dataTypes);
+  }
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemPageReader.java
 
b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemPageReader.java
index 9d1d9822e1..0baf315eff 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemPageReader.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/query/reader/chunk/MemPageReader.java
@@ -35,6 +35,7 @@ import org.apache.iotdb.tsfile.utils.Binary;
 
 import java.io.IOException;
 import java.util.Collections;
+import java.util.List;
 
 public class MemPageReader implements IPageReader {
 
@@ -184,4 +185,7 @@ public class MemPageReader implements IPageReader {
   public boolean isModified() {
     return false;
   }
+
+  @Override
+  public void initTsBlockBuilder(List<TSDataType> dataTypes) {}
 }
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPageReader.java 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPageReader.java
index 3d7db3ec21..a68f4590b1 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPageReader.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/IPageReader.java
@@ -18,12 +18,14 @@
  */
 package org.apache.iotdb.tsfile.read.reader;
 
+import org.apache.iotdb.tsfile.file.metadata.enums.TSDataType;
 import org.apache.iotdb.tsfile.file.metadata.statistics.Statistics;
 import org.apache.iotdb.tsfile.read.common.BatchData;
 import org.apache.iotdb.tsfile.read.common.block.TsBlock;
 import org.apache.iotdb.tsfile.read.filter.basic.Filter;
 
 import java.io.IOException;
+import java.util.List;
 
 public interface IPageReader {
 
@@ -40,4 +42,6 @@ public interface IPageReader {
   void setFilter(Filter filter);
 
   boolean isModified();
+
+  void initTsBlockBuilder(List<TSDataType> dataTypes);
 }
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
index 5dc9a466a6..89893a781c 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/AlignedPageReader.java
@@ -37,7 +37,6 @@ import java.io.IOException;
 import java.nio.ByteBuffer;
 import java.util.ArrayList;
 import java.util.List;
-import java.util.stream.Collectors;
 
 public class AlignedPageReader implements IPageReader, IAlignedPageReader {
 
@@ -46,6 +45,7 @@ public class AlignedPageReader implements IPageReader, 
IAlignedPageReader {
   private final int valueCount;
   private Filter filter;
   private boolean isModified;
+  private TsBlockBuilder builder;
 
   public AlignedPageReader(
       PageHeader timePageHeader,
@@ -108,11 +108,7 @@ public class AlignedPageReader implements IPageReader, 
IAlignedPageReader {
   @Override
   public TsBlock getAllSatisfiedData() throws IOException {
     // TODO change from the row-based style to column-based style
-    TsBlockBuilder builder =
-        new TsBlockBuilder(
-            valuePageReaderList.stream()
-                .map(ValuePageReader::getDataType)
-                .collect(Collectors.toList()));
+    builder.reset();
     int timeIndex = -1;
     while (timePageReader.hasNextTime()) {
       long timestamp = timePageReader.nextTime();
@@ -185,4 +181,9 @@ public class AlignedPageReader implements IPageReader, 
IAlignedPageReader {
   public boolean isModified() {
     return isModified;
   }
+
+  @Override
+  public void initTsBlockBuilder(List<TSDataType> dataTypes) {
+    builder = new TsBlockBuilder(dataTypes);
+  }
 }
diff --git 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
index b54278451a..e1fce8ff65 100644
--- 
a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
+++ 
b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/reader/page/PageReader.java
@@ -265,6 +265,9 @@ public class PageReader implements IPageReader {
     return pageHeader.isModified();
   }
 
+  @Override
+  public void initTsBlockBuilder(List<TSDataType> dataTypes) {}
+
   protected boolean isDeleted(long timestamp) {
     while (deleteIntervalList != null && deleteCursor < 
deleteIntervalList.size()) {
       if (deleteIntervalList.get(deleteCursor).contains(timestamp)) {

Reply via email to