Jackie-Jiang commented on code in PR #13306:
URL: https://github.com/apache/pinot/pull/13306#discussion_r1629889683
##########
pinot-query-planner/src/main/java/org/apache/pinot/query/planner/logical/PinotLogicalQueryPlanner.java:
##########
@@ -51,70 +48,72 @@ private PinotLogicalQueryPlanner() {
* Converts a Calcite {@link RelRoot} into a Pinot {@link SubPlan}.
*/
public static SubPlan makePlan(RelRoot relRoot) {
- PlanNode rootNode = relNodeToStageNode(relRoot.rel);
- QueryPlanMetadata metadata =
- new
QueryPlanMetadata(RelToPlanNodeConverter.getTableNamesFromRelRoot(relRoot.rel),
relRoot.fields);
+ PlanNode rootNode = relNodeToPlanNode(relRoot.rel);
+ PlanFragment rootFragment = planNodeToPlanFragment(rootNode);
+ return new SubPlan(rootFragment,
+ new
SubPlanMetadata(RelToPlanNodeConverter.getTableNamesFromRelRoot(relRoot.rel),
relRoot.fields), List.of());
+ // TODO: Currently we don't support multiple sub-plans. Revisit the
following logic when we add the support.
// Fragment the stage tree into multiple SubPlans.
- SubPlanFragmenter.Context subPlanContext = new SubPlanFragmenter.Context();
- subPlanContext._subPlanIdToRootNodeMap.put(0, rootNode);
- subPlanContext._subPlanIdToMetadataMap.put(0, new
SubPlanMetadata(metadata.getTableNames(), metadata.getFields()));
- rootNode.visit(SubPlanFragmenter.INSTANCE, subPlanContext);
-
- Map<Integer, SubPlan> subPlanMap = new HashMap<>();
- for (Map.Entry<Integer, PlanNode> subPlanEntry :
subPlanContext._subPlanIdToRootNodeMap.entrySet()) {
- int subPlanId = subPlanEntry.getKey();
- PlanNode subPlanRoot = subPlanEntry.getValue();
-
- // Fragment the SubPlan into multiple PlanFragments.
- PlanFragmenter fragmenter = new PlanFragmenter();
- PlanFragmenter.Context fragmenterContext = fragmenter.createContext();
- subPlanRoot = subPlanRoot.visit(fragmenter, fragmenterContext);
- Int2ObjectOpenHashMap<PlanFragment> planFragmentMap =
fragmenter.getPlanFragmentMap();
- Int2ObjectOpenHashMap<IntList> childPlanFragmentIdsMap =
fragmenter.getChildPlanFragmentIdsMap();
-
- // Sub plan root needs to send final results back to the Broker
- // TODO: Should be SINGLETON (currently SINGLETON has to be local, so
use BROADCAST_DISTRIBUTED instead)
- MailboxSendNode subPlanRootSenderNode =
- new MailboxSendNode(subPlanRoot.getPlanFragmentId(),
subPlanRoot.getDataSchema(), 0,
- RelDistribution.Type.BROADCAST_DISTRIBUTED,
PinotRelExchangeType.getDefaultExchangeType(), null, null,
- false, false);
- subPlanRootSenderNode.addInput(subPlanRoot);
- PlanFragment planFragment1 = new PlanFragment(1, subPlanRootSenderNode,
new ArrayList<>());
- planFragmentMap.put(1, planFragment1);
- for (Int2ObjectMap.Entry<IntList> entry :
childPlanFragmentIdsMap.int2ObjectEntrySet()) {
- PlanFragment planFragment = planFragmentMap.get(entry.getIntKey());
- List<PlanFragment> childPlanFragments = planFragment.getChildren();
- IntListIterator childPlanFragmentIdIterator =
entry.getValue().iterator();
- while (childPlanFragmentIdIterator.hasNext()) {
-
childPlanFragments.add(planFragmentMap.get(childPlanFragmentIdIterator.nextInt()));
- }
- }
- MailboxReceiveNode rootReceiveNode =
- new MailboxReceiveNode(0, subPlanRoot.getDataSchema(),
subPlanRoot.getPlanFragmentId(),
- RelDistribution.Type.BROADCAST_DISTRIBUTED,
PinotRelExchangeType.getDefaultExchangeType(), null, null,
- false, false, subPlanRootSenderNode);
- PlanFragment rootPlanFragment = new PlanFragment(0, rootReceiveNode,
Collections.singletonList(planFragment1));
- SubPlan subPlan = new SubPlan(rootPlanFragment,
subPlanContext._subPlanIdToMetadataMap.get(0), new ArrayList<>());
- subPlanMap.put(subPlanId, subPlan);
- }
- for (Map.Entry<Integer, List<Integer>> subPlanToChildrenEntry :
subPlanContext._subPlanIdToChildrenMap.entrySet()) {
- int subPlanId = subPlanToChildrenEntry.getKey();
- List<Integer> subPlanChildren = subPlanToChildrenEntry.getValue();
- for (int subPlanChild : subPlanChildren) {
-
subPlanMap.get(subPlanId).getChildren().add(subPlanMap.get(subPlanChild));
- }
- }
- return subPlanMap.get(0);
+// SubPlanFragmenter.Context subPlanContext = new
SubPlanFragmenter.Context();
+// subPlanContext._subPlanIdToRootNodeMap.put(0, rootNode);
+// subPlanContext._subPlanIdToMetadataMap.put(0,
+// new
SubPlanMetadata(RelToPlanNodeConverter.getTableNamesFromRelRoot(relRoot.rel),
relRoot.fields));
+// rootNode.visit(SubPlanFragmenter.INSTANCE, subPlanContext);
+//
+// Map<Integer, SubPlan> subPlanMap = new HashMap<>();
+// for (Map.Entry<Integer, PlanNode> subPlanEntry :
subPlanContext._subPlanIdToRootNodeMap.entrySet()) {
+// SubPlan subPlan =
+// new SubPlan(planNodeToPlanFragment(subPlanEntry.getValue()),
subPlanContext._subPlanIdToMetadataMap.get(0),
+// new ArrayList<>());
+// subPlanMap.put(subPlanEntry.getKey(), subPlan);
+// }
+// for (Map.Entry<Integer, List<Integer>> subPlanToChildrenEntry :
subPlanContext._subPlanIdToChildrenMap.entrySet
+// ()) {
+// int subPlanId = subPlanToChildrenEntry.getKey();
+// List<Integer> subPlanChildren = subPlanToChildrenEntry.getValue();
+// for (int subPlanChild : subPlanChildren) {
+//
subPlanMap.get(subPlanId).getChildren().add(subPlanMap.get(subPlanChild));
+// }
+// }
+// return subPlanMap.get(0);
Review Comment:
Intentionally commented it out and added a TODO so that we can revisit in
the future
--
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.
To unsubscribe, e-mail: [email protected]
For queries about this service, please contact Infrastructure at:
[email protected]
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]