>From Ian Maxon <[email protected]>:

Ian Maxon has uploaded this change for review. ( 
https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17962 )


Change subject: [ASTERIXDB-3313][COMP] Defuse profile when not profiling
......................................................................

[ASTERIXDB-3313][COMP] Defuse profile when not profiling

- user model changes: no
- storage format changes: no
- interface changes: no

Details:
The logical2physical map is time consuming to produce, so it should
not be computed unless it's needed for a profile. Likewise keeping
the last plan in memory is wasteful and useless unless a profile is
needed. Lastly in the pipeline assembler, look at the profile flag
first instead of the instanceof check to save time.

Change-Id: Ia9a84eedbcb33c29f03155a8605bb82af372f1f3
---
M 
asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
M 
hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
M 
hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/PlanCompiler.java
M 
hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/ICompiler.java
M 
asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
M 
hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java
8 files changed, 81 insertions(+), 26 deletions(-)



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

diff --git 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
index 93f59908..23c8a4a 100644
--- 
a/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
+++ 
b/asterixdb/asterix-algebra/src/main/java/org/apache/asterix/translator/IStatementExecutor.java
@@ -286,18 +286,12 @@
     /**
      * rewrites and compiles query into a hyracks job specifications
      *
-     * @param clusterInfoCollector
-     *            The cluster info collector
-     * @param metadataProvider
-     *            The metadataProvider used to access metadata and build 
runtimes
-     * @param query
-     *            The query to be compiled
-     * @param dmlStatement
-     *            The data modification statement when the query results in a 
modification to a dataset
-     * @param statementParameters
-     *            Statement parameters
-     * @param requestParameters
-     *            The request parameters
+     * @param clusterInfoCollector The cluster info collector
+     * @param metadataProvider     The metadataProvider used to access 
metadata and build runtimes
+     * @param query                The query to be compiled
+     * @param dmlStatement         The data modification statement when the 
query results in a modification to a dataset
+     * @param statementParameters  Statement parameters
+     * @param requestParameters    The request parameters
      * @return the compiled {@code JobSpecification}
      * @throws AsterixException
      * @throws RemoteException
@@ -305,8 +299,8 @@
      * @throws ACIDException
      */
     JobSpecification rewriteCompileQuery(IClusterInfoCollector 
clusterInfoCollector, MetadataProvider metadataProvider,
-            Query query, ICompiledDmlStatement dmlStatement, Map<String, 
IAObject> statementParameters,
-            IRequestParameters requestParameters) throws RemoteException, 
AlgebricksException, ACIDException;
+                                         Query query, ICompiledDmlStatement 
dmlStatement, Map<String, IAObject> statementParameters,
+                                         IRequestParameters requestParameters) 
throws RemoteException, AlgebricksException, ACIDException;

     /**
      * returns the active dataverse for an entity or a statement
diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
index 3c0b01d..552ab17 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/api/common/APIFramework.java
@@ -25,6 +25,7 @@
 import java.util.Arrays;
 import java.util.Collection;
 import java.util.Collections;
+import java.util.EnumSet;
 import java.util.HashSet;
 import java.util.List;
 import java.util.Map;
@@ -107,6 +108,7 @@
 import org.apache.hyracks.api.exceptions.HyracksException;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.api.exceptions.SourceLocation;
+import org.apache.hyracks.api.job.JobFlag;
 import org.apache.hyracks.api.job.JobId;
 import org.apache.hyracks.api.job.JobSpecification;
 import org.apache.hyracks.api.job.resource.IClusterCapacity;
@@ -202,9 +204,9 @@
     }

     public JobSpecification compileQuery(IClusterInfoCollector 
clusterInfoCollector, MetadataProvider metadataProvider,
-            Query query, int varCounter, String outputDatasetName, 
SessionOutput output,
-            ICompiledDmlStatement statement, Map<VarIdentifier, IAObject> 
externalVars, IResponsePrinter printer,
-            IWarningCollector warningCollector, IRequestParameters 
requestParameters)
+                                         Query query, int varCounter, String 
outputDatasetName, SessionOutput output,
+                                         ICompiledDmlStatement statement, 
Map<VarIdentifier, IAObject> externalVars, IResponsePrinter printer,
+                                         IWarningCollector warningCollector, 
IRequestParameters requestParameters, EnumSet<JobFlag> runtimeFlags)
             throws AlgebricksException, ACIDException {

         // establish facts
@@ -325,7 +327,7 @@

         JobEventListenerFactory jobEventListenerFactory =
                 new JobEventListenerFactory(txnId, 
metadataProvider.isWriteTransaction());
-        JobSpecification spec = compiler.createJob(ccAppContext, 
jobEventListenerFactory);
+        JobSpecification spec = compiler.createJob(ccAppContext, 
jobEventListenerFactory, runtimeFlags);

         if (isQuery) {
             if (!compiler.skipJobCapacityAssignment()) {
@@ -347,7 +349,9 @@
             if (isQuery || isLoad) {
                 generateOptimizedLogicalPlan(plan, 
spec.getLogical2PhysicalMap(), output.config().getPlanFormat(),
                         cboMode);
-                lastPlan = new PlanInfo(plan, spec.getLogical2PhysicalMap(), 
cboMode, output.config().getPlanFormat());
+                if(runtimeFlags.contains(JobFlag.PROFILE_RUNTIME)){
+                    lastPlan = new PlanInfo(plan, 
spec.getLogical2PhysicalMap(), cboMode, output.config().getPlanFormat());
+                }
             }
         }

diff --git 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
index 8b635a2..10d9c25 100644
--- 
a/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
+++ 
b/asterixdb/asterix-app/src/main/java/org/apache/asterix/app/translator/QueryTranslator.java
@@ -3663,7 +3663,7 @@
                     loadStmt.getDatasetName(), loadStmt.getAdapter(), 
properties, loadStmt.dataIsAlreadySorted());
             cls.setSourceLocation(stmt.getSourceLocation());
             JobSpecification spec = apiFramework.compileQuery(hcc, 
metadataProvider, null, 0, null, sessionOutput, cls,
-                    null, responsePrinter, warningCollector, null);
+                    null, responsePrinter, warningCollector, null, jobFlags);
             afterCompile();
             MetadataManager.INSTANCE.commitTransaction(mdTxnCtx);
             bActiveTxn = false;
@@ -3779,8 +3779,8 @@

     @Override
     public JobSpecification rewriteCompileQuery(IClusterInfoCollector 
clusterInfoCollector,
-            MetadataProvider metadataProvider, Query query, 
ICompiledDmlStatement stmt,
-            Map<String, IAObject> stmtParams, IRequestParameters 
requestParameters)
+                                                MetadataProvider 
metadataProvider, Query query, ICompiledDmlStatement stmt,
+                                                Map<String, IAObject> 
stmtParams, IRequestParameters requestParameters)
             throws AlgebricksException, ACIDException {

         Map<VarIdentifier, IAObject> externalVars = 
createExternalVariables(query, stmtParams);
@@ -3794,7 +3794,7 @@
         // Query Compilation (happens under the same ongoing metadata 
transaction)
         return apiFramework.compileQuery(clusterInfoCollector, 
metadataProvider, (Query) rewrittenResult.first,
                 rewrittenResult.second, stmt == null ? null : 
stmt.getDatasetName(), sessionOutput, stmt, externalVars,
-                responsePrinter, warningCollector, requestParameters);
+                responsePrinter, warningCollector, requestParameters, 
jobFlags);
     }

     protected JobSpecification 
rewriteCompileInsertUpsert(IClusterInfoCollector clusterInfoCollector,
@@ -3835,7 +3835,7 @@
         // transaction)
         return apiFramework.compileQuery(clusterInfoCollector, 
metadataProvider, rewrittenInsertUpsert.getQuery(),
                 rewrittenResult.second, datasetName, sessionOutput, clfrqs, 
externalVars, responsePrinter,
-                warningCollector, null);
+                warningCollector, null, jobFlags);
     }

     protected void handleCreateFeedStatement(MetadataProvider 
metadataProvider, Statement stmt) throws Exception {
diff --git 
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
 
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
index 85910aa..937cbde 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/HeuristicCompilerFactoryBuilder.java
@@ -18,6 +18,7 @@
  */
 package org.apache.hyracks.algebricks.compiler.api;

