You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by ja...@apache.org on 2023/03/08 11:48:34 UTC

[iotdb] 01/02: Avoid rebuild TsBlock again in SeriesScanOperator

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

jackietien pushed a commit to branch SeriesScanOperatorImprove
in repository https://gitbox.apache.org/repos/asf/iotdb.git

commit 61ee15f3047eb8ee0155936308fad77336e5d74e
Author: JackieTien97 <ja...@gmail.com>
AuthorDate: Wed Mar 8 18:01:23 2023 +0800

    Avoid rebuild TsBlock again in SeriesScanOperator
---
 .../db/mpp/execution/operator/source/SeriesScanOperator.java  | 11 +++++++++--
 .../apache/iotdb/tsfile/read/common/block/TsBlockBuilder.java |  2 +-
 2 files changed, 10 insertions(+), 3 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanOperator.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanOperator.java
index 4032dea5e2..730b3ff1aa 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanOperator.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/operator/source/SeriesScanOperator.java
@@ -40,6 +40,7 @@ import java.util.concurrent.TimeUnit;
 
 import static com.google.common.base.Preconditions.checkState;
 import static java.util.Objects.requireNonNull;
+import static org.apache.iotdb.tsfile.read.common.block.TsBlockBuilder.MAX_LINE_NUMBER;
 
 public class SeriesScanOperator extends AbstractDataSourceOperator {
 
@@ -173,9 +174,11 @@ public class SeriesScanOperator extends AbstractDataSourceOperator {
         }
         break;
 
-      } while (System.nanoTime() - start < maxRuntime && !builder.isFull());
+      } while (System.nanoTime() - start < maxRuntime
+          && retainedTsBlock == null
+          && !builder.isFull());
 
-      finished = builder.isEmpty();
+      finished = (retainedTsBlock == null && builder.isEmpty());
 
       return !finished;
     } catch (IOException e) {
@@ -234,6 +237,10 @@ public class SeriesScanOperator extends AbstractDataSourceOperator {
   }
 
   private void appendToBuilder(TsBlock tsBlock) {
+    if (builder.isEmpty() && tsBlock.getPositionCount() >= MAX_LINE_NUMBER) {
+      retainedTsBlock = tsBlock;
+      return;
+    }
     TimeColumnBuilder timeColumnBuilder = builder.getTimeColumnBuilder();
     TimeColumn timeColumn = tsBlock.getTimeColumn();
     ColumnBuilder columnBuilder = builder.getColumnBuilder(0);
diff --git a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlockBuilder.java b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlockBuilder.java
index c309835a09..4560f54e31 100644
--- a/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlockBuilder.java
+++ b/tsfile/src/main/java/org/apache/iotdb/tsfile/read/common/block/TsBlockBuilder.java
@@ -46,7 +46,7 @@ public class TsBlockBuilder {
   // This could be any other small number.
   private static final int DEFAULT_INITIAL_EXPECTED_ENTRIES = 8;
 
-  private static final int MAX_LINE_NUMBER =
+  public static final int MAX_LINE_NUMBER =
       TSFileDescriptor.getInstance().getConfig().getMaxTsBlockLineNumber();
 
   private TimeColumnBuilder timeColumnBuilder;