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/03/23 02:02:42 UTC

[iotdb] branch xingtanzjr/distribution_planner updated: add fragment parallel planner

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

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


The following commit(s) were added to refs/heads/xingtanzjr/distribution_planner by this push:
     new 5f0aa7f  add fragment parallel planner
5f0aa7f is described below

commit 5f0aa7fe61ba7a0e80fb77a828a84cecdb34433e
Author: Jinrui.Zhang <xi...@gmail.com>
AuthorDate: Wed Mar 23 10:01:44 2022 +0800

    add fragment parallel planner
---
 .../iotdb/db/mpp/execution/QueryExecution.java     |  5 ++--
 .../mpp/sql/planner/plan/DistributedQueryPlan.java | 12 ++++++++++
 .../db/mpp/sql/planner/plan/FragmentInstance.java  |  2 +-
 ...QueryPlan.java => IFragmentParallelPlaner.java} | 27 +++++++++++-----------
 ...nce.java => SimpleFragmentParallelPlanner.java} | 22 ++++++++++--------
 5 files changed, 41 insertions(+), 27 deletions(-)

diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/execution/QueryExecution.java b/server/src/main/java/org/apache/iotdb/db/mpp/execution/QueryExecution.java
index ad2b176..f4c3bd6 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/execution/QueryExecution.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/execution/QueryExecution.java
@@ -44,7 +44,6 @@ public class QueryExecution {
   private Analysis analysis;
   private LogicalQueryPlan logicalPlan;
   private DistributedQueryPlan distributedPlan;
-  private List<PlanFragment> fragments;
   private List<FragmentInstance> fragmentInstances;
 
   public QueryExecution(MPPQueryContext context) {
@@ -83,7 +82,9 @@ public class QueryExecution {
 
   // Convert fragment to detailed instance
   // And for parallel-able fragment, clone it into several instances with different params.
-  public void planFragmentInstances() {}
+  public void planFragmentInstances() {
+
+  }
 
   /**
    * This method will be called by the request thread from client connection. This method will block
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/DistributedQueryPlan.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/DistributedQueryPlan.java
index bb0c299..c1eb086 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/DistributedQueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/DistributedQueryPlan.java
@@ -33,4 +33,16 @@ public class DistributedQueryPlan {
     this.rootSubPlan = rootSubPlan;
     this.fragments = fragments;
   }
+
+  public List<PlanFragment> getFragments() {
+    return fragments;
+  }
+
+  public SubPlan getRootSubPlan() {
+    return rootSubPlan;
+  }
+
+  public MPPQueryContext getContext() {
+    return context;
+  }
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/FragmentInstance.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/FragmentInstance.java
index 7674f4f..56fe111 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/FragmentInstance.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/FragmentInstance.java
@@ -25,7 +25,7 @@ public class FragmentInstance {
 
   // The reference of PlanFragment which this instance is generated from
   private PlanFragment fragment;
-
+  
   // We can add some more params for a specific FragmentInstance
   // So that we can make different FragmentInstance owns different data range.
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/DistributedQueryPlan.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/IFragmentParallelPlaner.java
similarity index 58%
copy from server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/DistributedQueryPlan.java
copy to server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/IFragmentParallelPlaner.java
index bb0c299..f86b967 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/DistributedQueryPlan.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/IFragmentParallelPlaner.java
@@ -7,7 +7,7 @@
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
@@ -16,21 +16,20 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.mpp.sql.planner.plan;
 
-import org.apache.iotdb.db.mpp.common.MPPQueryContext;
+package org.apache.iotdb.db.mpp.sql.planner.plan;
 
 import java.util.List;
 
-public class DistributedQueryPlan {
-  private MPPQueryContext context;
-  private SubPlan rootSubPlan;
-  private List<PlanFragment> fragments;
-
-  public DistributedQueryPlan(
-      MPPQueryContext context, SubPlan rootSubPlan, List<PlanFragment> fragments) {
-    this.context = context;
-    this.rootSubPlan = rootSubPlan;
-    this.fragments = fragments;
-  }
+/**
+ * The interface is used to transform one PlanFragment into one or more FragmentInstances which could run in parallel
+ */
+public interface IFragmentParallelPlaner {
+    /**
+     *
+     * @param root The root of SubPlan tree. The relation between each PlanFragment is necessary because sometimes we
+     *             need to change the source/sink for each FragmentInstance according to its upstream/downstream
+     * @return All the FragmentInstances which can run in parallel
+     */
+    List<FragmentInstance> parallelPlan(SubPlan root);
 }
diff --git a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/FragmentInstance.java b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/SimpleFragmentParallelPlanner.java
similarity index 65%
copy from server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/FragmentInstance.java
copy to server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/SimpleFragmentParallelPlanner.java
index 7674f4f..2277ca4 100644
--- a/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/FragmentInstance.java
+++ b/server/src/main/java/org/apache/iotdb/db/mpp/sql/planner/plan/SimpleFragmentParallelPlanner.java
@@ -7,7 +7,7 @@
  * "License"); you may not use this file except in compliance
  * with the License.  You may obtain a copy of the License at
  *
- *      http://www.apache.org/licenses/LICENSE-2.0
+ *     http://www.apache.org/licenses/LICENSE-2.0
  *
  * Unless required by applicable law or agreed to in writing,
  * software distributed under the License is distributed on an
@@ -16,16 +16,18 @@
  * specific language governing permissions and limitations
  * under the License.
  */
-package org.apache.iotdb.db.mpp.sql.planner.plan;
-
-import org.apache.iotdb.db.mpp.common.FragmentInstanceId;
 
-public class FragmentInstance {
-  private FragmentInstanceId id;
+package org.apache.iotdb.db.mpp.sql.planner.plan;
 
-  // The reference of PlanFragment which this instance is generated from
-  private PlanFragment fragment;
+import java.util.List;
 
-  // We can add some more params for a specific FragmentInstance
-  // So that we can make different FragmentInstance owns different data range.
+/**
+ * A simple implementation of IFragmentParallelPlaner.
+ * This planner will transform one PlanFragment into only one FragmentInstance.
+ */
+public class SimpleFragmentParallelPlanner implements IFragmentParallelPlaner{
+    @Override
+    public List<FragmentInstance> parallelPlan(SubPlan root) {
+        return null;
+    }
 }