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;
+ }
}