You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by dk...@apache.org on 2015/06/04 12:15:27 UTC

[13/43] incubator-tinkerpop git commit: Updated CHANGELOG with AddEdgeStep note. Added IteratorUtils.consume() for doing sideEffects on an Iterator. Removed Neo4jGraphAPI.awaitIndexConstruction() so, in its place, added Thread.sleep(5000).

Updated CHANGELOG with AddEdgeStep note. Added IteratorUtils.consume() for doing sideEffects on an Iterator. Removed Neo4jGraphAPI.awaitIndexConstruction() so, in its place, added Thread.sleep(5000).


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

Branch: refs/heads/preprocessor
Commit: ec2c3258d7aca587026384d04e018cd7e6c01a98
Parents: b003402
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Jun 2 14:53:18 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Jun 2 14:53:18 2015 -0600

----------------------------------------------------------------------
 CHANGELOG.asciidoc                              |  1 +
 .../process/traversal/step/map/AddEdgeStep.java | 45 +++++--------
 .../gremlin/util/iterator/IteratorUtils.java    | 31 +++++++--
 .../traversal/step/map/GroovyAddEdgeTest.groovy | 10 +++
 .../process/traversal/step/map/AddEdgeTest.java | 69 +++++++++++++++++++-
 hadoop-gremlin/pom.xml                          |  8 ---
 .../neo4j/structure/NativeNeo4jIndexTest.java   |  4 +-
 7 files changed, 120 insertions(+), 48 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ec2c3258/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 5e707d6..428c401 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ image::http://www.tinkerpop.com/docs/current/images/gremlin-hindu.png[width=225]
 TinkerPop 3.0.0.GA (NOT OFFICIALLY RELEASED YET)
 ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
 
+* `AddEdgeStep` now supports both `Scope.global` and `Scope.local` semantics.
 * Dropped dependency on `org.json:json` - used existing Jackson dependency.
 * Added back neo4j-gremlin as the licensing of the Neo4j API is now Apache2.
 * Added `willAllowId` method to features related to vertices, edges and vertex properties to test if an identifier can be use when `supportsUserSuppliedIds` is `true`.

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ec2c3258/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
index 0b9ad11..a3966ae 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeStep.java
@@ -94,44 +94,29 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Scopin
         final Object finalFirstVertex = firstVertex instanceof Iterable ? ((Iterable) firstVertex).iterator() : firstVertex;
         final Object finalSecondVertex = secondVertex instanceof Iterable ? ((Iterable) secondVertex).iterator() : secondVertex;
 
