Paul Rogers created DRILL-5070:
----------------------------------
Summary: Code cache compares sources, but method order varies
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)