DRILL-6477: Drillbit crashes with OOME (Heap) for a large WebUI query
authorKunal Khatua <kunal@apache.org>
Thu, 7 Jun 2018 20:32:00 +0000 (13:32 -0700)
committerTimothy Farkas <timothyfarkas@apache.org>
Wed, 13 Jun 2018 15:50:22 +0000 (08:50 -0700)
commit7be1e01a71245f7234fe347decf9efa4acc36e52
tree0f422577536afca9a1a169552b2a69f00ca3f81a
parent63d0251502ac7a3af5a761b1a70a958ca0be1ae1
DRILL-6477: Drillbit crashes with OOME (Heap) for a large WebUI query

For queries submitted through the WebUI and retrieving a large result-set, the Drillbit often hangs or crashes due to the (foreman) Drillbit running out of Heap memory.

This is because the Web client translates the result set into a massive object in the heap-space and tries to send that back to the browser. This results in the VM thread actively trying to perform GC if the memory is not sufficient.

The workaround is to have the active webConnection of the query periodically timeout to allow for checking the consumed heap-space. A level of 0.85 (i.e. 85%) is set as default threshold, crossing which, a query submitted through the REST API is marked and failed.
In addition, a user exception is thrown, indicting the cause of the query failing, along with alternative suggestions for re-executing the query.

closes #1309
exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java
exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryWrapper.java