>From Hussain Towaileb <[email protected]>:

Hussain Towaileb has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18464 )


Change subject: Add compiler budget for data scan
......................................................................

Add compiler budget for data scan

Change-Id: I438e11f01b05f3ed1b8fa27468ac516f16bcdd92
---
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
M 
hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetMemoryRequirementsRule.java
M 
asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
6 files changed, 56 insertions(+), 0 deletions(-)



  git pull ssh://asterix-gerrit.ics.uci.edu:29418/asterixdb 
refs/changes/64/18464/1

diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
index cfe7ce8..33e87f0 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/CompilerProperties.java
@@ -62,6 +62,10 @@
                 INTEGER_BYTE_UNIT,
                 StorageUtil.getIntSizeInBytes(8, KILOBYTE),
                 "The memory budget (in bytes) for an external scan operator 
instance in a partition"),
+        COMPILER_DATASCANMEMORY(
+                INTEGER_BYTE_UNIT,
+                StorageUtil.getIntSizeInBytes(256, MEGABYTE),
+                "The memory budget (in bytes) for data scan scan operator 
instance in a partition"),
         COMPILER_FRAMESIZE(
                 INTEGER_BYTE_UNIT,
                 StorageUtil.getIntSizeInBytes(32, KILOBYTE),
@@ -202,6 +206,8 @@

     public static final String COMPILER_EXTERNALSCANMEMORY_KEY = 
Option.COMPILER_EXTERNALSCANMEMORY.ini();

+    public static final String COMPILER_DATASCANMEMORY_KEY = 
Option.COMPILER_DATASCANMEMORY.ini();
+
     public static final String COMPILER_BATCH_LOOKUP_KEY = 
Option.COMPILER_BATCH_LOOKUP.ini();

     public static final String COMPILER_CBO_KEY = Option.COMPILER_CBO.ini();
@@ -288,6 +294,10 @@
         return accessor.getInt(Option.COMPILER_EXTERNALSCANMEMORY);
     }

+    public int getDataScanMemorySize() {
+        return accessor.getInt(Option.COMPILER_DATASCANMEMORY);
+    }
+
     public boolean isBatchLookup() {
         return accessor.getBoolean(Option.COMPILER_BATCH_LOOKUP);
     }
diff --git 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
index c83b86e..b728390 100644
--- 
a/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
+++ 
b/asterixdb/asterix-common/src/main/java/org/apache/asterix/common/config/OptimizationConfUtil.java
@@ -80,6 +80,9 @@
                 CompilerProperties.COMPILER_MIN_MEMORY_ALLOCATION_KEY, 
compilerProperties.getMinMemoryAllocation());
         boolean arrayIndex = getBoolean(querySpecificConfig, 
CompilerProperties.COMPILER_ARRAYINDEX_KEY,
                 compilerProperties.isArrayIndex());
+        int dataScanBufferSize = getDataScanBufferSize(
+                (String) 
querySpecificConfig.get(CompilerProperties.COMPILER_DATASCANMEMORY_KEY),
+                compilerProperties.getDataScanMemorySize(), sourceLoc);
         int externalScanBufferSize = getExternalScanBufferSize(
                 (String) 
querySpecificConfig.get(CompilerProperties.COMPILER_EXTERNALSCANMEMORY_KEY),
                 compilerProperties.getExternalScanMemorySize(), sourceLoc);
@@ -112,6 +115,7 @@
         physOptConf.setSubplanNestedPushdown(subplanNestedPushdown);
         physOptConf.setMinMemoryAllocation(minMemoryAllocation);
         physOptConf.setArrayIndexEnabled(arrayIndex);
+        physOptConf.setDataScanBufferSize(dataScanBufferSize);
         physOptConf.setExternalScanBufferSize(externalScanBufferSize);
         physOptConf.setBatchLookup(batchLookup);
         physOptConf.setCBOMode(cbo);
@@ -133,6 +137,17 @@
         return physOptConf;
     }

+    private static int getDataScanBufferSize(String 
dataScanMemorySizeParameter,
+                                             int compilerDataScanMemorySize, 
SourceLocation sourceLoc) throws AsterixException {
+        IOptionType<Integer> intByteParser = OptionTypes.INTEGER_BYTE_UNIT;
+        try {
+            return dataScanMemorySizeParameter != null ? 
intByteParser.parse(dataScanMemorySizeParameter)
+                    : compilerDataScanMemorySize;
+        } catch (IllegalArgumentException e) {
+            throw AsterixException.create(ErrorCode.COMPILATION_ERROR, 
sourceLoc, e.getMessage());
+        }
+    }
+
     private static int getExternalScanBufferSize(String 
externalScanMemorySizeParameter,
             int compilerExternalScanMemorySize, SourceLocation sourceLoc) 