-        if (finalFirstVertex instanceof Iterator || finalSecondVertex instanceof Iterator) {
-            if (finalFirstVertex instanceof Iterator) {
-                return IteratorUtils.map((Iterator<Vertex>) finalFirstVertex, vertex -> {
-                    final Edge edge = this.direction.equals(Direction.OUT) ?
+        final Iterator<Edge> edgeIterator;
+        if (finalFirstVertex instanceof Iterator) {
+            edgeIterator = IteratorUtils.map((Iterator<Vertex>) finalFirstVertex, vertex ->
+                    this.direction.equals(Direction.OUT) ?
                             vertex.addEdge(this.edgeLabel, (Vertex) finalSecondVertex, this.propertyKeyValues) :
-                            ((Vertex) finalSecondVertex).addEdge(this.edgeLabel, vertex, this.propertyKeyValues);
-
-                    if (callbacks != null) {
-                        final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
-                        callbacks.forEach(c -> c.accept(vae));
-                    }
-                    return edge;
-                });
-            } else {
-                return IteratorUtils.map((Iterator<Vertex>) finalSecondVertex, vertex -> {
-                    final Edge edge = this.direction.equals(Direction.OUT) ?
+                            ((Vertex) finalSecondVertex).addEdge(this.edgeLabel, vertex, this.propertyKeyValues));
+        } else if (finalSecondVertex instanceof Iterator) {
+            edgeIterator = IteratorUtils.map((Iterator<Vertex>) finalSecondVertex, vertex ->
+                    this.direction.equals(Direction.OUT) ?
                             ((Vertex) finalFirstVertex).addEdge(this.edgeLabel, vertex, this.propertyKeyValues) :
-                            vertex.addEdge(this.edgeLabel, ((Vertex) finalFirstVertex), this.propertyKeyValues);
-
-                    if (callbacks != null) {
-                        final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
-                        callbacks.forEach(c -> c.accept(vae));
-                    }
-                    return edge;
-                });
-            }
+                            vertex.addEdge(this.edgeLabel, ((Vertex) finalFirstVertex), this.propertyKeyValues));
         } else {
-            final Edge edge = this.direction.equals(Direction.OUT) ?
+            edgeIterator = IteratorUtils.of(this.direction.equals(Direction.OUT) ?
                     ((Vertex) firstVertex).addEdge(this.edgeLabel, (Vertex) secondVertex, this.propertyKeyValues) :
-                    ((Vertex) secondVertex).addEdge(this.edgeLabel, (Vertex) firstVertex, this.propertyKeyValues);
+                    ((Vertex) secondVertex).addEdge(this.edgeLabel, (Vertex) firstVertex, this.propertyKeyValues));
+        }
 
+        return IteratorUtils.consume(edgeIterator, edge -> {
             if (callbacks != null) {
                 final Event.EdgeAddedEvent vae = new Event.EdgeAddedEvent(DetachedFactory.detach(edge, true));
                 callbacks.forEach(c -> c.accept(vae));
             }
-
-            return IteratorUtils.of(edge);
-        }
+        });
     }
 
     @Override
