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/18 17:39:14 UTC

incubator-tinkerpop git commit: Just realized that GroovyMatchTest did not use TraversalScriptHelper. Fixed. Added an AND/OR nested traversal to MatchTest. MatchAlgorithm needed to implement Serialzable to execute on Giraph and Spark. Tested on Spark and

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master 2f8026341 -> e00721d86


Just realized that GroovyMatchTest did not use TraversalScriptHelper. Fixed. Added an AND/OR nested traversal to MatchTest. MatchAlgorithm needed to implement Serialzable to execute on Giraph and Spark. Tested on Spark and Giraph -- all golden.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/e00721d8
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/e00721d8
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/e00721d8

Branch: refs/heads/master
Commit: e00721d86bdb5057ca126a0b9ee1c57544f69dec
Parents: 2f80263
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Jun 18 09:39:10 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jun 18 09:39:10 2015 -0600

----------------------------------------------------------------------
 .../process/traversal/step/map/MatchStep.java   |   3 +-
 .../traversal/util/TraversalScriptHelper.java   |   2 +-
 .../traversal/step/filter/GroovyHasTest.groovy  |   2 +-
 .../traversal/step/map/GroovyMatchTest.groovy   | 111 ++++++++++++++-----
 .../process/traversal/step/map/MatchTest.java   |  42 +++++--
 .../gremlin/hadoop/structure/HadoopGraph.java   |  12 ++
 6 files changed, 134 insertions(+), 38 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e00721d8/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 69f30a6..691fe8b 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
@@ -44,6 +44,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
+import java.io.Serializable;
 import java.util.ArrayList;
 import java.util.Collections;
 import java.util.HashMap;
@@ -399,7 +400,7 @@ public final class MatchStep<S, E> extends ComputerAwareStep<S, Map<String, E>>
 
     //////////////////////////////
 