throws AsterixException {
         IOptionType<Integer> intByteParser = OptionTypes.INTEGER_BYTE_UNIT;
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java
index 03cb83b..33610eb 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/algebra/operators/physical/DataSourceScanPOperator.java
@@ -39,6 +39,7 @@
 import org.apache.hyracks.algebricks.core.algebra.properties.INodeDomain;
 import 
org.apache.hyracks.algebricks.core.algebra.properties.IPartitioningRequirementsCoordinator;
 import 
org.apache.hyracks.algebricks.core.algebra.properties.IPhysicalPropertiesVector;
+import 
org.apache.hyracks.algebricks.core.algebra.properties.LocalMemoryRequirements;
 import 
org.apache.hyracks.algebricks.core.algebra.properties.PhysicalRequirements;
 import 
org.apache.hyracks.algebricks.core.algebra.properties.StructuralPropertiesVector;
 import org.apache.hyracks.algebricks.core.jobgen.impl.JobGenContext;
@@ -48,6 +49,9 @@
 @SuppressWarnings("rawtypes")
 public class DataSourceScanPOperator extends AbstractScanPOperator {

+    // variable memory, min 1 frames
+    public static final int MIN_FRAME_LIMIT_FOR_DATA_SCAN = 1;
+
     private final IDataSource<?> dataSource;
     private Object implConfig;

@@ -131,6 +135,11 @@
     }

     @Override
+    public void createLocalMemoryRequirements(ILogicalOperator op) {
+        localMemoryRequirements = 
LocalMemoryRequirements.variableMemoryBudget(MIN_FRAME_LIMIT_FOR_DATA_SCAN);
+    }
+
+    @Override
     public String toString(boolean verbose) {
         String ss = super.toString(verbose);
         if (verbose) {
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
index 98c4223..b282a45 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/config/AlgebricksConfig.java
@@ -44,6 +44,8 @@
     public static final String QUERY_PLAN_SHAPE_DEFAULT = 
QUERY_PLAN_SHAPE_ZIGZAG;
     public static final int EXTERNAL_SCAN_BUFFER_SIZE =
             StorageUtil.getIntSizeInBytes(8, StorageUtil.StorageUnit.KILOBYTE);
+    public static final int DATA_SCAN_BUFFER_SIZE =
+            StorageUtil.getIntSizeInBytes(256, 
StorageUtil.StorageUnit.MEGABYTE);
     public static final boolean BATCH_LOOKUP_DEFAULT = true;
     public static final boolean COLUMN_FILTER_DEFAULT = true;
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
index d167153..be02ea2 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/rewriter/base/PhysicalOptimizationConfig.java
@@ -47,6 +47,7 @@
     private static final String MIN_MEMORY_ALLOCATION = 
"MIN_MEMORY_ALLOCATION";
     private static final String ARRAY_INDEX = "ARRAY_INDEX";
     private static final String EXTERNAL_SCAN_BUFFER_SIZE = 
"EXTERNAL_SCAN_BUFFER_SIZE";
+    private static final String DATA_SCAN_BUFFER_SIZE = 
"DATA_SCAN_BUFFER_SIZE";
     private static final String BATCH_LOOKUP = "BATCH_LOOKUP";
     private static final String CBO = "CBO";
     private static final String CBO_TEST = "CBO_TEST";
@@ -241,6 +242,11 @@
         setBoolean(ARRAY_INDEX, arrayIndex);
     }

+    public int getDataScanBufferSizeInFrames() {
+        int frameSize = getFrameSize();
+        return (int) (((long) getInt(DATA_SCAN_BUFFER_SIZE, 
AlgebricksConfig.DATA_SCAN_BUFFER_SIZE)) / frameSize);
+    }
+
     public int getExternalScanBufferSize() {
         return getInt(EXTERNAL_SCAN_BUFFER_SIZE, 
AlgebricksConfig.EXTERNAL_SCAN_BUFFER_SIZE);
     }
@@ -291,6 +297,10 @@
         setBoolean(BATCH_LOOKUP, batchedLookup);
     }

+    public void setDataScanBufferSize(int bufferSize) {
+        setInt(DATA_SCAN_BUFFER_SIZE, bufferSize);
+    }
+
     public void setExternalScanBufferSize(int bufferSize) {
         setInt(EXTERNAL_SCAN_BUFFER_SIZE, bufferSize);
     }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetMemoryRequirementsRule.java
 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetMemoryRequirementsRule.java
index 4e859e4..0ba58cd 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetMemoryRequirementsRule.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/SetMemoryRequirementsRule.java
@@ -318,6 +318,7 @@

         @Override
         public Void visitDataScanOperator(DataSourceScanOperator op, Void arg) 
throws AlgebricksException {
+            setOperatorMemoryBudget(op, 
physConfig.getDataScanBufferSizeInFrames());
             return null;
         }


--
To view, visit https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/18464
To unsubscribe, or for help writing mail filters, visit 
https://asterix-gerrit.ics.uci.edu/settings

Gerrit-Project: asterixdb
Gerrit-Branch: master
Gerrit-Change-Id: I438e11f01b05f3ed1b8fa27468ac516f16bcdd92
Gerrit-Change-Number: 18464
Gerrit-PatchSet: 1
Gerrit-Owner: Hussain Towaileb <[email protected]>
Gerrit-MessageType: newchange

Reply via email to