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

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

commit dd273f85aac68fe492d06883d4b0fbe5ced59dda
Author: Jinrui.Zhang <[email protected]>
AuthorDate: Tue Jun 7 17:09:08 2022 +0800

    Fix the issue that LastQuery lack MergeNode in some FI
---
 .../db/mpp/plan/planner/distribution/DistributionPlanContext.java   | 6 ++++++
 .../iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java      | 5 ++++-
 2 files changed, 10 insertions(+), 1 deletion(-)

diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/DistributionPlanContext.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/DistributionPlanContext.java
index 88f13eddf4..60a6a5f549 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/DistributionPlanContext.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/DistributionPlanContext.java
@@ -24,10 +24,12 @@ import org.apache.iotdb.db.mpp.common.MPPQueryContext;
 public class DistributionPlanContext {
   protected boolean isRoot;
   protected MPPQueryContext queryContext;
+  protected boolean forceAddParent;
 
   protected DistributionPlanContext(MPPQueryContext queryContext) {
     this.isRoot = true;
     this.queryContext = queryContext;
+    this.forceAddParent = false;
   }
 
   protected DistributionPlanContext copy() {
@@ -38,4 +40,8 @@ public class DistributionPlanContext {
     this.isRoot = isRoot;
     return this;
   }
+
+  protected void setForceAddParent(boolean forceAddParent) {
+    this.forceAddParent = forceAddParent;
+  }
 }
diff --git 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
index c646930fc1..676d93b3b4 100644
--- 
a/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
+++ 
b/server/src/main/java/org/apache/iotdb/db/mpp/plan/planner/distribution/SourceRewriter.java
@@ -372,6 +372,9 @@ public class SourceRewriter extends 
SimplePlanNodeRewriter<DistributionPlanConte
 
   @Override
   public PlanNode visitLastQueryMerge(LastQueryMergeNode node, 
DistributionPlanContext context) {
+    // For last query, we need to keep every FI's root node is 
LastQueryMergeNode. So we
+    // force every region group have a parent node even if there is only 1 
child for it.
+    context.setForceAddParent(true);
     return processRawMultiChildNode(node, context);
   }
 
@@ -419,7 +422,7 @@ public class SourceRewriter extends 
SimplePlanNodeRewriter<DistributionPlanConte
     final boolean[] addParent = {false};
     sourceGroup.forEach(
         (dataRegion, seriesScanNodes) -> {
-          if (seriesScanNodes.size() == 1) {
+          if (seriesScanNodes.size() == 1 && !context.forceAddParent) {
             root.addChild(seriesScanNodes.get(0));
           } else {
             if (!addParent[0]) {

Reply via email to