You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@asterixdb.apache.org by pe...@apache.org on 2023/11/03 18:52:59 UTC

(asterixdb) branch master updated: [NO ISSUE][COMP] Disable ExtractCommonExpressionsRule for insert/upserts

This is an automated email from the ASF dual-hosted git repository.

peeyush pushed a commit to branch master
in repository https://gitbox.apache.org/repos/asf/asterixdb.git


The following commit(s) were added to refs/heads/master by this push:
     new 59428b5776 [NO ISSUE][COMP] Disable ExtractCommonExpressionsRule for insert/upserts
59428b5776 is described below

commit 59428b5776eb11bf269346300668983a165a1597
Author: Peeyush Gupta <pe...@couchbase.com>
AuthorDate: Thu Nov 2 13:29:55 2023 -0700

    [NO ISSUE][COMP] Disable ExtractCommonExpressionsRule for insert/upserts
    
    - user model changes: no
    - storage format changes: no
    - interface changes: no
    
    Details:
    On large upserts/inserts, the ExtractCommonExpressionsRule
    creates a large number of assign operators causing stack overflow.
    
    Change-Id: Ifa6ce2b5dbc036c7f24391013bf53bd504433fda
    Reviewed-on: https://asterix-gerrit.ics.uci.edu/c/asterixdb/+/17901
    Integration-Tests: Jenkins <je...@fulliautomatix.ics.uci.edu>
    Reviewed-by: Peeyush Gupta <pe...@couchbase.com>
    Reviewed-by: Ali Alsuliman <al...@gmail.com>
    Tested-by: Peeyush Gupta <pe...@couchbase.com>
    Tested-by: Jenkins <je...@fulliautomatix.ics.uci.edu>
---
 .../optimizerts/results/disjunction-to-join-delete-3.plan          | 4 ++--
 .../algebricks/rewriter/rules/ExtractCommonExpressionsRule.java    | 7 +++++++
 2 files changed, 9 insertions(+), 2 deletions(-)

diff --git a/asterixdb/asterix-app/src/test/resources/optimizerts/results/disjunction-to-join-delete-3.plan b/asterixdb/asterix-app/src/test/resources/optimizerts/results/disjunction-to-join-delete-3.plan
index 51da71e54b..7d9ab0c7be 100644
--- a/asterixdb/asterix-app/src/test/resources/optimizerts/results/disjunction-to-join-delete-3.plan
+++ b/asterixdb/asterix-app/src/test/resources/optimizerts/results/disjunction-to-join-delete-3.plan
@@ -12,7 +12,7 @@
                       -- ASSIGN  |PARTITIONED|
                         -- STREAM_PROJECT  |PARTITIONED|
                           -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
-                            -- HYBRID_HASH_JOIN [$$20][$$22]  |PARTITIONED|
+                            -- HYBRID_HASH_JOIN [$$21][$$23]  |PARTITIONED|
                               -- ONE_TO_ONE_EXCHANGE  |PARTITIONED|
                                 -- ASSIGN  |PARTITIONED|
                                   -- STREAM_PROJECT  |PARTITIONED|
@@ -22,4 +22,4 @@
                                           -- EMPTY_TUPLE_SOURCE  |PARTITIONED|
                               -- BROADCAST_EXCHANGE  |PARTITIONED|
                                 -- UNNEST  |UNPARTITIONED|
-                                  -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
+                                  -- EMPTY_TUPLE_SOURCE  |UNPARTITIONED|
\ No newline at end of file
diff --git a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
index e2ba5571b7..2c27589ab9 100644
--- a/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
+++ b/hyracks-fullstack/algebricks/algebricks-rewriter/src/main/java/org/apache/hyracks/algebricks/rewriter/rules/ExtractCommonExpressionsRule.java
@@ -97,6 +97,7 @@ public class ExtractCommonExpressionsRule implements IAlgebraicRewriteRule {
         ignoreOps.add(LogicalOperatorTag.AGGREGATE);
         ignoreOps.add(LogicalOperatorTag.RUNNINGAGGREGATE);
         ignoreOps.add(LogicalOperatorTag.WINDOW); //TODO: can extract from partition/order/frame expressions
+        ignoreOps.add(LogicalOperatorTag.INSERT_DELETE_UPSERT);
     }
 
     @Override
@@ -121,6 +122,12 @@ public class ExtractCommonExpressionsRule implements IAlgebraicRewriteRule {
                 && op.getOperatorTag() != LogicalOperatorTag.DELEGATE_OPERATOR) {
             return false;
         }
+        if (!op.getInputs().isEmpty()) {
+            AbstractLogicalOperator childOp = (AbstractLogicalOperator) op.getInputs().get(0).getValue();
+            if (childOp.getOperatorTag() == LogicalOperatorTag.INSERT_DELETE_UPSERT) {
+                return false;
+            }
+        }
         exprEqClassMap.clear();
         substVisitor.setContext(context);
         boolean modified = removeCommonExpressions(opRef, context);