Repository: drill
Updated Branches:
  refs/heads/master 07dc46c11 -> bcc01c05a


DRILL-3045: Make planning time memory limit configurable


Project: http://git-wip-us.apache.org/repos/asf/drill/repo
Commit: http://git-wip-us.apache.org/repos/asf/drill/commit/dfa47da6
Tree: http://git-wip-us.apache.org/repos/asf/drill/tree/dfa47da6
Diff: http://git-wip-us.apache.org/repos/asf/drill/diff/dfa47da6

Branch: refs/heads/master
Commit: dfa47da669dc2455389151c4e4071d405030c7a9
Parents: 07dc46c
Author: Mehant Baid <meha...@gmail.com>
Authored: Fri Aug 28 11:23:54 2015 -0700
Committer: Mehant Baid <meha...@gmail.com>
Committed: Sun Aug 30 21:43:13 2015 -0700

----------------------------------------------------------------------
 .../org/apache/drill/exec/ops/QueryContext.java   |  7 ++-----
 .../exec/planner/physical/PlannerSettings.java    | 18 ++++++++++++++++++
 .../exec/server/options/SystemOptionManager.java  |  1 +
 3 files changed, 21 insertions(+), 5 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/drill/blob/dfa47da6/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java 
b/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java
index c3cd4e6..1cd67ac 100644
--- a/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java
+++ b/exec/java-exec/src/main/java/org/apache/drill/exec/ops/QueryContext.java
@@ -57,9 +57,6 @@ import org.apache.drill.exec.util.Utilities;
 public class QueryContext implements AutoCloseable, OptimizerRulesContext {
   private static final org.slf4j.Logger logger = 
org.slf4j.LoggerFactory.getLogger(QueryContext.class);
 
-  private static final int INITIAL_OFF_HEAP_ALLOCATION_IN_BYTES = 1024 * 1024;
-  private static final int MAX_OFF_HEAP_ALLOCATION_IN_BYTES = 256 * 1024 * 
1024;
-
   private final DrillbitContext drillbitContext;
   private final UserSession session;
   private final OptionManager queryOptions;
@@ -94,8 +91,8 @@ public class QueryContext implements AutoCloseable, 
OptimizerRulesContext {
     contextInformation = new ContextInformation(session.getCredentials(), 
queryContextInfo);
 
     try {
-      allocator = drillbitContext.getAllocator().getChildAllocator(null, 
INITIAL_OFF_HEAP_ALLOCATION_IN_BYTES,
-          MAX_OFF_HEAP_ALLOCATION_IN_BYTES, false);
+      allocator = drillbitContext.getAllocator().getChildAllocator(null, 
plannerSettings.getInitialPlanningMemorySize(),
+          plannerSettings.getPlanningMemoryLimit(), false);
     } catch (OutOfMemoryException e) {
       throw new DrillRuntimeException("Error creating off-heap allocator for 
planning context.",e);
     }

http://git-wip-us.apache.org/repos/asf/drill/blob/dfa47da6/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
index 3355018..0a05d08 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/planner/physical/PlannerSettings.java
@@ -19,6 +19,7 @@ package org.apache.drill.exec.planner.physical;
 
 import org.apache.drill.exec.ExecConstants;
 import org.apache.drill.exec.expr.fn.FunctionImplementationRegistry;
+import org.apache.drill.exec.ops.QueryContext;
 import org.apache.drill.exec.server.options.OptionManager;
 import org.apache.drill.exec.server.options.OptionValidator;
 import org.apache.drill.exec.server.options.TypeValidators.BooleanValidator;
@@ -38,6 +39,13 @@ public class PlannerSettings implements Context{
   public static final int MAX_BROADCAST_THRESHOLD = Integer.MAX_VALUE;
   public static final int DEFAULT_IDENTIFIER_MAX_LENGTH = 1024;
 
+  // initial off heap memory allocation (1M)
+  private static final long INITIAL_OFF_HEAP_ALLOCATION_IN_BYTES = 1024 * 1024;
+  // default off heap memory for planning (256M)
+  private static final long DEFAULT_MAX_OFF_HEAP_ALLOCATION_IN_BYTES = 256 * 
1024 * 1024;
+  // max off heap memory for planning (16G)
+  private static final long MAX_OFF_HEAP_ALLOCATION_IN_BYTES = 16l * 1024 * 
1024 * 1024;
+
   public static final OptionValidator CONSTANT_FOLDING = new 
BooleanValidator("planner.enable_constant_folding", true);
   public static final OptionValidator EXCHANGE = new 
BooleanValidator("planner.disable_exchanges", false);
   public static final OptionValidator HASHAGG = new 
BooleanValidator("planner.enable_hashagg", true);
@@ -65,6 +73,8 @@ public class PlannerSettings implements Context{
   public static final String ENABLE_DECIMAL_DATA_TYPE_KEY = 
"planner.enable_decimal_data_type";
   public static final OptionValidator ENABLE_DECIMAL_DATA_TYPE = new 
BooleanValidator(ENABLE_DECIMAL_DATA_TYPE_KEY, false);
   public static final OptionValidator HEP_JOIN_OPT = new 
BooleanValidator("planner.enable_hep_join_opt", true);
+  public static final OptionValidator PLANNER_MEMORY_LIMIT = new 
RangeLongValidator("planner.memory_limit",
+      INITIAL_OFF_HEAP_ALLOCATION_IN_BYTES, MAX_OFF_HEAP_ALLOCATION_IN_BYTES, 
DEFAULT_MAX_OFF_HEAP_ALLOCATION_IN_BYTES);
 
   public static final OptionValidator IDENTIFIER_MAX_LENGTH =
       new RangeLongValidator("planner.identifier_max_length", 128 /* A minimum 
length is needed because option names are identifiers themselves */,
@@ -188,6 +198,14 @@ public class PlannerSettings implements Context{
     return options.getOption(IDENTIFIER_MAX_LENGTH.getOptionName()).num_val;
   }
 
+  public long getPlanningMemoryLimit() {
+    return options.getOption(PLANNER_MEMORY_LIMIT.getOptionName()).num_val;
+  }
+
+  public static long getInitialPlanningMemorySize() {
+    return INITIAL_OFF_HEAP_ALLOCATION_IN_BYTES;
+  }
+
   @Override
   public <T> T unwrap(Class<T> clazz) {
     if(clazz == PlannerSettings.class){

http://git-wip-us.apache.org/repos/asf/drill/blob/dfa47da6/exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SystemOptionManager.java
----------------------------------------------------------------------
diff --git 
a/exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SystemOptionManager.java
 
b/exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SystemOptionManager.java
index 2d41740..12db4d3 100644
--- 
a/exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SystemOptionManager.java
+++ 
b/exec/java-exec/src/main/java/org/apache/drill/exec/server/options/SystemOptionManager.java
@@ -73,6 +73,7 @@ public class SystemOptionManager extends BaseOptionManager {
       PlannerSettings.PARTITION_SENDER_SET_THREADS,
       PlannerSettings.ENABLE_DECIMAL_DATA_TYPE,
       PlannerSettings.HEP_JOIN_OPT,
+      PlannerSettings.PLANNER_MEMORY_LIMIT,
       ExecConstants.CAST_TO_NULLABLE_NUMERIC_OPTION,
       ExecConstants.OUTPUT_FORMAT_VALIDATOR,
       ExecConstants.PARQUET_BLOCK_SIZE_VALIDATOR,

Reply via email to