You are viewing a plain text version of this content. The canonical link for it is here.
Posted to notifications@asterixdb.apache.org by "Yingyi Bu (JIRA)" <ji...@apache.org> on 2016/09/03 16:55:20 UTC

[jira] [Closed] (ASTERIXDB-1623) Certain Rewrite Rule causes NPE in LogicalPlan.toString()

     [ 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)