You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@tinkerpop.apache.org by "Marko A. Rodriguez (JIRA)" <ji...@apache.org> on 2015/06/30 23:07:11 UTC
[jira] [Closed] (TINKERPOP3-758) match() and profile() don't play
well together
[ https://issues.apache.org/jira/browse/TINKERPOP3-758?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel ]
Marko A. Rodriguez closed TINKERPOP3-758.
-----------------------------------------
Resolution: Fixed
Assignee: Marko A. Rodriguez
Fix Version/s: 3.0.0.GA
This has been fixed.
{code}
gremlin> g.V().match(__.as('a').out('created').as('b'), __.as('b').in().count().is(eq(1))).select('a','b').by('name').profile().cap('~metrics')
==>Traversal Metrics
Step Count Traversers Time (ms) % Dur
=============================================================================================================
TinkerGraphStep([],vertex) 6 6 0.360 6.49
MatchStep(AND,[[MatchStartStep(a), ProfileStep,... 1 1 2.269 40.84
MatchStartStep(a) 6 6 0.120
VertexStep(OUT,[created],vertex) 4 4 0.102
MatchEndStep(b) 4 4 0.240
MatchStartStep(b) 4 4 0.092
TraversalFlatMapStep([VertexStep(IN,edge), Pr... 1 1 1.236
VertexStep(IN,edge) 10 10 0.099
RangeGlobalStep(0,2) 7 7 0.093
CountGlobalStep 4 4 0.919
IsStep(eq(1)) 1 1 0.168
MatchEndStep 1 1 0.132
SelectStep([a, b],[value(name)]) 1 1 0.394 7.10
SideEffectCapStep([~metrics]) 1 1 2.532 45.57
>TOTAL - - 5.556 -
gremlin>
{code}
This only effects {{MatchStep}} cause {{MatchAlgorithm}} dynamically gets the end labels of a traversal. When {{ProfileStep}} is inserted into the mix, the end step is not what is expected. I added a TOTAL hack to {{MatchStep}}:
{code}
public static Optional<String> getEndLabel(final Traversal.Admin<Object, Object> traversal) {
return traversal.getEndStep() instanceof ProfileStep ? // TOTAL HACK
((MatchEndStep) traversal.getEndStep().getPreviousStep()).getMatchKey() :
((MatchEndStep) traversal.getEndStep()).getMatchKey();
}
{code}
This really sucks. Be nice if there was like a {{MatchEndStepProfileStep}} :| ...........or, if we could label {{ProfileStep}} and then change the "getEndLabel()" code to just {{getLabels().iterator().next()}}.
> match() and profile() don't play well together
> ----------------------------------------------
>
> Key: TINKERPOP3-758
> URL: https://issues.apache.org/jira/browse/TINKERPOP3-758
> Project: TinkerPop 3
> Issue Type: Bug
> Components: process
> Reporter: Daniel Kuppitz
> Assignee: Marko A. Rodriguez
> Fix For: 3.0.0.GA
>
>
> {code}
> // find songs and their most common followers; keep only those songs that are common followers themselves
>
> gremlin> g.V().hasLabel("song").match(__.as("song").out("followedBy").groupCount().order(local).by(valueDecr).mapKeys().limit(1).as("mostCommonFollower")).select("song","mostCommonFollower").by("name").sideEffect(select("mostCommonFollower").aggregate("mcf")).where("song", within("mcf")).profile().cap(TraversalMetrics.METRICS_KEY)
> org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.ProfileStep cannot be cast to org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchStep$MatchEndStep
> Display stack trace? [yN]
> {code}
> For easier copy & pasting and better readability:
> {code}
> g.V().hasLabel("song").match(
> __.as("song").out("followedBy").groupCount().order(local).by(valueDecr).mapKeys().limit(1).as("mostCommonFollower")
> ).select("song","mostCommonFollower").by("name").sideEffect(
> select("mostCommonFollower").aggregate("mcf")
> ).where("song", within("mcf")).profile().cap(TraversalMetrics.METRICS_KEY)
> {code}
--
This message was sent by Atlassian JIRA
(v6.3.4#6332)