[
https://issues.apache.org/jira/browse/TINKERPOP-2554?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]
Saikiran Boga updated TINKERPOP-2554:
-------------------------------------
Description:
When extracting step metrics from ProfileStep, this code block below[1] assumes
that step metrics is always initialized. But if a step does not invoke starts
hasNext() or next() methods for any particular reason, this throws an NPE.
An example case where this could happen is if a step decides not to invoke any
upstream step by halting the execution:
{noformat}
step1 -> ProfileStep -> step2 -> ProfileStep -> step3 -> ProfileStep -> step4
-> ProfileStep{noformat}
In this case if say step3/4 decides not to get starts from previous step, then
the step metrics on all the preceding ProfileStep are left uninitialized.
Sample trace:
{noformat}
java.lang.NullPointerException: null
at
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics.addTopLevelMetrics(DefaultTraversalMetrics.java:157)
at
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics.setMetrics(DefaultTraversalMetrics.java:143)
at
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep.hasNext(ProfileSideEffectStep.java:75)
at
org.apache.tinkerpop.gremlin.process.traversal.step.util.ExpandableStepIterator.hasNext(ExpandableStepIterator.java:42)
...{noformat}
[1]
[https://github.com/apache/tinkerpop/blob/master/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java#L157]
was:
When extracting step metrics from ProfileStep, this code block below[1] assumes
that step metrics is always initialized. But if a step does not invoke starts
hasNext() or next() methods for any particular reason, this throws an NPE.
An example case where this could happen is if a step decides not to invoke any
upstream step by halting at any other step:
{noformat}
step1 -> ProfileStep -> step2 -> ProfileStep -> step3 -> ProfileStep -> step4
-> ProfileStep{noformat}
In this case if say step3/4 decides not to get starts from previous step, then
the step metrics on all the preceding ProfileStep are left uninitialized.
Sample trace:
{noformat}
java.lang.NullPointerException: null
at
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics.addTopLevelMetrics(DefaultTraversalMetrics.java:157)
at
org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics.setMetrics(DefaultTraversalMetrics.java:143)
at
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep.hasNext(ProfileSideEffectStep.java:75)
at
org.apache.tinkerpop.gremlin.process.traversal.step.util.ExpandableStepIterator.hasNext(ExpandableStepIterator.java:42)
...{noformat}
[1]
https://github.com/apache/tinkerpop/blob/master/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java#L157
> Extracting step metrics from ProfileStep throws NPE if the step was not
> triggered
> ---------------------------------------------------------------------------------
>
> Key: TINKERPOP-2554
> URL: https://issues.apache.org/jira/browse/TINKERPOP-2554
> Project: TinkerPop
> Issue Type: Bug
> Components: process
> Reporter: Saikiran Boga
> Priority: Minor
>
> When extracting step metrics from ProfileStep, this code block below[1]
> assumes that step metrics is always initialized. But if a step does not
> invoke starts hasNext() or next() methods for any particular reason, this
> throws an NPE.
> An example case where this could happen is if a step decides not to invoke
> any upstream step by halting the execution:
> {noformat}
> step1 -> ProfileStep -> step2 -> ProfileStep -> step3 -> ProfileStep -> step4
> -> ProfileStep{noformat}
> In this case if say step3/4 decides not to get starts from previous step,
> then the step metrics on all the preceding ProfileStep are left uninitialized.
> Sample trace:
> {noformat}
> java.lang.NullPointerException: null
> at
> org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics.addTopLevelMetrics(DefaultTraversalMetrics.java:157)
> at
> org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalMetrics.setMetrics(DefaultTraversalMetrics.java:143)
> at
> org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileSideEffectStep.hasNext(ProfileSideEffectStep.java:75)
>
> at
> org.apache.tinkerpop.gremlin.process.traversal.step.util.ExpandableStepIterator.hasNext(ExpandableStepIterator.java:42)
> ...{noformat}
> [1]
> [https://github.com/apache/tinkerpop/blob/master/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalMetrics.java#L157]
--
This message was sent by Atlassian Jira
(v8.3.4#803005)