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

Reply via email to