TraverserExecutor is smart to not do another iteration if the traversers will simply be returned to the master traversals as output. Updated the PageRankTest with a better test.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/07e12995 Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/07e12995 Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/07e12995 Branch: refs/heads/TINKERPOP-1298 Commit: 07e12995ae6bed0a3b1da3942bc54371d94a66a9 Parents: 4ee3028 Author: Marko A. Rodriguez <okramma...@gmail.com> Authored: Wed May 18 17:02:22 2016 -0600 Committer: Marko A. Rodriguez <okramma...@gmail.com> Committed: Wed May 18 17:02:22 2016 -0600 ---------------------------------------------------------------------- .../process/computer/traversal/TraverserExecutor.java | 10 ++++++++-- .../process/traversal/step/map/GroovyPageRankTest.groovy | 4 ++-- .../gremlin/process/traversal/step/map/PageRankTest.java | 10 ++++++---- 3 files changed, 16 insertions(+), 8 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/07e12995/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java ---------------------------------------------------------------------- diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java index f5facdb..c5f9bb5 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java @@ -159,7 +159,10 @@ public final class TraverserExecutor { final TraverserSet<Object> barrierSet = barrier.nextBarrier(); IteratorUtils.removeOnNext(barrierSet.iterator()).forEachRemaining(traverser -> { traverser.addLabels(step.getLabels()); // this might need to be generalized for working with global barriers too - if (traverser.isHalted() && ((!(traverser.get() instanceof Element) && !(traverser.get() instanceof Property)) || getHostingVertex(traverser.get()).equals(vertex))) { + if (traverser.isHalted() && + (returnHaltedTraversers || + (!(traverser.get() instanceof Element) && !(traverser.get() instanceof Property)) || + getHostingVertex(traverser.get()).equals(vertex))) { traverser.detach(); if (returnHaltedTraversers) memory.add(TraversalVertexProgram.HALTED_TRAVERSERS, new TraverserSet<>(traverser)); @@ -181,7 +184,10 @@ public final class TraverserExecutor { } } else { // LOCAL PROCESSING step.forEachRemaining(traverser -> { - if (traverser.isHalted() && ((!(traverser.get() instanceof Element) && !(traverser.get() instanceof Property)) || getHostingVertex(traverser.get()).equals(vertex))) { + if (traverser.isHalted() && + (returnHaltedTraversers || + (!(traverser.get() instanceof Element) && !(traverser.get() instanceof Property)) || + getHostingVertex(traverser.get()).equals(vertex))) { traverser.detach(); if (returnHaltedTraversers) memory.add(TraversalVertexProgram.HALTED_TRAVERSERS, new TraverserSet<>(traverser)); http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/07e12995/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPageRankTest.groovy ---------------------------------------------------------------------- diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPageRankTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPageRankTest.groovy index e27e8c0..8608c4d 100644 --- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPageRankTest.groovy +++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyPageRankTest.groovy @@ -71,8 +71,8 @@ public abstract class GroovyPageRankTest { } @Override - public Traversal<Vertex, Map<String, Object>> get_g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_valueMapXname_projectRankX() { - new ScriptTraversal<>(g, "gremlin-groovy", "g.V.out('created').pageRank().by(bothE()).by('projectRank').valueMap('name','projectRank')") + public Traversal<Vertex, Map<String, Object>> get_g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_timesX0X_valueMapXname_projectRankX() { + new ScriptTraversal<>(g, "gremlin-groovy", "g.V.out('created').pageRank().by(bothE()).by('projectRank').times(0).valueMap('name','projectRank')") } } } http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/07e12995/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PageRankTest.java ---------------------------------------------------------------------- diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PageRankTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PageRankTest.java index 5a3ed9b..1e18b48 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PageRankTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/PageRankTest.java @@ -49,7 +49,7 @@ public abstract class PageRankTest extends AbstractGremlinProcessTest { public abstract Traversal<Vertex, Vertex> get_g_V_pageRank(); - public abstract Traversal<Vertex, Map<String, Object>> get_g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_valueMapXname_projectRankX(); + public abstract Traversal<Vertex, Map<String, Object>> get_g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_timesX0X_valueMapXname_projectRankX(); public abstract Traversal<Vertex, String> get_g_V_pageRank_order_byXpageRank_decrX_name(); @@ -82,7 +82,7 @@ public abstract class PageRankTest extends AbstractGremlinProcessTest { @Test @LoadGraphWith(MODERN) public void g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_valueMapXname_projectRankX() { - final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_valueMapXname_projectRankX(); + final Traversal<Vertex, Map<String, Object>> traversal = get_g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_timesX0X_valueMapXname_projectRankX(); printTraversalForm(traversal); final Map<String, Double> map = new HashMap<>(); traversal.forEachRemaining(m -> map.put(((List<String>) m.get("name")).get(0), ((List<Double>) m.get("projectRank")).get(0))); @@ -90,6 +90,8 @@ public abstract class PageRankTest extends AbstractGremlinProcessTest { assertTrue(map.containsKey("lop")); assertTrue(map.containsKey("ripple")); assertTrue(map.get("lop") > map.get("ripple")); + assertEquals(3.0d, map.get("lop"), 0.001d); + assertEquals(1.0d, map.get("ripple"), 0.001d); assertFalse(traversal.hasNext()); } @@ -242,8 +244,8 @@ public abstract class PageRankTest extends AbstractGremlinProcessTest { } @Override - public Traversal<Vertex, Map<String, Object>> get_g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_valueMapXname_projectRankX() { - return g.V().out("created").pageRank().by(__.bothE()).by("projectRank").valueMap("name", "projectRank"); + public Traversal<Vertex, Map<String, Object>> get_g_V_outXcreatedX_pageRank_byXbothEX_byXprojectRankX_timesX0X_valueMapXname_projectRankX() { + return g.V().out("created").pageRank().by(__.bothE()).by("projectRank").times(0).valueMap("name", "projectRank"); } @Override