[ https://issues.apache.org/jira/browse/CALCITE-2927?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16794666#comment-16794666 ]
Danny Chan commented on CALCITE-2927: ------------------------------------- It is not Sum{computeImportanceOfChild()} it is sum of its importance to its parents, that is because the cost is compute accumulated, see [1]. [1] https://github.com/apache/calcite/blob/ffca956be03a99cd11e440d652b09674aaa727e6/core/src/main/java/org/apache/calcite/plan/volcano/RuleQueue.java#L571 > The javadoc and implement of RuleQueue.computeImportance() is inconsistent > -------------------------------------------------------------------------- > > Key: CALCITE-2927 > URL: https://issues.apache.org/jira/browse/CALCITE-2927 > Project: Calcite > Issue Type: Bug > Components: core > Affects Versions: 1.18.0 > Reporter: Meng Wang > Priority: Minor > Labels: pull-request-available > Fix For: next > > Time Spent: 10m > Remaining Estimate: 0h > > In the javadoc of _computeImportance()_, it shows the importance of node is > Sum{_computeImportanceOfChild()_}, but in the implementation it shows > Max{_computeImportanceOfChild()_}, this is inconsistent. The Javadoc has some > errors, it will cause some confusion. > > {code:java} > // /** > * Computes the <dfn>importance</dfn> of a node. Importance is defined as > * follows: > * > * <ul> > * <li>the root {@link RelSubset} has an importance of 1</li> > * <li>the importance of any other subset is the sum of its importance to > * its parents</li> > * <li>The importance of children is pro-rated according to the cost of the > * children. Consider a node which has a cost of 3, and children with costs > * of 2 and 5. The total cost is 10. If the node has an importance of .5, > * then the children will have importance of .1 and .25. The retains .15 > * importance points, to reflect the fact that work needs to be done on the > * node's algorithm.</li> > * </ul> > * > * <p>The formula for the importance <i>I</i> of node n is: > * > * <blockquote>I<sub>n</sub> = Sum<sub>parents p of n</sub>{I<sub>p</sub> . > * W <sub>n, p</sub>}</blockquote> > * > * <p>where W<sub>n, p</sub>, the weight of n within its parent p, is > * > * <blockquote>W<sub>n, p</sub> = Cost<sub>n</sub> / (SelfCost<sub>p</sub> + > * Cost<sub>n0</sub> + ... + Cost<sub>nk</sub>) > * </blockquote> > */ > double computeImportance(RelSubset subset) { > double importance; > if (subset == planner.root) { > // The root always has importance = 1 > importance = 1.0; > } else { > final RelMetadataQuery mq = subset.getCluster().getMetadataQuery(); > // The importance of a subset is the max of its importance to its > // parents > importance = 0.0; > for (RelSubset parent : subset.getParentSubsets(planner)) { > final double childImportance = > computeImportanceOfChild(mq, subset, parent); > importance = Math.max(importance, childImportance); > } > } > LOGGER.trace("Importance of [{}] is {}", subset, importance); > return importance; > } > {code} > > -- This message was sent by Atlassian JIRA (v7.6.3#76005)