@@ -163,7 +148,7 @@ public final class AddEdgeStep<S> extends FlatMapStep<S, Edge> implements Scopin
 
     @Override
     public int hashCode() {
-        int result = super.hashCode() ^ this.direction.hashCode() ^ this.edgeLabel.hashCode();
+        int result = super.hashCode() ^ this.scope.hashCode() ^ this.direction.hashCode() ^ this.edgeLabel.hashCode();
         if (null != this.firstVertexKey)
             result ^= this.firstVertexKey.hashCode();
         if (null != this.secondVertexKey)

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ec2c3258/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
index 79e48b7..dc38a07 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/iterator/IteratorUtils.java
@@ -34,6 +34,7 @@ import java.util.Spliterator;
 import java.util.Spliterators;
 import java.util.function.BiFunction;
 import java.util.function.BinaryOperator;
+import java.util.function.Consumer;
 import java.util.function.Function;
 import java.util.function.Predicate;
 import java.util.stream.Stream;
@@ -196,6 +197,29 @@ public final class IteratorUtils {
 
     ///////////////
 
+    public static final <S> Iterator<S> consume(final Iterator<S> iterator, final Consumer<S> consumer) {
+        return new Iterator<S>() {
+            @Override
+            public boolean hasNext() {
+                return iterator.hasNext();
+            }
+
+            @Override
+            public S next() {
+                final S s = iterator.next();
+                consumer.accept(s);
+                return s;
+            }
+        };
+    }
+
+    public static final <S> Iterable<S> consume(final Iterable<S> iterable, final Consumer<S> consumer) {
+        return () -> IteratorUtils.consume(iterable.iterator(), consumer);
+    }
+
+
+    ///////////////
+
     public static final <S, E> Iterator<E> map(final Iterator<S> iterator, final Function<S, E> function) {
         return new Iterator<E>() {
             @Override
@@ -211,12 +235,7 @@ public final class IteratorUtils {
     }
 
     public static final <S, E> Iterable<E> map(final Iterable<S> iterable, final Function<S, E> function) {
-        return new Iterable<E>() {
-            @Override
-            public Iterator<E> iterator() {
-                return IteratorUtils.map(iterable.iterator(), function);
-            }
-        };
+        return () -> IteratorUtils.map(iterable.iterator(), function);
     }
 
     ///////////////

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ec2c3258/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
index 6df5aa3..79f7796 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroovyAddEdgeTest.groovy
@@ -45,5 +45,15 @@ public abstract class GroovyAddEdgeTest {
         public Traversal<Vertex, Edge> get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX() {
             TraversalScriptHelper.compute("g.withSideEffect('x',g.V.toList()).V.addOutE('existsWith', 'x', 'time', 'now')", g)
         }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_select_addInEXa_codeveloper_b_year_2009X() {
+            TraversalScriptHelper.compute("g.V.as('a').out('created').in('created').where(neq('a')).as('b').select.addInE('a', 'co-developer', 'b', 'year', 2009)", g)
+        }
+
+        @Override
+        public Traversal<Vertex, Edge> get_g_V_asXaX_inXcreatedX_addInEXcreatedBy_a_year_2009_acl_publicX() {
+            TraversalScriptHelper.compute("g.V.as('a').in('created').addInE('createdBy', 'a', 'year', 2009, 'acl', 'public')", g)
+        }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ec2c3258/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
index bf44370..c8ce21b 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddEdgeTest.java
@@ -22,6 +22,7 @@ import org.apache.tinkerpop.gremlin.FeatureRequirement;
 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.traversal.P;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -32,7 +33,7 @@ import org.junit.Test;
 import org.junit.runner.RunWith;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
-import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.*;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -47,6 +48,10 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
 
     public abstract Traversal<Vertex, Edge> get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX();
 
+    public abstract Traversal<Vertex,Edge> get_g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_select_addInEXa_codeveloper_b_year_2009X();
+
+    public abstract Traversal<Vertex,Edge> get_g_V_asXaX_inXcreatedX_addInEXcreatedBy_a_year_2009_acl_publicX();
+
     @Test
     @LoadGraphWith(MODERN)
     @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
@@ -110,6 +115,56 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
         assertEquals(6, IteratorUtils.count(graph.vertices()));
     }
 
+    @Test
+    @LoadGraphWith(MODERN)
+    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+    public void g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_select_addOutEXa_codeveloper_b_year_2009X() {
+        final Traversal<Vertex, Edge> traversal = get_g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_select_addInEXa_codeveloper_b_year_2009X();
+        printTraversalForm(traversal);
+        int count = 0;
+        while (traversal.hasNext()) {
+            final Edge edge = traversal.next();
+            assertEquals("co-developer", edge.label());
+            assertEquals(2009, (int) edge.value("year"));
+            assertEquals(1, IteratorUtils.count(edge.properties()));
+            assertEquals("person",edge.inVertex().label());
+            assertEquals("person",edge.outVertex().label());
+            assertFalse(edge.inVertex().value("name").equals("vadas"));
+            assertFalse(edge.outVertex().value("name").equals("vadas"));
+            assertFalse(edge.inVertex().equals(edge.outVertex()));
+            count++;
+
+        }
+        assertEquals(6, count);
+        assertEquals(12, IteratorUtils.count(graph.edges()));
+        assertEquals(6, IteratorUtils.count(graph.vertices()));
+    }
+
+    @Test
+    @LoadGraphWith(MODERN)
+    @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES)
+    public void g_VXv1IdX_asXaX_inXcreatedX_addOutEXcreatedBy_a_year_2009_acl_publicX() {
+        final Traversal<Vertex, Edge> traversal = get_g_V_asXaX_inXcreatedX_addInEXcreatedBy_a_year_2009_acl_publicX();
+        printTraversalForm(traversal);
+        int count = 0;
+        while (traversal.hasNext()) {
+            final Edge edge = traversal.next();
+            assertEquals("createdBy", edge.label());
+            assertEquals(2009, (int) edge.value("year"));
+            assertEquals("public", edge.value("acl"));
+            assertEquals(2, IteratorUtils.count(edge.properties()));
+            assertEquals("person",edge.inVertex().label());
+            assertEquals("software",edge.outVertex().label());
+            if(edge.outVertex().value("name").equals("ripple"))
+                assertEquals("josh",edge.inVertex().value("name"));
+            count++;
+
+        }
+        assertEquals(4, count);
+        assertEquals(10, IteratorUtils.count(graph.edges()));
+        assertEquals(6, IteratorUtils.count(graph.vertices()));
+    }
+
     public static class Traversals extends AddEdgeTest {
 
         @Override
@@ -124,7 +179,17 @@ public abstract class AddEdgeTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Edge> get_g_withSideEffectXx__g_V_toListX_addOutEXexistsWith_x_time_nowX() {
-            return g.withSideEffect("x",g.V().toList()).V().addOutE("existsWith", "x", "time", "now");
+            return g.withSideEffect("x", g.V().toList()).V().addOutE("existsWith", "x", "time", "now");
+        }
+
+        @Override
+        public Traversal<Vertex,Edge> get_g_V_asXaX_outXcreatedX_inXcreatedX_whereXneqXaXX_asXbX_select_addInEXa_codeveloper_b_year_2009X() {
+            return g.V().as("a").out("created").in("created").where(P.neq("a")).as("b").select().addInE("a", "co-developer", "b", "year", 2009);
+        }
+
+        @Override
+        public Traversal<Vertex,Edge> get_g_V_asXaX_inXcreatedX_addInEXcreatedBy_a_year_2009_acl_publicX() {
+            return g.V().as("a").in("created").addInE("createdBy", "a", "year", 2009, "acl", "public");
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ec2c3258/hadoop-gremlin/pom.xml
----------------------------------------------------------------------
diff --git a/hadoop-gremlin/pom.xml b/hadoop-gremlin/pom.xml
index fb1fa22..e49c42a 100644
--- a/hadoop-gremlin/pom.xml
+++ b/hadoop-gremlin/pom.xml
@@ -244,14 +244,6 @@ limitations under the License.
             </plugin>
             <plugin>
                 <groupId>org.apache.maven.plugins</groupId>
-                <artifactId>maven-surefire-plugin</artifactId>
-                <configuration>
-                    <!-- <log4j.configuration>log4j-core.properties</log4j.configuration> -->
-                    <!--<argLine>-Xmx2048M</argLine>-->
-                </configuration>
-            </plugin>
-            <plugin>
-                <groupId>org.apache.maven.plugins</groupId>
                 <artifactId>maven-failsafe-plugin</artifactId>
             </plugin>
             <plugin>

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/ec2c3258/neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/structure/NativeNeo4jIndexTest.java
----------------------------------------------------------------------
diff --git a/neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/structure/NativeNeo4jIndexTest.java b/neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/structure/NativeNeo4jIndexTest.java
index 854a8af..642ff77 100644
--- a/neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/structure/NativeNeo4jIndexTest.java
+++ b/neo4j-gremlin/src/test/java/org/apache/tinkerpop/gremlin/neo4j/structure/NativeNeo4jIndexTest.java
@@ -70,7 +70,7 @@ public class NativeNeo4jIndexTest extends AbstractNeo4jGremlinTest {
         neo4j.cypher("CREATE INDEX ON :something(myId)").iterate();
         this.graph.tx().commit();
         this.graph.tx().readWrite();
-        ((Neo4jGraph) this.graph).baseGraph.awaitIndexesOnline(1, TimeUnit.MINUTES);
+        Thread.sleep(5000); // wait for indices to be built
         assertTrue(this.getBaseGraph().hasSchemaIndex("something", "myId"));
         TimeUtil.clock(20, traversal);
         final double indexTime = TimeUtil.clock(20, traversal);
@@ -111,7 +111,7 @@ public class NativeNeo4jIndexTest extends AbstractNeo4jGremlinTest {
         neo4j.cypher("CREATE INDEX ON :vertexProperty(myId)").iterate();
         this.graph.tx().commit();
         this.graph.tx().readWrite();
-        ((Neo4jGraph) this.graph).baseGraph.awaitIndexesOnline(1, TimeUnit.MINUTES);
+        Thread.sleep(5000); // wait for indices to be built
         assertTrue(this.getBaseGraph().hasSchemaIndex("something", "myId"));
         TimeUtil.clock(20, traversal);
         final double indexTime = TimeUtil.clock(20, traversal);