[ https://issues.apache.org/jira/browse/NIFI-5885?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16714559#comment-16714559 ]
ASF subversion and git services commented on NIFI-5885: ------------------------------------------------------- Commit 4e7a856f77fb8b7fbe1067ce667d8dff93dbd271 in nifi's branch refs/heads/master from [~ijokarumawak] [ https://git-wip-us.apache.org/repos/asf?p=nifi.git;h=4e7a856 ] NIFI-5885 ArrayOutOfBoundsException at EL 'or' and 'and' functions EL 'or' and 'and' functions can be called multiple times within the same context using the same evaluator instance. That happens if their subject is derived from an IteratingEvaluator such as 'anyDelineatedValues'. And if the right hand side expression for such 'or' and 'and' contains another IteratingEvaluator, then it can be evaluated more than the number of its candidates, ultimately an ArrayOutOfBoundsException is thrown. This commit makes Or/AndEvaluator caching its right hand side result to prevent that happens. For 'or' and 'and' functions, the right hand side expression is independant from their subject boolean value. It's enough evaluating right hand side once, because it returns the same result even with different subjects. Signed-off-by: Pierre Villard <pierre.villard...@gmail.com> This closes #3212. > EL expression of anyDelineatedValue() and or() fails with stacktrace > --------------------------------------------------------------------- > > Key: NIFI-5885 > URL: https://issues.apache.org/jira/browse/NIFI-5885 > Project: Apache NiFi > Issue Type: Bug > Affects Versions: 1.0.0 > Reporter: Yan Chen > Assignee: Koji Kawamura > Priority: Major > Fix For: 1.9.0 > > Attachments: anyDelineatedValue_or_test.xml, > image-2018-12-10-11-37-55-545.png > > > See attached Template test-case. Following EL expression failed: > ${anyDelineatedValue('${names}', > ','):equals('${my_name}'):or(${anyDelineatedValue('${types}', > ','):equals('${my_type}')})} > with stacktrace: > {code:java} > // code placeholder > 2018-12-09 19:03:25,534 ERROR [Timer-Driven Process Thread-7] > o.a.n.p.standard.RouteOnAttribute > RouteOnAttribute[id=954d4a07-0167-1000-ffff-ffff93233dd3] > RouteOnAttribute[id=954d4a07-0167-1000-ffff-ffff93233dd3] failed to process > session due to java.lang.ArrayIndexOutOfBoundsException: 1; Processor > Administratively Yielded for 1 sec: java.lang.ArrayIndexOutOfBoundsException: > 1 > java.lang.ArrayIndexOutOfBoundsException: 1 > at > org.apache.nifi.attribute.expression.language.evaluation.selection.DelineatedAttributeEvaluator.evaluate(DelineatedAttributeEvaluator.java:65) > at > org.apache.nifi.attribute.expression.language.evaluation.functions.EqualsEvaluator.evaluate(EqualsEvaluator.java:40) > at > org.apache.nifi.attribute.expression.language.evaluation.selection.AnyAttributeEvaluator.evaluate(AnyAttributeEvaluator.java:38) > at > org.apache.nifi.attribute.expression.language.evaluation.functions.OrEvaluator.evaluate(OrEvaluator.java:47) > at > org.apache.nifi.attribute.expression.language.evaluation.selection.AnyAttributeEvaluator.evaluate(AnyAttributeEvaluator.java:49) > at > org.apache.nifi.attribute.expression.language.Query.evaluate(Query.java:363) > at > org.apache.nifi.attribute.expression.language.Query.evaluateExpression(Query.java:204) > at > org.apache.nifi.attribute.expression.language.CompiledExpression.evaluate(CompiledExpression.java:58) > at > org.apache.nifi.attribute.expression.language.StandardPreparedQuery.evaluateExpressions(StandardPreparedQuery.java:53) > at > org.apache.nifi.attribute.expression.language.StandardPropertyValue.evaluateAttributeExpressions(StandardPropertyValue.java:160) > at > org.apache.nifi.attribute.expression.language.StandardPropertyValue.evaluateAttributeExpressions(StandardPropertyValue.java:148) > at > org.apache.nifi.attribute.expression.language.StandardPropertyValue.evaluateAttributeExpressions(StandardPropertyValue.java:133) > at > org.apache.nifi.processors.standard.RouteOnAttribute.onTrigger(RouteOnAttribute.java:219) > at > org.apache.nifi.processor.AbstractProcessor.onTrigger(AbstractProcessor.java:27) > at > org.apache.nifi.controller.StandardProcessorNode.onTrigger(StandardProcessorNode.java:1165) > at > org.apache.nifi.controller.tasks.ConnectableTask.invoke(ConnectableTask.java:203) > at > org.apache.nifi.controller.scheduling.TimerDrivenSchedulingAgent$1.run(TimerDrivenSchedulingAgent.java:117) > at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:511) > at java.util.concurrent.FutureTask.runAndReset(FutureTask.java:308) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.access$301(ScheduledThreadPoolExecutor.java:180) > at > java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:294) > at > java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1149) > at > java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:624) > at java.lang.Thread.run(Thread.java:748) > {code} -- This message was sent by Atlassian JIRA (v7.6.3#76005)