[
https://issues.apache.org/jira/browse/ASTERIXDB-1623?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Yingyi Bu closed ASTERIXDB-1623.
--------------------------------
Resolution: Not A Problem
> Certain Rewrite Rule causes NPE in LogicalPlan.toString()
> ---------------------------------------------------------
>
> Key: ASTERIXDB-1623
> URL: https://issues.apache.org/jira/browse/ASTERIXDB-1623
> Project: Apache AsterixDB
> Issue Type: Bug
> Components: Optimizer
> Reporter: Xikui Wang
> Assignee: Yingyi Bu
>
> I met this bug when I was adding 'upsert-option' for the feed part. The
> easiest way to reproduce this bug is to checkout my change at gerrit:
> https://asterix-gerrit.ics.uci.edu/#/c/1068/ and execute the added test case.
> The logical plan generated by subscribe statement is:
> from:
> org/apache/hyracks/algebricks/core/rewriter/base/HeuristicOptimizer.java:81
> {quote}
> sink -- |UNPARTITIONED|
> upsert into experiments:TwitterUsers from record: %0->$$2 partitioned by
> [%0->$$3] out: ([record-before-upsert:null]) -- |UNPARTITIONED|
> assign [$$3] <- [function-call: asterix:field-access-by-name,
> Args:[%0->$$2, AString: {screen-name}]] -- |UNPARTITIONED|
> project ([$$2]) -- |UNPARTITIONED|
> assign [$$2] <- [function-call: asterix:collection-to-sequence,
> Args:[%0->$$0]] -- |UNPARTITIONED|
> unnest $$0 <- function-call: asterix:feed-collect, Args:[AString:
> {experiments}, AString: {UserFeed}, AString: {UserFeed}, AString: {INTAKE},
> AString: {TwitterUsers}, AString: {TwitterUserType}] -- |UNPARTITIONED|
> empty-tuple-source -- |UNPARTITIONED|
> {quote}
> I managed to trace down that after runOptimizationSets
> (org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer#runOptimizationSets)
> worked on ruleList "ruleList.second.get(0) instanceof
> PullSelectOutOfEqJoin", the plan.toString will causes NPE.
> In normal scenario, this exception will not appear due to the log level
> setting. However, during the integration test, this bug will be triggered by
> org/apache/hyracks/algebricks/core/rewriter/base/HeuristicOptimizer.java:85
> The stack trace is as below:
> {quote}
> java.lang.NullPointerException
> at
> org.apache.hyracks.algebricks.core.algebra.expressions.VariableReferenceExpression.toString(VariableReferenceExpression.java:67)
> at java.lang.String.valueOf(String.java:2994)
> at java.lang.StringBuilder.append(StringBuilder.java:131)
> at
> org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.toString(AbstractFunctionCallExpression.java:124)
> at java.lang.String.valueOf(String.java:2994)
> at java.lang.StringBuilder.append(StringBuilder.java:131)
> at
> org.apache.hyracks.algebricks.core.algebra.expressions.AbstractFunctionCallExpression.toString(AbstractFunctionCallExpression.java:124)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalExpressionPrettyPrintVisitor.visitScalarFunctionCallExpression(LogicalExpressionPrettyPrintVisitor.java:57)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalExpressionPrettyPrintVisitor.visitScalarFunctionCallExpression(LogicalExpressionPrettyPrintVisitor.java:31)
> at
> org.apache.hyracks.algebricks.core.algebra.expressions.ScalarFunctionCallExpression.accept(ScalarFunctionCallExpression.java:55)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor.pprintExprList(LogicalOperatorPrettyPrintVisitor.java:483)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor.visitAssignOperator(LogicalOperatorPrettyPrintVisitor.java:198)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.LogicalOperatorPrettyPrintVisitor.visitAssignOperator(LogicalOperatorPrettyPrintVisitor.java:70)
> at
> org.apache.hyracks.algebricks.core.algebra.operators.logical.AssignOperator.accept(AssignOperator.java:63)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter.printOperator(PlanPrettyPrinter.java:47)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter.printOperator(PlanPrettyPrinter.java:59)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter.printOperator(PlanPrettyPrinter.java:59)
> at
> org.apache.hyracks.algebricks.core.algebra.prettyprint.PlanPrettyPrinter.printPlan(PlanPrettyPrinter.java:33)
> at
> org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.logPlanAt(HeuristicOptimizer.java:93)
> at
> org.apache.hyracks.algebricks.core.rewriter.base.HeuristicOptimizer.optimize(HeuristicOptimizer.java:85)
> at
> org.apache.hyracks.algebricks.compiler.api.HeuristicCompilerFactoryBuilder$1$1.optimize(HeuristicCompilerFactoryBuilder.java:90)
> at
> org.apache.asterix.api.common.APIFramework.compileQuery(APIFramework.java:275)
> at
> org.apache.asterix.app.translator.QueryTranslator.rewriteCompileQuery(QueryTranslator.java:1959)
> at
> org.apache.asterix.app.translator.QueryTranslator.handleSubscribeFeedStatement(QueryTranslator.java:2406)
> at
> org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:358)
> at
> org.apache.asterix.app.translator.QueryTranslator.compileAndExecute(QueryTranslator.java:259)
> at
> org.apache.asterix.app.external.FeedWorkCollection$SubscribeFeedWork$SubscribeFeedWorkRunnable.run(FeedWorkCollection.java:95)
> at
> java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1142)
> at
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:617)
> at java.lang.Thread.run(Thread.java:745)
> {quote}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)