You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@drill.apache.org by bo...@apache.org on 2019/08/12 17:28:57 UTC
[drill] 02/04: DRILL-7338: REST API calls to Drill fail due to
insufficient heap memory
This is an automated email from the ASF dual-hosted git repository.
bohdan pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/drill.git
commit 2aa5b385de22ddcee66cdb763d654364791731e1
Author: Kunal Khatua <kk...@maprtech.com>
AuthorDate: Thu Aug 8 12:34:12 2019 -0700
DRILL-7338: REST API calls to Drill fail due to insufficient heap memory
This PR allows for the 85% threshold to be customizable with a value of 0 meant for disabling.
closes #1837
---
.../src/main/java/org/apache/drill/exec/ExecConstants.java | 2 ++
.../main/java/org/apache/drill/exec/server/rest/QueryWrapper.java | 7 ++++---
exec/java-exec/src/main/resources/drill-module.conf | 1 +
3 files changed, 7 insertions(+), 3 deletions(-)
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java b/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java
index 1815855..6f3f17d 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/ExecConstants.java
@@ -229,6 +229,8 @@ public final class ExecConstants {
public static final String HTTP_WEB_CLIENT_RESULTSET_AUTOLIMIT_CHECKED = "drill.exec.http.web.client.resultset.autolimit.checked";
public static final String HTTP_WEB_CLIENT_RESULTSET_AUTOLIMIT_ROWS = "drill.exec.http.web.client.resultset.autolimit.rows";
public static final String HTTP_WEB_CLIENT_RESULTSET_ROWS_PER_PAGE_VALUES = "drill.exec.http.web.client.resultset.rowsPerPageValues";
+ //Control Heap usage runaway
+ public static final String HTTP_MEMORY_HEAP_FAILURE_THRESHOLD = "drill.exec.http.memory.heap.failure.threshold";
//Customize filters in options
public static final String HTTP_WEB_OPTIONS_FILTERS = "drill.exec.http.web.options.filters";
public static final String SYS_STORE_PROVIDER_CLASS = "drill.exec.sys.store.provider.class";
diff --git a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryWrapper.java b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryWrapper.java
index 43dd737..5a4ce80 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryWrapper.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/server/rest/QueryWrapper.java
@@ -43,8 +43,6 @@ import java.util.concurrent.TimeUnit;
@XmlRootElement
public class QueryWrapper {
private static final org.slf4j.Logger logger = org.slf4j.LoggerFactory.getLogger(QueryWrapper.class);
- // Heap usage threshold/trigger to provide resiliency on web server for queries submitted via HTTP
- private static final double HEAP_MEMORY_FAILURE_THRESHOLD = 0.85;
private final String query;
private final String queryType;
@@ -87,6 +85,9 @@ public class QueryWrapper {
}
webUserConnection.setAutoLimitRowCount(maxRows);
+ // Heap usage threshold/trigger to provide resiliency on web server for queries submitted via HTTP
+ double memoryFailureThreshold = workManager.getContext().getConfig().getDouble(ExecConstants.HTTP_MEMORY_HEAP_FAILURE_THRESHOLD);
+
// Submit user query to Drillbit work queue.
final QueryId queryId = workManager.getUserWorker().submitWork(webUserConnection, runQuery);
@@ -101,7 +102,7 @@ public class QueryWrapper {
isComplete = webUserConnection.await(TimeUnit.SECONDS.toMillis(1)); //periodically timeout 1 sec to check heap
} catch (InterruptedException e) {}
usagePercent = getHeapUsage();
- if (usagePercent > HEAP_MEMORY_FAILURE_THRESHOLD) {
+ if (memoryFailureThreshold > 0 && usagePercent > memoryFailureThreshold) {
nearlyOutOfHeapSpace = true;
}
} while (!isComplete && !nearlyOutOfHeapSpace);
diff --git a/exec/java-exec/src/main/resources/drill-module.conf b/exec/java-exec/src/main/resources/drill-module.conf
index dbd73ce..bb8f292 100644
--- a/exec/java-exec/src/main/resources/drill-module.conf
+++ b/exec/java-exec/src/main/resources/drill-module.conf
@@ -168,6 +168,7 @@ drill.exec: {
maximum: 9223372036854775807
}
},
+ memory.heap.failure.threshold: 0.85,
web.client.resultset: {
autolimit {
checked: false,