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

Paul Rogers updated DRILL-5386:
-------------------------------
    Fix Version/s:     (was: 1.11.0)

> Rationalize Drill's use of the Java assertions flag
> ---------------------------------------------------
>
>                 Key: DRILL-5386
>                 URL: https://issues.apache.org/jira/browse/DRILL-5386
>             Project: Apache Drill
>          Issue Type: Improvement
>    Affects Versions: 1.10.0
>            Reporter: Paul Rogers
>            Assignee: Paul Rogers
>
> Java provides a very handy debugging tool: assertions:
> {code}
> assert someInvariantCondition;
> {code}
> Basically, this says that {{someInvariantCondition}} should always hold. This 
> is a quick and easy way to validate invariants in the code.
> Assertions add overhead. To address this concern, assertions are a runtime 
> option, and are off by default. Assertions are enabled with the {{-ea}} JVM 
> command-line option. When off, the JVM does not evaluate the assertion, it is 
> as if the assertion were not even in the code.
> Although assertions are well-known tools, it seems that Drill went off into 
> two directions that compromise the usefulness of assertions.
> First, Drill uses the {{-ea}} flag to enable other, far more expensive, 
> debugging aids as well. When assertions are enabled, the allocator performs 
> very expensive checks and logging on each allocation and deallocation, vastly 
> slowing execution. Second, assertions control the fault injection mechanism.
> Second, since Drill has made assertions so expensive, they are not often 
> used. Instead, Drill uses Guava preconditions. But, these are always enabled 
> and entail one or more function calls: much more expensive at run time than 
> assertions.
> To address this state of affairs:
> * Detach allocator debugging from assertions. Use a config option to enable 
> the allocator debug features. This avoids the current huge overhead of 
> enabling assertions.
> * Similarly, use a config option to enable the fault injection mechanism so 
> faults can be injected when Drill runs at full performance.
> * Encourage the use of Java assertions liberally in new code to allow the JVM 
> to catch bugs so engineers don't have to do quite so much manual testing.
> * Over time, replace Guava preconditions with Java assertions to get Drill to 
> follow normal Java practices.



--
This message was sent by Atlassian JIRA
(v6.4.14#64029)

Reply via email to