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:51 UTC

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

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();