+import java.util.EnumSet;
 import java.util.List;

 import 
org.apache.hyracks.algebricks.common.constraints.AlgebricksPartitionConstraint;
@@ -47,6 +48,7 @@
 import 
org.apache.hyracks.algebricks.runtime.writers.SerializedDataWriterFactory;
 import org.apache.hyracks.api.exceptions.IWarningCollector;
 import org.apache.hyracks.api.job.IJobletEventListenerFactory;
+import org.apache.hyracks.api.job.JobFlag;
 import org.apache.hyracks.api.job.JobSpecification;

 public class HeuristicCompilerFactoryBuilder extends 
AbstractCompilerFactoryBuilder {
@@ -172,6 +174,16 @@
         }

         @Override
+        public JobSpecification createJob(Object appContext, 
IJobletEventListenerFactory jobEventListenerFactory, EnumSet<JobFlag> 
runtimeFlags) throws AlgebricksException{
+            AlgebricksConfig.ALGEBRICKS_LOGGER.trace("Starting Job 
Generation.\n");
+            PlanCompiler pc = factory.createPlanCompiler(oc, appContext, 
writerFactory);
+            if(runtimeFlags.contains(JobFlag.PROFILE_RUNTIME)){
+                pc.enableLog2PhysMapping();
+            }
+            return pc.compilePlan(plan, jobEventListenerFactory);
+        }
+
+        @Override
         public boolean skipJobCapacityAssignment() {
             return oc.skipJobCapacityAssignment();
         }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/ICompiler.java
 
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/ICompiler.java
index 0f5798e..6c53788 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/ICompiler.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-compiler/src/main/java/org/apache/hyracks/algebricks/compiler/api/ICompiler.java
@@ -20,13 +20,18 @@

 import org.apache.hyracks.algebricks.common.exceptions.AlgebricksException;
 import org.apache.hyracks.api.job.IJobletEventListenerFactory;
+import org.apache.hyracks.api.job.JobFlag;
 import org.apache.hyracks.api.job.JobSpecification;

+import java.util.EnumSet;
+
 public interface ICompiler {
     public void optimize() throws AlgebricksException;

     public JobSpecification createJob(Object appContext, 
IJobletEventListenerFactory jobEventListenerFactory)
             throws AlgebricksException;

+    JobSpecification createJob(Object appContext, IJobletEventListenerFactory 
jobletEventListenerFactory, EnumSet<JobFlag> runtimeFlags) throws 
AlgebricksException;
+
     boolean skipJobCapacityAssignment();
 }
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
index 99ef8d0..0dad884 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/JobBuilder.java
@@ -74,6 +74,8 @@

     private int aodCounter = 0;

+    private boolean genLog2PhysMap = false;
+
     public JobBuilder(JobSpecification jobSpec, 
AlgebricksAbsolutePartitionConstraint clusterLocations) {
         this.jobSpec = jobSpec;
         this.clusterLocations = clusterLocations;
@@ -96,6 +98,10 @@
                 new String[] { 
clusterLocations.getLocations()[Math.abs(jobSpec.hashCode() % nPartitions)] });
     }

