drill-issues mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Paul Rogers (JIRA)" <j...@apache.org>
Subject [jira] [Created] (DRILL-5070) Code cache compares sources, but method order varies
Date Sat, 26 Nov 2016 06:16:58 GMT
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

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

View raw message