This is an automated email from the ASF dual-hosted git repository.
xingtanzjr pushed a commit to branch xingtanzjr/mpp-query-basis
in repository https://gitbox.apache.org/repos/asf/iotdb.git
The following commit(s) were added to refs/heads/xingtanzjr/mpp-query-basis by
this push:
new 8dc0e76 complete basic design for QueryExecution
8dc0e76 is described below
commit 8dc0e765fd279e7982765d8b5d758de8d98334e9
Author: Jinrui.Zhang <[email protected]>
AuthorDate: Mon Mar 14 18:10:29 2022 +0800
complete basic design for QueryExecution
---
.../iotdb/db/query/mpp/exec/QueryExecution.java | 24 +++++++++++++++--
.../iotdb/db/query/mpp/exec/QueryScheduler.java | 30 ++++++++++++++++++++++
.../db/query/mpp/plan/DistributedQueryPlan.java | 16 ++++++++++++
.../db/query/mpp/plan/DistributionPlanner.java | 13 ++++++++++
.../iotdb/db/query/mpp/plan/FragmentInstance.java | 11 ++++++++
.../db/query/mpp/plan/FragmentInstanceId.java | 8 ++++++
.../iotdb/db/query/mpp/plan/PlanFragment.java | 13 ++++++++++
.../iotdb/db/query/mpp/plan/PlanFragmentId.java | 8 ++++++
8 files changed, 121 insertions(+), 2 deletions(-)
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/mpp/exec/QueryExecution.java
b/server/src/main/java/org/apache/iotdb/db/query/mpp/exec/QueryExecution.java
index 71b49b2..c1aab14 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/mpp/exec/QueryExecution.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/mpp/exec/QueryExecution.java
@@ -3,7 +3,7 @@ package org.apache.iotdb.db.query.mpp.exec;
import org.apache.iotdb.db.query.mpp.common.Analysis;
import org.apache.iotdb.db.query.mpp.common.QueryContext;
import org.apache.iotdb.db.query.mpp.common.QueryId;
-import org.apache.iotdb.db.query.mpp.plan.LogicalPlanner;
+import org.apache.iotdb.db.query.mpp.plan.*;
import org.apache.iotdb.db.query.mpp.plan.optimzation.PlanOptimizer;
import java.util.List;
@@ -23,23 +23,43 @@ public class QueryExecution {
private List<PlanOptimizer> planOptimizers;
private Analysis analysis;
+ private LogicalQueryPlan logicalPlan;
+ private DistributedQueryPlan distributedPlan;
+ private List<PlanFragment> fragments;
+ private List<FragmentInstance> fragmentInstances;
public QueryExecution(QueryContext context) {
this.context = context;
}
+ public void plan() {
+ analyze();
+ doLogicalPlan();
+ doDistributedPlan();
+ planFragmentInstances();
+ }
+
+ public void schedule() {
+ this.scheduler = new QueryScheduler(this.stateMachine,
this.fragmentInstances);
+ this.scheduler.start();
+ }
+
// Analyze the statement in QueryContext. Generate the analysis this query
need
public void analyze() {
// initialize the variable `analysis`
+
}
// Use LogicalPlanner to do the logical query plan and logical optimization
public void doLogicalPlan() {
-
+ LogicalPlanner planner = new LogicalPlanner(this.analysis,
this.context, this.planOptimizers);
+ this.logicalPlan = planner.plan();
}
// Generate the distributed plan and split it into fragments
public void doDistributedPlan() {
+ DistributionPlanner planner = new DistributionPlanner(this.analysis,
this.logicalPlan);
+ this.distributedPlan = planner.planFragments();
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/mpp/exec/QueryScheduler.java
b/server/src/main/java/org/apache/iotdb/db/query/mpp/exec/QueryScheduler.java
index e70c164..6c73244 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/mpp/exec/QueryScheduler.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/mpp/exec/QueryScheduler.java
@@ -1,8 +1,38 @@
package org.apache.iotdb.db.query.mpp.exec;
+import org.apache.iotdb.db.query.mpp.plan.FragmentInstance;
+
+import java.util.List;
+
/**
* QueryScheduler is used to dispatch the fragment instances of a query to
target nodes. And it will continue to
* collect and monitor the query execution before the query is finished.
+ *
+ * Later, we can add more control logic for a QueryExecution such as retry,
kill and so on by this scheduler.
*/
public class QueryScheduler {
+ //The stateMachine of the QueryExecution owned by this QueryScheduler
+ private QueryStateMachine stateMachine;
+
+ // The fragment instances which should be sent to corresponding Nodes.
+ private List<FragmentInstance> instances;
+
+ public QueryScheduler(QueryStateMachine stateMachine,
List<FragmentInstance> instances) {
+ this.stateMachine = stateMachine;
+ this.instances = instances;
+ }
+
+ public void start() {
+
+ }
+
+ // Send the instances to other nodes
+ private void sendFragmentInstances() {
+
+ }
+
+ // After sending, start to collect the states of these fragment instances
+ private void startMonitorInstances() {
+
+ }
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/DistributedQueryPlan.java
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/DistributedQueryPlan.java
new file mode 100644
index 0000000..2e3bdfc
--- /dev/null
+++
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/DistributedQueryPlan.java
@@ -0,0 +1,16 @@
+package org.apache.iotdb.db.query.mpp.plan;
+
+import org.apache.iotdb.db.query.mpp.common.QueryContext;
+import org.apache.iotdb.db.query.mpp.common.TsBlock;
+import org.apache.iotdb.db.query.mpp.plan.node.PlanNode;
+
+import java.util.List;
+
+public class DistributedQueryPlan {
+ private QueryContext context;
+ private PlanNode<TsBlock> rootNode;
+ private PlanFragment rootFragment;
+
+ //TODO: consider whether this field is necessary when do the implementation
+ private List<PlanFragment> fragments;
+}
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/DistributionPlanner.java
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/DistributionPlanner.java
index f269c35..bf75674 100644
---
a/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/DistributionPlanner.java
+++
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/DistributionPlanner.java
@@ -1,4 +1,17 @@
package org.apache.iotdb.db.query.mpp.plan;
+import org.apache.iotdb.db.query.mpp.common.Analysis;
+
public class DistributionPlanner {
+ private Analysis analysis;
+ private LogicalQueryPlan logicalPlan;
+
+ public DistributionPlanner(Analysis analysis, LogicalQueryPlan
logicalPlan) {
+ this.analysis = analysis;
+ this.logicalPlan = logicalPlan;
+ }
+
+ public DistributedQueryPlan planFragments() {
+ return null;
+ }
}
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/FragmentInstance.java
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/FragmentInstance.java
new file mode 100644
index 0000000..0d31f31
--- /dev/null
+++
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/FragmentInstance.java
@@ -0,0 +1,11 @@
+package org.apache.iotdb.db.query.mpp.plan;
+
+public class FragmentInstance {
+ private FragmentInstanceId id;
+
+ // 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/query/mpp/plan/FragmentInstanceId.java
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/FragmentInstanceId.java
new file mode 100644
index 0000000..090eb1a
--- /dev/null
+++
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/FragmentInstanceId.java
@@ -0,0 +1,8 @@
+package org.apache.iotdb.db.query.mpp.plan;
+
+public class FragmentInstanceId {
+ private String id;
+ public FragmentInstanceId(String id) {
+ this.id = id;
+ }
+}
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/PlanFragment.java
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/PlanFragment.java
new file mode 100644
index 0000000..2ac1592
--- /dev/null
+++ b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/PlanFragment.java
@@ -0,0 +1,13 @@
+package org.apache.iotdb.db.query.mpp.plan;
+
+import org.apache.iotdb.db.query.mpp.common.TsBlock;
+import org.apache.iotdb.db.query.mpp.plan.node.PlanNode;
+
+//TODO: consider whether it is necessary to make PlanFragment as a TreeNode
+/**
+ * PlanFragment contains a sub-query of distributed query.
+ */
+public class PlanFragment {
+ private PlanFragmentId id;
+ private PlanNode<TsBlock> root;
+}
diff --git
a/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/PlanFragmentId.java
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/PlanFragmentId.java
new file mode 100644
index 0000000..944b620
--- /dev/null
+++
b/server/src/main/java/org/apache/iotdb/db/query/mpp/plan/PlanFragmentId.java
@@ -0,0 +1,8 @@
+package org.apache.iotdb.db.query.mpp.plan;
+
+public class PlanFragmentId {
+ private String id;
+ public PlanFragmentId(String id) {
+ this.id = id;
+ }
+}