-    public interface MatchAlgorithm extends Function<Traverser.Admin<Object>, Traversal.Admin<Object, Object>> {
+    public interface MatchAlgorithm extends Function<Traverser.Admin<Object>, Traversal.Admin<Object, Object>>, Serializable {
 
         public static Set<String> getRequiredLabels(final Traversal.Admin<Object, Object> traversal) {
             final Step<?, ?> startStep = traversal.getStartStep();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e00721d8/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptHelper.java
index ac49650..1998512 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalScriptHelper.java
@@ -49,7 +49,7 @@ public final class TraversalScriptHelper {
                 return new TraversalScriptFunction<S, E>(builder, scriptEngineName, traversalScript, bindings).apply(graph);
             }
         } catch (final Exception e) {
-            throw new IllegalArgumentException(e.getMessage(), e);
+            throw new IllegalStateException(e.getMessage(), e);
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e00721d8/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
index dc21a98..3d71644 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyHasTest.groovy
@@ -56,7 +56,7 @@ public abstract class GroovyHasTest {
 
         @Override
         public Traversal<Vertex, Vertex> get_g_V_hasXname_blahX() {
-            TraversalScriptHelper.compute(" g.V.has('name', 'blah')", g);
+            TraversalScriptHelper.compute("g.V.has('name', 'blah')", g);
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e00721d8/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 f365c18..2cc1879 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
@@ -18,12 +18,16 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.map
 
+import org.apache.tinkerpop.gremlin.process.traversal.P
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalScriptHelper
 import org.apache.tinkerpop.gremlin.structure.T
 import org.apache.tinkerpop.gremlin.structure.Vertex
 
-import static org.apache.tinkerpop.gremlin.process.traversal.P.neq;
+import static org.apache.tinkerpop.gremlin.process.traversal.P.neq
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.or
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.where;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -34,151 +38,202 @@ public abstract class GroovyMatchTest {
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_out_bX() {
-            g.V().match('a', __.as('a').out().as('b'));
+            TraversalScriptHelper.compute("g.V.match('a', __.as('a').out.as('b'))", g)
         }
 
         @Override
         public Traversal<Vertex, Object> get_g_V_matchXa_out_bX_selectXb_idX() {
-            g.V().match('a', __.as('a').out().as('b')).select('b').by(T.id)
+            TraversalScriptHelper.compute("g.V.match('a', __.as('a').out.as('b')).select('b').by(id)", g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_knows_b__b_created_cX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').out('knows').as('b'),
                     __.as('b').out('created').as('c'))
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_knows_b__a_created_cX() {
-            return g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').out('knows').as('b'),
-                    __.as('a').out('created').as('c'));
+                    __.as('a').out('created').as('c'))
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXd_0knows_a__d_hasXname_vadasX__a_knows_b__b_created_cX() {
-            return g.V().match('d',
+            TraversalScriptHelper.compute("""
+                g.V.match('d',
                     __.as('d').in('knows').as('a'),
                     __.as('d').has('name', 'vadas'),
                     __.as('a').out('knows').as('b'),
-                    __.as('b').out('created').as('c'));
+                    __.as('b').out('created').as('c'))
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_created_b__a_repeatXoutX_timesX2XX_selectXab_nameX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').out('created').as('b'),
                     __.as('a').repeat(__.out).times(2).as('b')).select('a', 'b').by('name')
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_created_lop_b__b_0created_29_c__c_repeatXoutX_timesX2XX_selectXnameX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').out('created').has('name', 'lop').as('b'),
                     __.as('b').in('created').has('age', 29).as('c'),
                     __.as('c').repeat(__.out).times(2)).select.by('name')
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, String> get_g_V_out_out_matchXa_0created_b__b_0knows_cX_selectXcX_outXcreatedX_name() {
-            g.V().out().out().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.out.out.match('a',
                     __.as('a').in('created').as('b'),
                     __.as('b').in('knows').as('c')).select('c').out('created').name
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_created_b__b_0created_aX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').out('created').as('b'),
                     __.as('b').in('created').as('a'))
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_knows_b__c_knows_bX() {
-            return g.V().match('a', __.as('a').out('knows').as('b'),
-                    __.as('c').out('knows').as('b'));
+            TraversalScriptHelper.compute("""
+                g.V().match('a',
+                    __.as('a').out('knows').as('b'),
+                    __.as('c').out('knows').as('b'))
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_knows_b__b_created_lop__b_matchXa1_created_b1__b1_0created_c1X_selectXc1X_cX_selectXnameX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').out('knows').as('b'),
                     __.as('b').out('created').has('name', 'lop'),
                     __.as('b').match('a1',
                             __.as('a1').out('created').as('b1'),
                             __.as('b1').in('created').as('c1')).select('c1').as('c')).select.by('name')
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_hasXname_GarciaX__a_0writtenBy_b__a_0sungBy_bX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').has('name', 'Garcia'),
                     __.as('a').in('writtenBy').as('b'),
                     __.as('a').in('sungBy').as('b'));
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_0sungBy_b__a_0sungBy_c__b_writtenBy_d__c_writtenBy_e__d_hasXname_George_HarisonX__e_hasXname_Bob_MarleyXX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').in('sungBy').as('b'),
                     __.as('a').in('sungBy').as('c'),
                     __.as('b').out('writtenBy').as('d'),
                     __.as('c').out('writtenBy').as('e'),
                     __.as('d').has('name', 'George_Harrison'),
-                    __.as('e').has('name', 'Bob_Marley'));
+                    __.as('e').has('name', 'Bob_Marley'))
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_d__c_sungBy_d__d_hasXname_GarciaXX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').in('sungBy').as('b'),
                     __.as('a').in('writtenBy').as('c'),
                     __.as('b').out('writtenBy').as('d'),
                     __.as('c').out('sungBy').as('d'),
-                    __.as('d').has('name', 'Garcia'));
+                    __.as('d').has('name', 'Garcia'))
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_dX_whereXc_sungBy_dX_whereXd_hasXname_GarciaXX() {
-            return g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').in('sungBy').as('b'),
                     __.as('a').in('writtenBy').as('c'),
                     __.as('b').out('writtenBy').as('d'))
                     .where(__.as('c').out('sungBy').as('d'))
                     .where(__.as('d').has('name', 'Garcia'));
+            """, g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_created_lop_b__b_0created_29_cX_whereXc_repeatXoutX_timesX2XX_selectXnameX() {
-            g.V().match("a",
+            TraversalScriptHelper.compute("""
+                g.V.match("a",
                     __.as("a").out("created").has("name", "lop").as("b"),
                     __.as("b").in("created").has("age", 29).as("c"))
-                    .where(__.as("c").repeat(__.out()).times(2))
-                    .select().by('name')
+                    .where(__.as("c").repeat(__.out).times(2))
+                    .select.by('name')
+            """,g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_created_b__b_0created_cX_whereXa_neq_cX_selectXa_c_nameX() {
-            g.V().match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').out('created').as('b'),
                     __.as('b').in('created').as('c'))
                     .where('a', neq('c'))
                     .select('a', 'c').by('name')
+            """,g)
         }
 
         @Override
         public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_created_b__c_created_bX_select_byXnameX() {
-            g.V.match('a',
+            TraversalScriptHelper.compute("""
+                g.V.match('a',
                     __.as('a').out('created').as('b'),
-                    __.as('c').out('created').as('b')).select { it.value('name') }
+                    __.as('c').out('created').as('b')).select().by('name')
+            """,g)
         }
 
         @Override
         public Traversal<Vertex, String> get_g_V_out_out_hasXname_rippleX_matchXb_created_a__c_knows_bX_selectXcX_outXknowsX_name() {
-            g.V.out.out.match('a',
+            TraversalScriptHelper.compute("""
+                g.V.out.out.match('a',
                     __.as('b').out('created').as('a'),
                     __.as('c').out('knows').as('b')).select('c').out('knows').name
+            """,g)
+        }
+
+        @Override
+        public Traversal<Vertex, Map<String, Object>> get_g_V_matchXa_whereXa_neqXcXX__a_created_b__orXa_knows_vadas__a_0knows_and_a_hasXlabel_personXX__b_0created_c__b_0created_count_isXgtX1XXX_select_byXidX() {
+            TraversalScriptHelper.compute("""
+                g.V().match('a',
+                    where('a', neq('c')),
+                    __.as('a').out('created').as('b'),
+                    or(
+                        __.as('a').out('knows').has('name', 'vadas'),
+                        __.as('a').in('knows').and.as('a').has(label, 'person')
+                    ),
+                    __.as('b').in('created').as('c'),
+                    __.as('b').in('created').count.is(gt(1)))
+                    .select.by(id);
+            """,g)
         }
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e00721d8/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 d1c2945..05d5ae0 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
@@ -21,13 +21,13 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
 import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
 import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
-import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.MapHelper;
 import org.apache.tinkerpop.gremlin.structure.T;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.junit.Ignore;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
@@ -39,8 +39,7 @@ import java.util.Map;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL;
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.process.traversal.P.neq;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.as;
-import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.out;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
 import static org.junit.Assert.*;
 
 /**
@@ -103,6 +102,9 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
     //TODO: with Traversal.reverse()
     public abstract Traversal<Vertex, String> get_g_V_out_out_hasXname_rippleX_matchXb_created_a__c_knows_bX_selectXcX_outXknowsX_name();
 
+    // nested or/and with patterns in order that won't execute serially
+    public abstract Traversal<Vertex,Map<String,Object>> get_g_V_matchXa_whereXa_neqXcXX__a_created_b__orXa_knows_vadas__a_0knows_and_a_hasXlabel_personXX__b_0created_c__b_0created_count_isXgtX1XXX_select_byXidX();
+
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_matchXa_out_bX() throws Exception {
@@ -187,7 +189,7 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
     public void g_V_matchXa_created_lop_b__b_0created_29_cX_whereXc_repeatXoutX_timesX2XX_selectXnameX() throws Exception {
         final List<Traversal<Vertex, Map<String, String>>> traversals = Arrays.asList(
                 get_g_V_matchXa_created_lop_b__b_0created_29_c__c_repeatXoutX_timesX2XX_selectXnameX());
-                //get_g_V_matchXa_created_lop_b__b_0created_29_cX_whereXc_repeatXoutX_timesX2XX_selectXnameX());  // todo: predicate traversals are local traversals?
+        //get_g_V_matchXa_created_lop_b__b_0created_29_cX_whereXc_repeatXoutX_timesX2XX_selectXnameX());  // todo: predicate traversals are local traversals?
         traversals.forEach(traversal -> {
             printTraversalForm(traversal);
             checkResults(makeMapList(3,
@@ -228,7 +230,7 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
     @Test(expected = IllegalStateException.class)
     @LoadGraphWith(MODERN)
     public void g_V_matchXa_knows_b__c_knows_bX() {
-        final Traversal<Vertex, Map<String, Vertex>> traversal =  get_g_V_matchXa_knows_b__c_knows_bX();
+        final Traversal<Vertex, Map<String, Vertex>> traversal = get_g_V_matchXa_knows_b__c_knows_bX();
         printTraversalForm(traversal);
         traversal.iterate();
     }
@@ -305,7 +307,7 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
     public void g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_d__c_sungBy_d__d_hasXname_GarciaXX() throws Exception {
         final List<Traversal<Vertex, Map<String, Vertex>>> traversals = Arrays.asList(
                 get_g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_d__c_sungBy_d__d_hasXname_GarciaXX());
-                //get_g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_dX_whereXc_sungBy_dX_whereXd_hasXname_GarciaXX());  // TODO: the where() is trying to get Garcia's name. Why is ComputerVerificationStrategy allowing this?
+        //get_g_V_matchXa_0sungBy_b__a_0writtenBy_c__b_writtenBy_dX_whereXc_sungBy_dX_whereXd_hasXname_GarciaXX());  // TODO: the where() is trying to get Garcia's name. Why is ComputerVerificationStrategy allowing this?
 
         traversals.forEach(traversal -> {
             printTraversalForm(traversal);
@@ -319,6 +321,18 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
         });
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    public void g_V_matchXa_whereXa_neqXcXX__a_created_b__orXa_knows_vadas__a_0knows_and_a_hasXlabel_personXX__b_0created_c__b_0created_count_isXgtX1XXX_select_byXidX() {
+        final Traversal<Vertex,Map<String,Object>> traversal = get_g_V_matchXa_whereXa_neqXcXX__a_created_b__orXa_knows_vadas__a_0knows_and_a_hasXlabel_personXX__b_0created_c__b_0created_count_isXgtX1XXX_select_byXidX();
+        printTraversalForm(traversal);
+        checkResults(makeMapList(3,
+                "a", convertToVertexId("marko"), "b", convertToVertexId("lop"), "c", convertToVertexId("josh"),
+                "a", convertToVertexId("marko"), "b", convertToVertexId("lop"), "c", convertToVertexId("peter"),
+                "a", convertToVertexId("josh"), "b", convertToVertexId("lop"), "c", convertToVertexId("marko"),
+                "a", convertToVertexId("josh"), "b", convertToVertexId("lop"), "c", convertToVertexId("peter")),traversal);
+    }
+
     public static class Traversals extends MatchTest {
         @Override
         public Traversal<Vertex, Map<String, Vertex>> get_g_V_matchXa_out_bX() {
@@ -468,5 +482,19 @@ public abstract class MatchTest extends AbstractGremlinProcessTest {
                     as("c").out("knows").as("b")).select("c").out("knows").values("name");
         }
 
+        @Override
+        public Traversal<Vertex,Map<String,Object>> get_g_V_matchXa_whereXa_neqXcXX__a_created_b__orXa_knows_vadas__a_0knows_and_a_hasXlabel_personXX__b_0created_c__b_0created_count_isXgtX1XXX_select_byXidX() {
+            return g.V().match("a",
+                    where("a", P.neq("c")),
+                    as("a").out("created").as("b"),
+                    or(
+                            as("a").out("knows").has("name", "vadas"),
+                            as("a").in("knows").and().as("a").has(T.label,"person")
+                    ),
+                    as("b").in("created").as("c"),
+                    as("b").in("created").count().is(P.gt(1)))
+                    .select().by(T.id);
+        }
+
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e00721d8/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 469785f..25d11af 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
@@ -70,6 +70,18 @@ import java.util.stream.Stream;
         reason = "Hadoop-Gremlin is OLAP-oriented and for OLTP operations, linear-scan joins are required. This particular tests takes many minutes to execute.")
 @Graph.OptOut(
         test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyMatchTest$Traversals",
+        method = "g_V_matchXa_knows_b__c_knows_bX",
+        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",
+        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",
+        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(
+        test = "org.apache.tinkerpop.gremlin.process.traversal.step.map.GroovyMatchTest$Traversals",
         method = "g_V_matchXa_0sungBy_b__a_0sungBy_c__b_writtenBy_d__c_writtenBy_e__d_hasXname_George_HarisonX__e_hasXname_Bob_MarleyXX",
         reason = "Hadoop-Gremlin is OLAP-oriented and for OLTP operations, linear-scan joins are required. This particular tests takes many minutes to execute.")
 @Graph.OptOut(