[ 
https://issues.apache.org/jira/browse/CALCITE-4501?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
 ]

Vladimir Ozerov resolved CALCITE-4501.
--------------------------------------
    Resolution: Won't Fix

Closing as "Won't fix" as there is no agreement on the correctness of the fix 
in the community.

> Clear costs in VolcanoPlanner when setting the new root
> -------------------------------------------------------
>
>                 Key: CALCITE-4501
>                 URL: https://issues.apache.org/jira/browse/CALCITE-4501
>             Project: Calcite
>          Issue Type: Improvement
>          Components: core
>    Affects Versions: 1.26.0
>            Reporter: Vladimir Ozerov
>            Assignee: Vladimir Ozerov
>            Priority: Minor
>          Time Spent: 20m
>  Remaining Estimate: 0h
>
> In production-grade systems, the optimization is typically performed in 
> several phases. The same instance of {{VolcanoPlanner}} tends to be re-used 
> between the phases. 
> In some sophisticated scenarios, we may want to alter the cost function 
> between phases. 
> For example, to adjust the weights of some operators depending on some 
> heuristics, or even switch to a completely different cost model. 
> One way to do that is to re-instantiate the cluster and the planner with the 
> new cost function. 
> However, it requires copying of the current rel tree, because its nodes still 
> point to the old cluster. This may negatively affect the performance. 
> The alternative approach could be to change the state of the cost factory. 
> However, it would not work for two reasons:
> # The cluster object has a reference to {{MetadataQuery}} with possibly 
> cached costs. This may lead to a mix of different cost models.
> # {{VolcanoPlanner}} caches zero and infinite costs in a final variable.
> In this issue, I propose to introduce two slight modifications to the 
> {{VolcanoPlanner}}:
> # Clear the metadata query from within {{setRoot}} method.
> # Make {{infCost}} and {{zeroCost}} non-final, and also re-initialize them in 
> the {{setRoot}} method.
> The {{setRoot}} method is convenient for these purposes because it is invoked 
> from the {{RuleSetProgram}}, so the desired cost cleanup will work with no 
> modifications to the application's code.
> Please let me know if you think that this change is not valid.



--
This message was sent by Atlassian Jira
(v8.3.4#803005)

Reply via email to