[
https://issues.apache.org/jira/browse/DRILL-5070?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Paul Rogers updated DRILL-5070:
-------------------------------
Summary: Code gen: create methods in fixed order to allow test verification
(was: Code cache compares sources, but method order varies)
> Code gen: create methods in fixed order to allow test verification
> ------------------------------------------------------------------
>
> Key: DRILL-5070
> URL: https://issues.apache.org/jira/browse/DRILL-5070
> Project: Apache Drill
> Issue Type: Bug
> Affects Versions: 1.8.0
> Reporter: Paul Rogers
> Priority: Minor
>
> The Drill generated code cache compares the sources from two different
> generation events to detect duplicate code. Unfortunately, the code generator
> emits methods in the order returned by {{Class.getDeclaredMethods}}, but this
> method makes no guarantee about the order of the methods.
> This issue appeared when attempting to modify tests to capture generated code
> for comparison to future results. Even a simple generated case from
> {{ExpressionTest.testBasicExpression()}} that generates {{if(true) then 1
> else 0 end}} (all constants) produced methods in different orders on each
> test run.
> The fix is simple, in the {{SignatureHolder}} constructor, sort methods by
> name after retrieving them from the class. The sort ensures that method order
> is deterministic. Fortunately, the number of methods is small, so the sort
> step adds little cost.
> Without this fix, it is likely that the code cache holds many "copies" of the
> same code: equivalent code but with different method orders. After this fix,
> the cache should hold only one copy of each bit of equivalent code.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)