You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2015/06/19 02:45:34 UTC
incubator-tinkerpop git commit: HadoopGraph OPT_OUT bug in Giraph
integration tests fixed. Added a gnarly nested match()-step test to identify
and ultimately fix a bug I reailzed last night as I was falling asleep.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 62ff43da3 -> 999f55f33
HadoopGraph OPT_OUT bug in Giraph integration tests fixed. Added a gnarly nested match()-step test to identify and ultimately fix a bug I reailzed last night as I was falling asleep.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/999f55f3
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/999f55f3
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/999f55f3
Branch: refs/heads/master
Commit: 999f55f33024a86c2ce7134ada295ec346328833
Parents: 62ff43d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 18 18:45:29 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 18 18:45:29 2015 -0600
----------------------------------------------------------------------
.../process/traversal/step/map/MatchStep.java | 15 ++++++-----
.../traversal/step/map/GroovyMatchTest.groovy | 19 ++++++++++++++
.../process/traversal/step/map/MatchTest.java | 26 ++++++++++++++++++++
.../gremlin/hadoop/structure/HadoopGraph.java | 2 +-
4 files changed, 55 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/999f55f3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
index 31196b6..218a087 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchStep.java
@@ -97,7 +97,7 @@ public final class MatchStep<S, E> extends ComputerAwareStep<S, Map<String, E>>
// START STEP to XMatchStep OR XMatchStartStep
final Step<?, ?> startStep = conjunctionTraversal.getStartStep();
if (startStep instanceof ConjunctionStep) {
- final MatchStep matchStep = new MatchStep(conjunctionTraversal, this.startKey,
+ final MatchStep matchStep = new MatchStep(conjunctionTraversal, null,
startStep instanceof AndStep ? MatchStep.Conjunction.AND : MatchStep.Conjunction.OR,
((ConjunctionStep<?>) startStep).getLocalChildren().toArray(new Traversal[((ConjunctionStep<?>) startStep).getLocalChildren().size()]));
TraversalHelper.replaceStep(startStep, matchStep, conjunctionTraversal);
@@ -250,11 +250,13 @@ public final class MatchStep<S, E> extends ComputerAwareStep<S, Map<String, E>>
return IteratorUtils.of(traverser.split(this.getBindings(traverser), this));
if (this.conjunction == Conjunction.AND) {
- this.getMatchAlgorithm().apply(traverser).addStart(traverser); // determine which sub-pattern the traverser should try next
- } else {
+ final Traversal.Admin<Object, Object> conjunctionTraversal = this.getMatchAlgorithm().apply(traverser); // determine which sub-pattern the traverser should try next
+ traverser.path().addLabel(conjunctionTraversal.getStartStep().getId()); // so the and() path is no longer taken once returned
+ conjunctionTraversal.addStart(traverser); // determine which sub-pattern the traverser should try next
+ } else { // OR
for (final Traversal.Admin<?, ?> conjunctionTraversal : this.conjunctionTraversals) {
final Traverser split = traverser.split();
- split.path().addLabel(conjunctionTraversal.getParent().asStep().getId());
+ split.path().addLabel(conjunctionTraversal.getParent().asStep().getId()); // so the or() path is no longer taken once returned
conjunctionTraversal.addStart(split);
}
}
@@ -271,13 +273,14 @@ public final class MatchStep<S, E> extends ComputerAwareStep<S, Map<String, E>>
if (this.conjunction == Conjunction.AND) {
final Traversal.Admin<Object, Object> conjunctionTraversal = this.getMatchAlgorithm().apply(traverser); // determine which sub-pattern the traverser should try next
+ traverser.path().addLabel(conjunctionTraversal.getStartStep().getId()); // so the and() path is no longer taken once returned
traverser.setStepId(conjunctionTraversal.getStartStep().getId()); // go down the traversal match sub-pattern
return IteratorUtils.of(traverser);
- } else {
+ } else { // OR
final List<Traverser<Map<String, E>>> traversers = new ArrayList<>();
this.conjunctionTraversals.forEach(conjunctionTraversal -> {
final Traverser.Admin split = traverser.split();
- split.path().addLabel(conjunctionTraversal.getParent().asStep().getId());
+ split.path().addLabel(conjunctionTraversal.getParent().asStep().getId()); // so the or() path is no longer taken once returned
split.setStepId(conjunctionTraversal.getStartStep().getId());
traversers.add(split);
});
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/999f55f3/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy
index 09cc6e8..c8c5b79 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyMatchTest.groovy
@@ -22,6 +22,9 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traversal
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalScriptHelper
import org.apache.tinkerpop.gremlin.structure.Vertex
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.and
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.and
+
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@@ -247,6 +250,22 @@ public abstract class GroovyMatchTest {
where('d', neq('a')))
""", g)
}
+
+ @Override
+ public Traversal<Vertex,Map<String,Object>> get_g_V_matchXa__a_knows_b__andXa_created_c__b_created_c__andXb_created_count_d__a_knows_count_dXXX() {
+ TraversalScriptHelper.compute("""
+ g.V.match('a',
+ __.as('a').out('knows').as('b'),
+ and(
+ __.as('a').out('created').as('c'),
+ __.as('b').out('created').as('c'),
+ and(
+ __.as('b').out('created').count.as('d'),
+ __.as('a').out('knows').count.as('d')
+ )
+ ))
+ """,g)
+ }
}
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/999f55f3/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
index 40dfb6b..79a59b6 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MatchTest.java
@@ -110,6 +110,9 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
// pulls out has container for index lookup and uses an where() with startKey and predicate
public abstract Traversal<Vertex,Map<String,Vertex>> get_g_V_matchXa__a_hasXname_GarciaX__a_0writtenBy_b__b_followedBy_c__c_writtenBy_d__whereXd_neqXaXXX();
+ // nested and with oddly dependent end steps
+ public abstract Traversal<Vertex,Map<String,Object>> get_g_V_matchXa__a_knows_b__andXa_created_c__b_created_c__andXb_created_count_d__a_knows_count_dXXX();
+
@Test
@LoadGraphWith(MODERN)
public void g_V_matchXa_out_bX() throws Exception {
@@ -357,6 +360,15 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
"a", convertToVertex(graph, "Garcia"), "b", convertToVertex(graph,"CRYPTICAL ENVELOPMENT"), "c", convertToVertex(graph,"DRUMS"), "d", convertToVertex(graph,"Grateful_Dead")), traversal);
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_matchXa__a_knows_b__andXa_created_c__b_created_c__andXb_created_count_d__a_knows_count_dXXX() {
+ final Traversal<Vertex,Map<String,Object>> traversal = get_g_V_matchXa__a_knows_b__andXa_created_c__b_created_c__andXb_created_count_d__a_knows_count_dXXX();
+ printTraversalForm(traversal);
+ checkResults(makeMapList(4,
+ "a", convertToVertex(graph, "marko"), "b", convertToVertex(graph,"josh"), "c", convertToVertex(graph,"lop"), "d", 2l),traversal);
+ }
+
public static class Traversals extends MatchTest {
@Override
public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_out_bX() {
@@ -534,5 +546,19 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
as("c").out("writtenBy").as("d"),
where("d", P.neq("a")));
}
+
+ @Override
+ public Traversal<Vertex,Map<String,Object>> get_g_V_matchXa__a_knows_b__andXa_created_c__b_created_c__andXb_created_count_d__a_knows_count_dXXX() {
+ return g.V().match("a",
+ as("a").out("knows").as("b"),
+ and(
+ as("a").out("created").as("c"),
+ as("b").out("created").as("c"),
+ and(
+ as("b").out("created").count().as("d"),
+ as("a").out("knows").count().as("d")
+ )
+ ));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/999f55f3/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
index 4ffa559..2971e1d 100644
--- a/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
+++ b/hadoop-gremlin/src/main/java/org/apache/tinkerpop/gremlin/hadoop/structure/HadoopGraph.java
@@ -73,7 +73,7 @@ import java.util.stream.Stream;
method = "g_V_matchXa_created_b__c_created_bX_selectXnameX",
reason = "Giraph does a hard kill on failure and stops threads which stops test cases. Exception handling semantics are correct though.")
@Graph.OptOut(
- test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyMatchTest$Traversals",
+ test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.MatchTest$Traversals",
method = "g_V_out_out_hasXname_rippleX_matchXb_created_a__c_knows_bX_selectXcX_outXknowsX_name",
reason = "Giraph does a hard kill on failure and stops threads which stops test cases. Exception handling semantics are correct though.")
@Graph.OptOut(