+    public void enableLog2PhysMapping(){
+        this.genLog2PhysMap = true;
+    }
+
     @Override
     public void contributeMicroOperator(ILogicalOperator op, 
IPushRuntimeFactory runtime, RecordDescriptor recDesc) {
         contributeMicroOperator(op, runtime, recDesc, null);
@@ -214,7 +220,12 @@
             jobSpec.addRoot(opDesc);
         }
         setAllPartitionConstraints(tgtConstraints);
-        jobSpec.setLogical2PhysicalMap(getLogical2PhysicalMap());
+        if(genLog2PhysMap){
+            jobSpec.setLogical2PhysicalMap(getLogical2PhysicalMap());
+        }
+        else{
+            jobSpec.setLogical2PhysicalMap(Collections.emptyMap());
+        }
     }

     public List<IOperatorDescriptor> getGeneratedMetaOps() {
diff --git 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/PlanCompiler.java
 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/PlanCompiler.java
index 2ef5c6c..204cfca 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/PlanCompiler.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-core/src/main/java/org/apache/hyracks/algebricks/core/jobgen/impl/PlanCompiler.java
@@ -39,6 +39,8 @@
     private JobGenContext context;
     private Map<Mutable<ILogicalOperator>, List<Mutable<ILogicalOperator>>> 
operatorVisitedToParents = new HashMap<>();

+    boolean genLog2PhysMap = false;
+
     public PlanCompiler(JobGenContext context) {
         this.context = context;
     }
@@ -47,6 +49,10 @@
         return context;
     }

+    public void enableLog2PhysMapping(){
+        this.genLog2PhysMap = true;
+    }
+
     public JobSpecification compilePlan(ILogicalPlan plan, 
IJobletEventListenerFactory jobEventListenerFactory)
             throws AlgebricksException {
         return compilePlanImpl(plan, false, null, jobEventListenerFactory);
@@ -66,6 +72,9 @@
         }
         List<ILogicalOperator> rootOps = new ArrayList<>();
         JobBuilder builder = new JobBuilder(spec, 
context.getClusterLocations());
+        if(genLog2PhysMap){
+            builder.enableLog2PhysMapping();
+        }
         for (Mutable<ILogicalOperator> opRef : plan.getRoots()) {
             compileOpRef(opRef, spec, builder, outerPlanSchema);
             rootOps.add(opRef.getValue());
diff --git 
a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java
 
b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java
index 0ce2ff5..202c087 100644
--- 
a/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java
+++ 
b/hyracks-fullstack/algebricks/algebricks-runtime/src/main/java/org/apache/hyracks/algebricks/runtime/operators/meta/PipelineAssembler.java
@@ -77,7 +77,7 @@
             for (int j = 0; j < newRuntimes.length; j++) {
                 //ETS is wrapped externally, and doesn't need the micro-op 
wrapper since it isn't a pipeline
                 //we also want to avoid any instances of NoOp stats in the 
pipeline that snuck in somehow
-                boolean shouldProfile = !(runtimeFactory instanceof 
EmptyTupleSourceRuntimeFactory) && profile
+                boolean shouldProfile = profile && !(runtimeFactory instanceof 
EmptyTupleSourceRuntimeFactory)
                         && microOpStats.containsKey(runtimeFactory);
                 if (shouldProfile) {
                     ProfiledPushRuntime profiled;

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

Gerrit-Project: asterixdb
Gerrit-Branch: trinity
Gerrit-Change-Id: Ia9a84eedbcb33c29f03155a8605bb82af372f1f3
Gerrit-Change-Number: 17962
Gerrit-PatchSet: 1
Gerrit-Owner: Ian Maxon <[email protected]>
Gerrit-MessageType: newchange

Reply via email to