You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@iotdb.apache.org by xi...@apache.org on 2022/05/03 08:03:50 UTC

[iotdb] branch xingtanzjr/fix_empty_partition created (now 5dbaf7f4ac)

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

xingtanzjr pushed a change to branch xingtanzjr/fix_empty_partition
in repository https://gitbox.apache.org/repos/asf/iotdb.git


      at 5dbaf7f4ac handle the situation that there is no data/schema partion for query

This branch includes the following new commits:

     new 5dbaf7f4ac handle the situation that there is no data/schema partion for query

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.



[iotdb] 01/01: handle the situation that there is no data/schema partion for query

Posted by xi...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit 5dbaf7f4ac0dfa862fe6b671ff8c3c920ba7a0b1
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Tue May 3 16:03:37 2022 +0800

    handle the situation that there is no data/schema partion for query
---
 .../java/org/apache/iotdb/commons/partition/DataPartition.java |  5 +++++
 .../java/org/apache/iotdb/commons/partition/Partition.java     |  2 ++
 .../org/apache/iotdb/commons/partition/SchemaPartition.java    |  5 +++++
 .../java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java    |  5 +++++
 .../org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java | 10 +++++++++-
 5 files changed, 26 insertions(+), 1 deletion(-)

diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/partition/DataPartition.java b/node-commons/src/main/java/org/apache/iotdb/commons/partition/DataPartition.java
index df98015fb6..a46b8bc246 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/partition/DataPartition.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/partition/DataPartition.java
@@ -41,6 +41,11 @@ public class DataPartition extends Partition {
     super(seriesSlotExecutorName, seriesPartitionSlotNum);
   }
 
+  @Override
+  public boolean isEmpty() {
+    return dataPartitionMap == null || dataPartitionMap.isEmpty();
+  }
+
   public DataPartition(
       Map<String, Map<TSeriesPartitionSlot, Map<TTimePartitionSlot, List<TRegionReplicaSet>>>>
           dataPartitionMap,
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/partition/Partition.java b/node-commons/src/main/java/org/apache/iotdb/commons/partition/Partition.java
index 839c330f90..426a9e6f50 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/partition/Partition.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/partition/Partition.java
@@ -38,4 +38,6 @@ public abstract class Partition {
   protected TSeriesPartitionSlot calculateDeviceGroupId(String deviceName) {
     return executor.getSeriesPartitionSlot(deviceName);
   }
+
+  public abstract boolean isEmpty();
 }
diff --git a/node-commons/src/main/java/org/apache/iotdb/commons/partition/SchemaPartition.java b/node-commons/src/main/java/org/apache/iotdb/commons/partition/SchemaPartition.java
index 586c380e54..9149d8139c 100644
--- a/node-commons/src/main/java/org/apache/iotdb/commons/partition/SchemaPartition.java
+++ b/node-commons/src/main/java/org/apache/iotdb/commons/partition/SchemaPartition.java
@@ -36,6 +36,11 @@ public class SchemaPartition extends Partition {
     super(seriesSlotExecutorName, seriesPartitionSlotNum);
   }
 
+  @Override
+  public boolean isEmpty() {
+    return schemaPartitionMap == null || schemaPartitionMap.isEmpty();
+  }
+
   public SchemaPartition(
       Map<String, Map<TSeriesPartitionSlot, TRegionReplicaSet>> schemaPartitionMap,
       String seriesSlotExecutorName,
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
index efdc5d11f0..d2837312cb 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/analyze/Analysis.java
@@ -120,4 +120,9 @@ public class Analysis {
   public void setTypeProvider(TypeProvider typeProvider) {
     this.typeProvider = typeProvider;
   }
+
+  public boolean hasDataSource() {
+    return (dataPartition != null && !dataPartition.isEmpty())
+        || (schemaPartition != null && !schemaPartition.isEmpty());
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
index 776a75d58e..8b77c4ef1f 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/plan/execution/QueryExecution.java
@@ -135,6 +135,10 @@ public class QueryExecution implements IQueryExecution {
   }
 
   public void start() {
+    if (skipExecute()) {
+      stateMachine.transitionToFinished();
+      return;
+    }
     doLogicalPlan();
     doDistributedPlan();
     if (context.getQueryType() == QueryType.READ) {
@@ -143,6 +147,10 @@ public class QueryExecution implements IQueryExecution {
     schedule();
   }
 
+  private boolean skipExecute() {
+    return context.getQueryType() == QueryType.READ && !analysis.hasDataSource();
+  }
+
   // Analyze the statement in QueryContext. Generate the analysis this query need
   private static Analysis analyze(
       Statement statement,
@@ -223,7 +231,7 @@ public class QueryExecution implements IQueryExecution {
   @Override
   public TsBlock getBatchResult() {
     try {
-      if (resultHandle.isAborted() || resultHandle.isFinished()) {
+      if (resultHandle == null || resultHandle.isAborted() || resultHandle.isFinished()) {
         return null;
       }
       ListenableFuture<Void> blocked = resultHandle.isBlocked();