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

Haisheng Yuan resolved CALCITE-3981.
------------------------------------
    Resolution: Fixed

Fixed in 
[https://github.com/apache/calcite/commit/df5f4470e4257e8e7057664d4af3af3f37b6559b],
 thanks for the PR, [~botong]!

> Volcano.register should not return stale/merged subset
> ------------------------------------------------------
>
>                 Key: CALCITE-3981
>                 URL: https://issues.apache.org/jira/browse/CALCITE-3981
>             Project: Calcite
>          Issue Type: Bug
>            Reporter: Botong Huang
>            Priority: Major
>             Fix For: 1.24.0
>
>          Time Spent: 1.5h
>  Remaining Estimate: 0h
>
> When a subset is registered, registerImpl() and registerSubset() currently 
> simply returns the subset itself. The problem is that subset can become stale 
> when relSets get merged (for example in ensureRegistered() and 
> registerSubset() "merge(set, subset.set)"). As a result, a stale/merged 
> subset might be returned from registerImpl, and the newly registering subtree 
> might get registered recursively on top of the stale subset (see 
> AbstractRelNode.onRegister()). This is a leak because once a relSet/subset is 
> merged into others and becomes stale, it should not be used to connect new 
> relNodes. 
> With CALCITE-3755, subsets can now be directly matched by rules. This opens 
> another source of stale subset leak: (1) An active subset gets matched, the 
> RuleMatch gets queued in RuleQueue. (2) The subset becomes stale due to 
> relSet merge. (3) The rule match in (1) is popped from queue and fired. (4) 
> In OnMatch the rule gets the stale subset, builds new rels on top of it and 
> regsiter the new rels. In this case, the entire new rel subtree will be 
> registered on top of the stale subset as is.
> Rather than returning the registering subset itself, register should always 
> use canonize() to find and return the equivalent active subset instead.



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

Reply via email to