[
https://issues.apache.org/jira/browse/TINKERPOP-1281?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=15266688#comment-15266688
]
Marko A. Rodriguez commented on TINKERPOP-1281:
-----------------------------------------------
So I understand what is happening now. Here is the deal.
1. `Memory.HALTED_TRAVERSERS` only exist when the master traversal yields
halted traversals. That is, for example, when a traversal ends with a
`Barrier`. As the result is not distributed across the graph, the vertices
don't have `HALTED_TRAVERSERS` as a `VertexProperty`, but instead the master
traversal stores it in `Memory`.
2. That `Memory.HALTED_TRAVERSERS` is not a side-effect and thus, doesn't get
propagated to the next step.
I think we should have the concept of `ROOT_TRAVERSAL` and `HALTED_TRAVERSERS`
as configurations that are passed to every `VertexProgram` in a multi-OLAP
traversal chain. This way, `program()` will be able to see the traversal (if it
needs it) and it will be able to get halted traversers, if it needs it.
> Memory.HALTED_TRAVERSER transience is not sound.
> ------------------------------------------------
>
> Key: TINKERPOP-1281
> URL: https://issues.apache.org/jira/browse/TINKERPOP-1281
> Project: TinkerPop
> Issue Type: Bug
> Components: process
> Affects Versions: 3.2.0-incubating
> Reporter: Marko A. Rodriguez
>
> {code}
> g.V().out().program(xxx)
> {code}
> The above {{xxx}} VertexProgram will have access to the
> {{VertexProperty.HALTED_TRAVERSERS}} from {{out()}}.
> {code}
> g.V().out().groupCount().program(yyy)
> {code}
> The above {{yyy}} VertexProgram will not have access to the
> {{Memory.HALTED_TRAVERSERS}} from {{groupCount()}} (barrier) because it will
> be declared transient.
> ---------
> [10:32 AM] Marko Rodriguez:
> this.memoryComputeKeys.add(MemoryComputeKey.of(HALTED_TRAVERSERS,
> Operator.addAll, false, this.keepDistributedHaltedTraversers)); // only keep
> if it will be preserved
> [10:32 AM] Daniel Kuppitz: when is keepDistributedHaltedTraversers false?
> [10:33 AM] Marko Rodriguez: this.keepDistributedHaltedTraversers =
> !(this.traversal.get().getParent().asStep().getNextStep()
> instanceof ComputerResultStep || // if its just going to stream it out, don't
> distribute
>
> this.traversal.get().getParent().asStep().getNextStep() instanceof EmptyStep
> || // same as above, but if using TraversalVertexProgramStep directly
>
> (this.traversal.get().getParent().asStep().getNextStep() instanceof
> ProfileStep && // same as above, but needed for profiling
>
> this.traversal.get().getParent().asStep().getNextStep().getNextStep()
> instanceof ComputerResultStep));
> Show more
> given that ProgramVertexProgramStep is next, it will false and
> thus, Memory.HALTED_TRAVERSERS is transient and is erased.
> [10:34 AM] Marko Rodriguez: I think that is the problem.
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)