GitHub user paul-rogers opened a pull request:
https://github.com/apache/drill/pull/684
DRILL-5070: Code gen: create methods in fixed order to allow test
verification
A handy technique in testing is to compare generated code against a
"golden" copy that defines the expected results. However, at present, Drill
generates code using the method order returned by Class.getDeclaredMethods, but
this method makes no guarantee about the order of the methods. The order varies
from one run to the next. There is some evidence this link that order can vary
even within a single run, though a quick test was unable to reproduce this case.
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.
You can merge this pull request into a Git repository by running:
$ git pull https://github.com/paul-rogers/drill DRILL-5070
Alternatively you can review and apply these changes as the patch at:
https://github.com/apache/drill/pull/684.patch
To close this pull request, make a commit to your master/trunk branch
with (at least) the following in the commit message:
This closes #684
----
commit 63d9b5aaffb6982355c785efe26dfede81c0a66a
Author: Paul Rogers <[email protected]>
Date: 2016-11-28T05:51:02Z
DRILL-5070: Actual fix
The fix: order methods by name in the âsignatureâ so that generated
methods occur in the same order every time.
commit b25bbf5c25c23c196710af0e72b79cc97acff0e9
Author: Paul Rogers <[email protected]>
Date: 2016-11-28T05:52:41Z
DRILL-5070: Test cases
Modifies the existing ExpressionTest to capture generated code and
compare it to a âgoldenâ copy. Provides the mechanism to do the
comparison.
Before the fix, comparisons randomly fail due to random method order.
After the fix, the comparisons consistently work, showing that code is
generated in the same order each time.
----
---
If your project is set up for it, you can reply to this email and have your
reply appear on GitHub as well. If your project does not have this feature
enabled and wishes so, or if the feature is enabled but not working, please
contact infrastructure at [email protected] or file a JIRA ticket
with INFRA.
---