I had a little bit of time this weekend so I've updated the PR that I'd
submitted https://github.com/apache/tinkerpop/pull/838 with something that
seems to work, at least with the cursory testing I've done so far and jives
better with the sentiments expressed in this thread.

It still uses a similar overall design for the RepeatStep, but it checks to
see if there's a barrier step `.repeat(....barrier())...` as Daniel had
suggested closer to the start of the thread instead of an explicit
`order(BFS)`. So the check wouldn't be, as Pieter was concerned about,
checking that a strategy hasn't been added but that no strategies have
added a `barrier` step to the repeat traversal in the RepeatStep.

On Thu, May 17, 2018 at 3:18 PM Stephen Mallette <spmalle...@gmail.com>
wrote:

> I got a bit busy for a few weeks and didn't' really have much time to focus
> on in on this thread. I figured I'd let it off my mind for a while and see
> if any new thoughts came up on it. Coming back on it now, I still think I
> like the approach I summarized from my own thoughts and others on the
> thread, but let me try to address a few things that were posted since my
> last reply:
>
> From pieter's last reply:
>
> >  What bothers me with this is that its in the negative. Providers now
> have too look for a specific strategy NOT being present to alter the
> behavior of the traversal.
>
> I suppose sqlg has gone down a path where the general strategies of
> TinkerPop don't always equate to the best way to do things. Do any other
> graph providers run into such an issue? I don't necessarily ask that
> question of Pieter, but of any graph providers out there who are following
> along. I'm personally not aware of any, but I'd be curious to know if there
> were others.
>
> >  Another thought about if we go with the `.withoutStrategies(Lazy...)`.
> Should these semantic marker type strategies not then be interfaces rather
> than concrete implementations.
>
> that might be true. we'd need to look at that more carefully in the
> implementation to see what makes sense. maybe we just need a marker
> interface for such strategies?
>
> From Keith's last reply:
>
> >  my main concern is there’s not really any great documentation around
> what LazyBarrierStrategy really does.
>
> true - we will want to write more about this for sure if it's to control
> the traversal algorithm.
>
> On Tue, May 1, 2018 at 9:53 AM, Keith Lohnes <lohn...@gmail.com> wrote:
>
> > I presume that would be some source of technical derailment to this
> > approach
> >
> > Not necessarily, just the “step to define traversal order” idea. The
> > RepeatStep, at least from what I’ve seen, seems simplest to implement as
> a
> > BFS. BFS is easily made depth first with a stack. I think that can still
> be
> > the case with the RepeatStep here, it would just need another means of
> > determining which algorithm to use. That could probably be “Does this
> > repeat traversal end with a barrier step?” If that seems reasonable for
> > RepeatSteps then maybe that could help with some of Pieter’s “check for a
> > negative” concerns.
> >
> > Full BFS: manually add barrier()‘s
> >
> > Mixed mode: Default, let strategies do their thing OR remove strategies
> and
> > manually add your own barrier()
> > Full DFS: execute .withoutStrategies(Lazy...)
> >
> > This sounds reasonable, but my main concern is there’s not really any
> great
> > documentation around what LazyBarrierStrategy really does. Sure, you can
> > read the code, but I think that as the documentation currently sits,
> > inserts
> > barrier()-steps into a traversal where appropriate in order to gain the
> > "bulking optimization." is a bit vague. “Where appropriate” should
> probably
> > be well defined in the documentation so users can have a good
> understanding
> > of when that is without having to go to the code.
> >
> > On Sun, Apr 29, 2018 at 6:17 AM pieter gmail <pieter.mar...@gmail.com>
> > wrote:
> >
> > So to clarify, you write,
> > >
> > > Full DFS: execute `.withoutStrategies(Lazy...)`
> > >
> > > What bothers me with this is that its in the negative. Providers now
> > > have too look for a specific strategy NOT being present to alter the
> > > behavior of the traversal.
> > >
> > > SubgraphStrategy and EventStrategy and all others that I am aware of
> are
> > > positive. They do what they do and then the provider goes about its
> > > business optimizing the steps that are present. In the negative its
> more
> > > like a directive to the provider about the semantics of the traversal's
> > > steps.
> > >
> > > Another thought about if we go with the `.withoutStrategies(Lazy...)`.
> > > Should these semantic marker type strategies not then be interfaces
> > > rather than concrete implementations. Specifically with respect my
> vague
> > > understanding of whats coming with version 4, where the gremlin
> > > specification is completely detached from TinkerPop's reference
> > > implementation and perhaps even the JDK itself.
> > >
> > > Cheers
> > > Pieter
> > >
> > > On 29/04/2018 00:38, Stephen Mallette wrote:
> > > >>   Is the objection to order(SearchAlgo) that it overloads order() or
> > an
> > > > objection to specifying, DFS/BFS in the traversal itself?
> > > >
> > > > for me, order() is a step. not a modulator. making it work as
> presented
> > > in
> > > > the pull request conflates those two concepts which i think is
> > confusing
> > > (i
> > > > don't think we do that anywhere else, but feel free to correct me if
> > i'm
> > > > wrong).
> > > >
> > > >>   As mentioned earlier I am not a fan of making the user deal with
> > > > strategies.  Strategies to my mind is not part of the gremlin as a
> > > language
> > > > specification
> > > >
> > > > There are already precedents for users dealing with strategies.
> > Consider
> > > > the decorations like SubgraphStrategy, EventStrategy, etc. So, it is
> > not
> > > > foreign or hidden. It is a component of traversal configuration.
> > > >
> > > > I would have to think about a new step like traverse(). I'd prefer to
> > > avoid
> > > > new steps when we already have other infrastructure from the language
> > > that
> > > > can support what we're trying to do. I think that's why I like the
> > > approach
> > > > I outlined in my last post - it just sorta fits with what we have.
> > > >
> > > >
> > > >
> > > > On Sat, Apr 28, 2018 at 1:37 PM, pieter gmail <
> pieter.mar...@gmail.com
> > >
> > > > wrote:
> > > >
> > > >> Hi,
> > > >>
> > > >> Is the objection to order(SearchAlgo) that it overloads order() or
> an
> > > >> objection to specifying, DFS/BFS in the traversal itself?
> > > >> If so I do not really see how it is misplaced from a usability/API
> > > >> perspective. Seems pretty natural to me and very graphy at that.
> > > >>
> > > >> As mentioned earlier I am not a fan of making the user deal with
> > > >> strategies. Strategies to my mind is not part of the gremlin as a
> > > language
> > > >> specification. You mention LazyBarrierStrategy yet it is a internal
> > > >> strategy to TinkerPop. Sqlg removes it and passes all tests without
> me
> > > even
> > > >> being aware anymore if TinkerPop would have had a
> LazyBarrierStrategy
> > or
> > > >> not. I see this as a strength of TinkerPop. Strategies can evolve
> over
> > > time
> > > >> without it having a effect on the specification and user's codebase
> > out
> > > >> there.
> > > >>
> > > >> Here comes where my thoughts have gone to,
> > > >>
> > > >> g.V().anythingTraversal(anyTraversal()).traverse(DFS/BFS)
> > > >>
> > > >> This should apply to all traversals, not just RepeatStep. e.g.
> > > >> g.V().out().out().traverse(DFS).
> > > >> If no traverse(DFS/BFS) is specified then the graph provider can do
> > > >> whatever they want, DFS, BFS or a mix of the two.
> > > >> If however traverse(BFS/DFS) is specified then the graph provider
> must
> > > >> follow the directive and the test suite will test for it.
> > > >>
> > > >> traverse(DFS/BFS) is like any other traversal in that it can be
> > > specified
> > > >> mid traversal. Everything before it must follow the directive,
> > > everything
> > > >> after need not to.
> > > >>
> > > >> This will also be backward compatible which is kinda nice.
> > > >>
> > > >> Cheers
> > > >> Pieter
> > > >>
> > > >> On 27/04/2018 21:03, Stephen Mallette wrote:
> > > >>
> > > >>> It seems like we have general agreement on the easy things, that
> is:
> > > >>>
> > > >>> 1. this is a change for 3.4.0/master and
> > > >>> 2. we're all for a DFS option
> > > >>>
> > > >>> but we still have the hard part of having to come to consensus on
> how
> > > it's
> > > >>> used/implemented. The quick summary of this thread in that regard
> > goes
> > > >>> something like this: We currently have this PR that introduces DFS,
> > but
> > > >>> does so as a configuration per repeat() step. From what I gather a
> > good
> > > >>> many of us seem to find that approach undesirable for one or more
> of
> > > the
> > > >>> following reasons:
> > > >>>
> > > >>> 1. The use of order() seems misplaced purely from a usability/API
> > > >>> perspective
> > > >>> 2. The approach seems to be at odds with how everything else works
> > > given
> > > >>> barrier() and strategies
> > > >>> 3. The approach seems to be at odds with our current mixed mode of
> > > DFS/BFS
> > > >>>
> > > >>> I think that we can see those issues resolve themselves with
> > something
> > > >>> Kuppitz mentioned to me: repeat() should be DFS by default where
> > > barrier()
> > > >>> will change that behavior as required. That change would yield the
> > > >>> following approaches:
> > > >>>
> > > >>> Full BFS: manually add `barrier()`'s
> > > >>> Mixed mode: Default, let strategies do their thing OR remove
> > strategies
> > > >>> and
> > > >>> manually add your own barrier()
> > > >>> Full DFS: execute `.withoutStrategies(Lazy...)`
> > > >>>
> > > >>> Futherrmore, we probably should have some form of verification
> > strategy
> > > >>> that ensures all BFS or all DFS so that users can't get tricked
> along
> > > the
> > > >>> way. It's not enough to just remove LazyBarrierStrategy to get DFS
> if
> > > >>> another strategy comes along and throws in a barrier().
> > > >>>
> > > >>> So if all that sounds good from a usability perspective, then we
> get
> > > all
> > > >>> three modes that we want using existing traversal semantics which
> > > removes
> > > >>> the three concerns I've summarized from this thread. We also get
> > > Keith's
> > > >>> desire to have control over which part of a traversal is BFS/DFS if
> > > users
> > > >>> want that capability because they can do a manual Mixed Mode and
> add
> > > their
> > > >>> own barrier() to control the flow. For Pieter (or any graph
> provider)
> > > >>> nothing really changes and there is opportunity to control flow
> with
> > > >>> strategies as usual.
> > > >>>
> > > >>> I haven't really focused much on what's involved in adapting the
> > > current
> > > >>> work in the PR to this approach as I more wanted to find the common
> > > ground
> > > >>> among all the people who commented on the thread. If we agree that
> > > this is
> > > >>> a nice way to go, then we can think more about "how" it could
> happen.
> > > >>>
> > > >>> Keith, I saw you mention earlier that:
> > > >>>
> > > >>>    The barrier step that Daniel described doesn’t currently work
> > since
> > > >>> there’s basically booleans in the RepeatStep on whether or not to
> > stash
> > > >>> the
> > > >>> starts to make the RepeatStep depth first.
> > > >>>
> > > >>> I presume that would be some source of technical derailment to this
> > > >>> approach.
> > > >>>
> > > >>>
> > > >>>
> > > >>>
> > > >>> On Tue, Apr 24, 2018 at 3:05 PM, Keith Lohnes <lohn...@gmail.com>
> > > wrote:
> > > >>>
> > > >>> Yeah, that's what I meant. The steps inside are replaced with some
> > > >>>> JanusGraph stuff.
> > > >>>>
> > > >>>> Cheers,
> > > >>>> Keith
> > > >>>>
> > > >>>>
> > > >>>> On Tue, Apr 24, 2018 at 1:52 PM pieter gmail <
> > pieter.mar...@gmail.com
> > > >
> > > >>>> wrote:
> > > >>>>
> > > >>>> Nah, that looks to me like the RepeatStep survived. Just the
> nested
> > > >>>>> VertexStep that got replaced with JanusgraphVertexStep.
> > > >>>>> Good for them, first prize is not replacing anything.
> > > >>>>>
> > > >>>>> Cheers
> > > >>>>> Pieter
> > > >>>>>
> > > >>>>> On 24/04/2018 19:50, Keith Lohnes wrote:
> > > >>>>>
> > > >>>>>> It looks like it,
> > > >>>>>> `g.V().has("foo", "bar").repeat(out()).emit().explain()`
> > > >>>>>>
> > > >>>>>> yields
> > > >>>>>>
> > > >>>>>> `[JanusGraphStep([],[foo.eq(bar)]),
> > > >>>>>> RepeatStep([JanusGraphVertexStep(OUT,vertex),
> > > >>>>>> RepeatEndStep],until(false),emit(true))]`
> > > >>>>>>
> > > >>>>>>
> > > >>>>>>
> > > >>>>>> On Tue, Apr 24, 2018 at 12:12 PM pieter gmail <
> > > pieter.mar...@gmail.com
> > > >>>>>> wrote:
> > > >>>>>>
> > > >>>>>> Hi,
> > > >>>>>>> Sqlg completely replaces TinkerPop's RepeatStep. The idea being
> > > that
> > > >>>>>>> with g.V().repeat(out()).times(x) only x round trips to the db
> is
> > > >>>>>>>
> > > >>>>>> needed
> > > >>>>> regardless of the size of the graph. Each time it will go to the
> db
> > > >>>>>> with
> > > >>>>> the full set of the previous step's incoming starts.
> > > >>>>>>> But yeah TinkerPop's implementation is always the starting
> point
> > so
> > > >>>>>>>
> > > >>>>>> I'll
> > > >>>>> definitely have a look at how you have implemented DFS.
> > > >>>>>>> BTW, does Janus graph use TinkerPop's default RepeatStep as is
> > > with no
> > > >>>>>>> optimization strategies?
> > > >>>>>>>
> > > >>>>>>> Cheers
> > > >>>>>>> Pieter
> > > >>>>>>>
> > > >>>>>>> On 24/04/2018 16:33, Keith Lohnes wrote:
> > > >>>>>>>
> > > >>>>>>>> Pieter,
> > > >>>>>>>>
> > > >>>>>>>> If you take a look at
> > > https://github.com/apache/tinkerpop/pull/838
> > > >>>>>>>>
> > > >>>>>>> DFS
> > > >>>>> is
> > > >>>>>>>> implemented as a modification to BFS. It's taking the starts
> > that
> > > >>>>>>>>
> > > >>>>>>> come
> > > >>>>> in
> > > >>>>>
> > > >>>>>> from a BFS and stashing them to be processed later. I haven't
> > seen a
> > > >>>>>>> big
> > > >>>>>> performance difference on JanusGraph; At least for the queries
> > that
> > > >>>>>>> I've
> > > >>>>>> been running with it. I'm not terribly familiar with Sqlg, but I
> > > >>>>>>> wonder
> > > >>>>> if
> > > >>>>>>>> in the context of how DFS is implemented there, it may be less
> > of
> > > a
> > > >>>>>>>> concern.
> > > >>>>>>>>
> > > >>>>>>>> Cheers,
> > > >>>>>>>> Keith
> > > >>>>>>>>
> > > >>>>>>>> On Thu, Apr 19, 2018 at 12:46 PM pieter gmail <
> > > >>>>>>>>
> > > >>>>>>> pieter.mar...@gmail.com
> > > >>>>> wrote:
> > > >>>>>>>> Hi,
> > > >>>>>>>>> Not really sure either what 'global' means technically with
> > > respect
> > > >>>>>>>>>
> > > >>>>>>>> to
> > > >>>>> TinkerPop's current configuration support.
> > > >>>>>>>>> Perhaps it can be the start of a global configuration
> registry
> > > that
> > > >>>>>>>>>
> > > >>>>>>>> can
> > > >>>>>> be overridden per traversal.
> > > >>>>>>>>> I get that DFS is the preferred default but for Sqlg the
> > > performance
> > > >>>>>>>>> impact is so great that I'd rather, if possible have BFS as
> its
> > > >>>>>>>>>
> > > >>>>>>>> default.
> > > >>>>>> I am not sure about this but I reckon that any graph where the
> > > >>>>>>>> TinkerPop
> > > >>>>>> vm is not running in the same process space as the actual
> > graph/data
> > > >>>>>>>>> that latency is a big issue. BFS alleviates the latency issue
> > > >>>>>>>>> significantly.
> > > >>>>>>>>>
> > > >>>>>>>>> Cheers
> > > >>>>>>>>> Pieter
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>>
> > > >>>>>>>>> On 19/04/2018 14:49, Keith Lohnes wrote:
> > > >>>>>>>>>
> > > >>>>>>>>>> whether this will affect more than just
> > > >>>>>>>>>> repeat()?
> > > >>>>>>>>>>
> > > >>>>>>>>>> For the PR that I start and the intent of this thread was to
> > > only
> > > >>>>>>>>>>
> > > >>>>>>>>> affect
> > > >>>>>>>> repeat.
> > > >>>>>>>>>> I prefer that the semantics of the traversal be specified in
> > the
> > > >>>>>>>>>> traversal
> > > >>>>>>>>>> as a first class citizen.
> > > >>>>>>>>>>
> > > >>>>>>>>>> +1
> > > >>>>>>>>>>
> > > >>>>>>>>>>       I am fine with any default but am wondering whether it
> > > would
> > > >>>>>>>>>> be
> > > >>>>> worthwhile for the default to be overridden at a global level at
> > > >>>>>>>>> not
> > > >>>>> just
> > > >>>>>>>> per traversal
> > > >>>>>>>>>> It might be nice, but I guess I'm not sure what `global`
> means
> > > in
> > > >>>>>>>>>>
> > > >>>>>>>>> this
> > > >>>>>> context. Configured on the graph object?
> > > >>>>>>>>>> On Tue, Apr 17, 2018 at 9:28 PM Daniel Kuppitz
> > <m...@gremlin.guru
> > > >
> > > >>>>>>>>>>
> > > >>>>>>>>> wrote:
> > > >>>>>>>> TinkerPop makes no guarantees about the order of elements
> unless
> > > >>>>>>>>>> you
> > > >>>>> specify an explicit order. This also goes back to the fact that
> > > >>>>>>>>>> certain
> > > >>>>>>>> strategies (LazyBarrier-, RepeatUnroll- and
> > > >>>>>>>>>> PathRetractionStrategy)
> > > >>>>> add
> > > >>>>>>>> NoOpBarrierSteps to your traversal, which ultimately turns it
> > > >>>>>>>>>> into a
> > > >>>>> DFS/BFS mix. Check the .explain() output of your traversal to see
> > > >>>>>>>>>> which
> > > >>>>>>>> strategy adds which steps.
> > > >>>>>>>>>>> Cheers,
> > > >>>>>>>>>>> Daniel
> > > >>>>>>>>>>>
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> On Tue, Apr 17, 2018 at 4:45 PM, Michael Pollmeier <
> > > >>>>>>>>>>> mich...@michaelpollmeier.com> wrote:
> > > >>>>>>>>>>>
> > > >>>>>>>>>>> Also it seems to me that DFS only really applies to
> repeat()
> > > >>>>>>>>>>>> with
> > > >>>>> an
> > > >>>>>
> > > >>>>>> emit().
> > > >>>>>>>>>>>>> g.V().hasLabel("A").repeat().times(2) gets rewritten as
> > > >>>>>>>>>>>>> g.V().hasLabel("A").out().out(). Are their subtleties
> > that I
> > > am
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> not
> > > >>>>>> aware of or does DFV vs BFS not matter in this case?
> > > >>>>>>>>>>>> When I read this I thought: clearly `.out().out()` is DFS
> > for
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>> OLTP,
> > > >>>>> that's also what the documentation says, e.g. in this nice
> > > >>>>>>>>>>> infographic
> > > >>>>>>>> http://tinkerpop.apache.org/docs/current/images/oltp-vs-
> > olap.png
> > > >>>>>>>>>>>> However, looks like that's not the case. Has my life been
> a
> > > lie?
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>> Setting
> > > >>>>>>>>>> up a simple flat graph to make things more obvious:
> > > >>>>>>>>>>>> v3 <- v1 <- v0 -> v2 -> v4
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> ```
> > > >>>>>>>>>>>> graph = TinkerGraph.open()
> > > >>>>>>>>>>>> v0 = graph.addVertex("l0")
> > > >>>>>>>>>>>> v1 = graph.addVertex("l1")
> > > >>>>>>>>>>>> v2 = graph.addVertex("l1")
> > > >>>>>>>>>>>> v3 = graph.addVertex("l2")
> > > >>>>>>>>>>>> v4 = graph.addVertex("l2")
> > > >>>>>>>>>>>> v0.addEdge("e", v2)
> > > >>>>>>>>>>>> v2.addEdge("e", v4)
> > > >>>>>>>>>>>> v0.addEdge("e", v1)
> > > >>>>>>>>>>>> v1.addEdge("e", v3)
> > > >>>>>>>>>>>> g = graph.traversal()
> > > >>>>>>>>>>>> g.V(v0).out().sideEffect{println(it)}.out().sideEffect{
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>> println(it)}
> > > >>>>> ```
> > > >>>>>>>>>>>> Prints:
> > > >>>>>>>>>>>> v[2]
> > > >>>>>>>>>>>> v[1]
> > > >>>>>>>>>>>> v[4]
> > > >>>>>>>>>>>> ==>v[4]
> > > >>>>>>>>>>>> v[3]
> > > >>>>>>>>>>>> ==>v[3]
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> If this was OLTP the output would be:
> > > >>>>>>>>>>>> v[2]
> > > >>>>>>>>>>>> v[4]
> > > >>>>>>>>>>>> ==>v[4]
> > > >>>>>>>>>>>> v[1]
> > > >>>>>>>>>>>> v[3]
> > > >>>>>>>>>>>> ==>v[3]
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> Cheers
> > > >>>>>>>>>>>> Michael
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>> On 18/04/18 02:58, pieter gmail wrote:
> > > >>>>>>>>>>>>
> > > >>>>>>>>>>>>> Hi,
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> I agree with the question about whether this will affect
> > more
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> than
> > > >>>>> just
> > > >>>>>>>>>> repeat()?
> > > >>>>>>>>>>>>> I prefer that the semantics of the traversal be specified
> > in
> > > the
> > > >>>>>>>>>>>>> traversal as a first class citizen. i.e. with
> > > order(SearchAlgo).
> > > >>>>>>>>>>>>> Strategies are to my mind internal to an implementation.
> In
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> Robert's
> > > >>>>>> example LazyBarrierStrategy may be replaced/removed by an
> > > >>>>>>>>>>>> implementation
> > > >>>>>>>>>>>> for whatever internal reason they have.
> > > >>>>>>>>>>>>> Regarding the default, I am fine with any default but am
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> wondering
> > > >>>>> whether it would be worthwhile for the default to be overridden
> > > >>>>>>>>>>>> at a
> > > >>>>>> global level at not just per traversal? That way the impact can
> > > >>>>>>>>>>>> also
> > > >>>>>> be
> > > >>>>>>>>>> alleviated when folks upgrade.
> > > >>>>>>>>>>>>> Also it seems to me that DFS only really applies to
> > repeat()
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> with
> > > >>>>> an
> > > >>>>>
> > > >>>>>> emit().
> > > >>>>>>>>>>>>> g.V().hasLabel("A").repeat().times(2) gets rewritten as
> > > >>>>>>>>>>>>> g.V().hasLabel("A").out().out(). Are their subtleties
> > that I
> > > am
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>> not
> > > >>>>>> aware of or does DFV vs BFS not matter in this case?
> > > >>>>>>>>>>>>> Cheers
> > > >>>>>>>>>>>>> Pieter
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>> On 17/04/2018 14:58, Robert Dale wrote:
> > > >>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> +1 on DFS
> > > >>>>>>>>>>>>>> -1 on order(SearchAlgo)
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> It seems like a strategy may be more appropriate.  It
> > could
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> affect
> > > >>>>>> more
> > > >>>>>>>>>>>> than just repeat().  And how would this interact with
> > > >>>>>>>>>>>>>> LazyBarrierStrategy?
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> Maybe the default should be DFS with
> LazyBarrierStrategy.
> > > Then
> > > >>>>>>>>>>>>>> LazyBarrierStrategy
> > > >>>>>>>>>>>>>> can be removed with 'withoutStrategies()' and then it
> > works
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> just
> > > >>>>> like
> > > >>>>>>>> everything else.  I'd prefer consistency with the way
> > > >>>>>>>>>>>>> everything
> > > >>>>> else
> > > >>>>>>>> works.
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> Robert Dale
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> On Tue, Apr 17, 2018 at 8:11 AM, Stephen Mallette <
> > > >>>>>>>>>>>>>>
> > > >>>>>>>>>>>>> spmalle...@gmail.com
> > > >>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>> Thanks for the summary. Just a quick note - I'd not
> worry
> > > >>>>>>>>>>>>>> about
> > > >>>>> the
> > > >>>>>>>> GLV
> > > >>>>>>>>>>>> tests for now. That part should be easy to sort out. Let's
> > > >>>>>>>>>>>>>> first
> > > >>>>> make
> > > >>>>>>>>>> sure
> > > >>>>>>>>>>>>>>> that we get clear on the other items first before
> digging
> > > too
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> deeply
> > > >>>>>>>> there.
> > > >>>>>>>>>>>>>>> On an administrative front, I think that this change
> > should
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> just
> > > >>>>> go
> > > >>>>>>>> to
> > > >>>>>>>>>>>> 3.4.0/master (so it's currently targeted to the right
> branch
> > > >>>>>>>>>>>>>>> actually) as
> > > >>>>>>>>>>>>>>> it sounds like we want DFS to be the default and that
> > could
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> be a
> > > >>>>> breaking
> > > >>>>>>>>>>>>>>> change as the semantics of the traversal shift a bit.
> So
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> that's
> > > >>>>> one
> > > >>>>>>>> issue
> > > >>>>>>>>>>>>>>> to make sure we're all happy with.
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> A next issue would be the API from the user
> perspective -
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> thanks
> > > >>>>> for
> > > >>>>>>>> the
> > > >>>>>>>>>>>>> link to that JIRA btw - I see I was involved in that
> > > >>>>>>>>>>>>>> conversation
> > > >>>>>> a
> > > >>>>>>>> little
> > > >>>>>>>>>>>>>>> bit but then dropped off. You'd commented that you
> > > preferred a
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> per
> > > >>>>>> loop
> > > >>>>>>>>>>>> configuration for search approach which is what you stuck
> > with
> > > >>>>>>>>>>>>>> for
> > > >>>>>> the
> > > >>>>>>>>>>>> implementation. I guess I can see that there could be some
> > > >>>>>>>>>>>>>> value
> > > >>>>> in
> > > >>>>>>>> having
> > > >>>>>>>>>>>>>>> that ability. That said, I'm not sure that I like the
> > > overload
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> of
> > > >>>>>> order()
> > > >>>>>>>>>>>>>>> as the method for doing that:
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> g.V().has("name", "marko").
> > > >>>>>>>>>>>>>>>          repeat(__.outE().order().by("weight",
> > > decr).inV()).
> > > >>>>>>>>>>>>>>>            emit().
> > > >>>>>>>>>>>>>>>            order(SearchAlgo.DFS)
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> Still thinking about what else we might do there, but
> > > perhaps
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> that
> > > >>>>>> can wait
> > > >>>>>>>>>>>>>>> a bit as I still need to study your changes in detail.
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> Regarding:
> > > >>>>>>        The barrier step that Daniel described doesn’t currently
> > > >>>>>>>>>>>>>>> work
> > > >>>>>> since
> > > >>>>>>>>>>>> there’s basically booleans in the RepeatStep on whether or
> > not
> > > >>>>>>>>>>>>>> to
> > > >>>>>> stash the
> > > >>>>>>>>>>>>>>> starts to make the RepeatStep depth first.
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> I assume you are referring to these booleans:
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> https://github.com/apache/tinkerpop/blob/
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> fe8ee98f6967c7b0f0ee7f2cf2d105
> > > >>>>>>>>>>>>> 31b68fab8b/gremlin-core/src/main/java/org/apache/
> > > >>>>>>>>>>>>>>> tinkerpop/gremlin/process/traversal/step/branch/
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> RepeatStep.java#L46-L47
> > > >>>>>>>>>>>>> ?
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> On Tue, Apr 17, 2018 at 7:37 AM, Keith Lohnes <
> > > >>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>> lohn...@gmail.com>
> > > >>>>>> wrote:
> > > >>>>>>>>>>>>> Stephen, That’s a fair summary. I had an immediate need
> for
> > > >>>>>>>>>>>>>>> it,
> > > >>>>> so
> > > >>>>>>>> I
> > > >>>>>>>>>> developed something based on Michel Pollmeier’s work and a
> > > >>>>>>>>>>>>>>> modification
> > > >>>>>>>>>>>>> to
> > > >>>>>>>>>>>>>>>> the syntax Pieter Martin suggested in the Jira
> > > >>>>>>>>>>>>>>>> <https://issues.apache.org/jira/browse/TINKERPOP-1822
> ?
> > > >>>>>>>>>>>>>>>> focusedCommentId=16233681&page=com.atlassian.jira.
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>
> > > plugin.system.issuetabpanels%3Acomment-tabpanel#comment-1623
> > > >>>>> 3681>
> > > >>>>>
> > > >>>>>> with DFS being explicit.
> > > >>>>>>>>>>>>>>>> The semantics I used were
> g.V().repeat(out()).order(DFS)
> > ,
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> putting
> > > >>>>>> the
> > > >>>>>>>>>>>> order
> > > >>>>>>>>>>>>>>>> clause outside of the repeat. It made it simpler for
> me
> > to
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> develop
> > > >>>>>>>> and
> > > >>>>>>>>>>>> seemed nice to make that DFS vs BFS explicit. The barrier
> > > >>>>>>>>>>>>>>> step
> > > >>>>> that
> > > >>>>>>>> Daniel
> > > >>>>>>>>>>>>>>>> described doesn’t currently work since there’s
> basically
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> booleans
> > > >>>>>> in
> > > >>>>>>>>>> the
> > > >>>>>>>>>>>>>>>> RepeatStep on whether or not to stash the starts to
> make
> > > the
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> RepeatStep
> > > >>>>>>>>>>>>> depth first.
> > > >>>>>>>>>>>>>>>> I added a test for the DFS, though I’ve had some
> issues
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> getting
> > > >>>>> things to
> > > >>>>>>>>>>>>>>>> run re: .net tests and some other tests timing out. I
> > have
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> some
> > > >>>>> more
> > > >>>>>>>>>> tests
> > > >>>>>>>>>>>>>>>> I'd like to write based off issues that I ran into
> > testing
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> this
> > > >>>>> in
> > > >>>>>>>> the
> > > >>>>>>>>>>>> console (k-ary trees, until/emit before the repeat vs
> > after),
> > > >>>>>>>>>>>>>>> but I
> > > >>>>>>>> really
> > > >>>>>>>>>>>>>>>> wanted to get this out there for people to take a look
> > at
> > > and
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> see
> > > >>>>>> if
> > > >>>>>>>>>> it
> > > >>>>>>>>>>>>> could work out.
> > > >>>>>>>>>>>>>>>> ​
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> On Mon, Apr 16, 2018 at 7:29 PM Stephen Mallette <
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>> spmalle...@gmail.com>
> > > >>>>>>>>>>>>> wrote:
> > > >>>>>>>>>>>>>>>>        Keith, I have to admit that I didn't really
> > follow
> > > this
> > > >>>>>>>>>>>>>>>> general
> > > >>>>>>>> body
> > > >>>>>>>>>>>>> of
> > > >>>>>>>>>>>>>>>> work closely, which include this pull request, the
> > earlier
> > > >>>>>>>>>>>>>>>> one
> > > >>>>> from
> > > >>>>>>>>>> Michael
> > > >>>>>>>>>>>>>>>>> Pollmeier, the JIRA and I think some discussion
> > > somewhere on
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> one
> > > >>>>>> of
> > > >>>>>>>>>> the
> > > >>>>>>>>>>>>>>>>> mailing lists. As best I have gathered from what I
> did
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> follow, I
> > > >>>>>> feel
> > > >>>>>>>>>>>> like
> > > >>>>>>>>>>>>>>>>> the focus of this work so far was mostly related to
> > "can
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> someone
> > > >>>>>> get it
> > > >>>>>>>>>>>>>>>> to
> > > >>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> actually work", but not a lot about other aspects
> like
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> testing,
> > > >>>>>> api,
> > > >>>>>>>>>>>> release branch to apply it to, etc. Is that a fair
> depiction
> > > >>>>>>>>>>>>>>>> of
> > > >>>>>> how
> > > >>>>>>>>>> this
> > > >>>>>>>>>>>>>>>> work has developed so far? if so, let's use this
> thread
> > to
> > > >>>>>>>>>>>>>>>> make
> > > >>>>>> sure
> > > >>>>>>>>>>>> we're
> > > >>>>>>>>>>>>>>>>> all on the same page as to how this change will get
> in
> > on
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> all
> > > >>>>> those
> > > >>>>>>>>>> sorts
> > > >>>>>>>>>>>>>>>> of issues.
> > > >>>>>>>>>>>>>>>>> btw, thanks to you and michael for sticking at this
> to
> > > come
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>> to
> > > >>>>> something
> > > >>>>>>>>>>>>>>>> that seems to work. looking forward to the continued
> > > >>>>>>>>>>>>>>>> discussion
> > > >>>>>> on
> > > >>>>>>>> this
> > > >>>>>>>>>>>>>>>>> thread.
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> On Mon, Apr 16, 2018 at 6:54 PM, Michael Pollmeier <
> > > >>>>>>>>>>>>>>>>> mich...@michaelpollmeier.com> wrote:
> > > >>>>>>>>>>>>>>>>>
> > > >>>>>>>>>>>>>>>>> Unsurprisingly I'm also +1 for defaulting to DFS in
> > OLTP.
> > > >>>>>>>>>>>>>>>>> My
> > > >>>>> feeling
> > > >>>>>>>>>>>> is
> > > >>>>>>>>>>>>>>>> that most users currently expect it to be DFS since
> > that's
> > > >>>>>>>>>>>>>>>>> what
> > > >>>>>> the
> > > >>>>>>>>>>>> docs
> > > >>>>>>>>>>>>>>>
> > >
> > > ​
> >
>

Reply via email to