You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2015/03/18 15:37:42 UTC

[1/2] incubator-tinkerpop git commit: Made PartitionStrategy immutable with a Builder class.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/master e2d3eeeac -> c53d61e1b


Made PartitionStrategy immutable with a Builder class.

This should eliminate troubles with threadsafety issues around modifying partitions in different threads.


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

Branch: refs/heads/master
Commit: a9e0d91a04cfb55d8485a42fa2648745fa8d1827
Parents: 36424c8
Author: Stephen Mallette <sp...@apache.org>
Authored: Wed Mar 18 10:35:05 2015 -0400
Committer: Stephen Mallette <sp...@apache.org>
Committed: Wed Mar 18 10:35:05 2015 -0400

----------------------------------------------------------------------
 .../strategy/decoration/PartitionStrategy.java  |  69 +++---
 .../decoration/PartitionStrategyTest.java       |  23 +-
 .../PartitionStrategyProcessTest.java           | 222 +++++++++++--------
 3 files changed, 183 insertions(+), 131 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a9e0d91a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
index c634a3a..d17f0d2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategy.java
@@ -29,56 +29,28 @@ import java.util.stream.Stream;
 public class PartitionStrategy extends AbstractTraversalStrategy {
     private String writePartition;
     private final String partitionKey;
-    private final Set<String> readPartitions = new HashSet<>();
+    private final Set<String> readPartitions;
 
-    public PartitionStrategy(final String partitionKey, final String partition) {
+    private PartitionStrategy(final String partitionKey, final String partition, final Set<String> readPartitions) {
         this.writePartition = partition;
         this.partitionKey = partitionKey;
-        readPartitions.add(writePartition);
+        this.readPartitions = Collections.unmodifiableSet(readPartitions);
     }
 
     public String getWritePartition() {
         return this.writePartition;
     }
 
-    /**
-     * Set the partition to be used for future writes.  The write partition is always included in the list of
-     * current read partitions.
-     */
-    public void setWritePartition(final String writePartition) {
-        this.writePartition = writePartition;
-    }
-
     public String getPartitionKey() {
         return this.partitionKey;
     }
 
-    /**
-     * Gets the set of read partitions which will include the current write partition even if not explicitly added
-     * as a read partition otherwise.
-     */
     public Set<String> getReadPartitions() {
-        return Collections.unmodifiableSet(readPartitions);
-    }
-
-    /**
-     * Removes the specified read partition.  Note that the current write partition cannot be removed as a read
-     * partition.
-     */
-    public void removeReadPartition(final String readPartition) {
-        this.readPartitions.remove(readPartition);
+        return readPartitions;
     }
 
-    public void addReadPartition(final String readPartition) {
-        this.readPartitions.add(readPartition);
-    }
-
-    /**
-     * Clears all of the read partitions.  Note that the current write partition cannot be cleared as a read
-     * partition.
-     */
-    public void clearReadPartitions() {
-        this.readPartitions.clear();
+    public static Builder build() {
+        return new Builder();
     }
 
     @Override
@@ -121,4 +93,33 @@ public class PartitionStrategy extends AbstractTraversalStrategy {
             TraversalHelper.replaceStep(s, new AddVertexStartStep(traversal, keyValues), traversal);
         });
     }
+
+    public static class Builder {
+        private String writePartition;
+        private String partitionKey;
+        private Set<String> readPartitions = new HashSet<>();
+
+        Builder() {}
+
+        public Builder writePartition(final String writePartition) {
+            this.writePartition = writePartition;
+            return this;
+        }
+
+        public Builder partitionKey(final String partitionKey) {
+            this.partitionKey = partitionKey;
+            return this;
+        }
+
+        public Builder addReadPartition(final String readPartition) {
+            this.readPartitions.add(readPartition);
+            return this;
+        }
+
+        public PartitionStrategy create() {
+            if (partitionKey == null || partitionKey.isEmpty()) throw new IllegalStateException("The partitionKey cannot be null or empty");
+
+            return new PartitionStrategy(this.partitionKey, this.writePartition, this.readPartitions);
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a9e0d91a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java
index ec34360..401b2c0 100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyTest.java
@@ -16,6 +16,7 @@ import org.apache.tinkerpop.gremlin.structure.Direction;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.util.ElementHelper;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 import org.javatuples.Pair;
 import org.junit.Test;
 import org.junit.experimental.runners.Enclosed;
@@ -39,15 +40,26 @@ public class PartitionStrategyTest {
 
     public static class PartitionKeyBehavior {
         @Test
-        public void shouldMakeTheInitialWritePartitionPartOfTheReadPartition() {
-            final PartitionStrategy strategy = new PartitionStrategy("p", "a");
+        public void shouldConstructPartitionStrategy() {
+            final PartitionStrategy strategy = PartitionStrategy.build()
+                    .partitionKey("p").writePartition("a").addReadPartition("a").create();
             assertEquals("a", strategy.getReadPartitions().iterator().next());
             assertEquals(1, strategy.getReadPartitions().size());
+            assertEquals("p", strategy.getPartitionKey());
         }
 
         @Test
-        public void shouldSetTheWritePartitionOnConstruction() {
-            final PartitionStrategy strategy = new PartitionStrategy("p", "a");
+        public void shouldConstructPartitionStrategyWithMultipleReadPartitions() {
+            final PartitionStrategy strategy = PartitionStrategy.build()
+                    .partitionKey("p").writePartition("a")
+                    .addReadPartition("a")
+                    .addReadPartition("b")
+                    .addReadPartition("c").create();
+
+            assertTrue(IteratorUtils.asList(strategy.getReadPartitions().iterator()).contains("a"));
+            assertTrue(IteratorUtils.asList(strategy.getReadPartitions().iterator()).contains("b"));
+            assertTrue(IteratorUtils.asList(strategy.getReadPartitions().iterator()).contains("c"));
+            assertEquals(3, strategy.getReadPartitions().size());
             assertEquals("p", strategy.getPartitionKey());
         }
     }
@@ -103,7 +115,8 @@ public class PartitionStrategyTest {
 
         @Test
         public void shouldIncludeAdditionalHasStepsAndAppendPartitionOnMutatingSteps() {
-            final PartitionStrategy strategy = new PartitionStrategy("p", "a");
+            final PartitionStrategy strategy = PartitionStrategy.build()
+                    .partitionKey("p").writePartition("a").addReadPartition("a").create();
 
             if (hasMutatingStep) {
                 if (TraversalHelper.hasStepOfAssignableClass(AddEdgeStep.class, traversal.asAdmin())) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a9e0d91a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
index 1b3de16..cd0e219 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/PartitionStrategyProcessTest.java
@@ -39,12 +39,13 @@ import static org.junit.Assert.assertNotNull;
 @UseEngine(TraversalEngine.Type.STANDARD)
 public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
     private static final String partition = "gremlin.partitionGraphStrategy.partition";
-    private final PartitionStrategy partitionStrategy = new PartitionStrategy(partition, "A");
 
     @Test
     @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
     public void shouldAppendPartitionToVertex() {
-        final Vertex v = create().addV("any", "thing").next();
+        final PartitionStrategy partitionStrategy = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("A").addReadPartition("A").create();
+        final Vertex v = create(partitionStrategy).addV("any", "thing").next();
 
         assertNotNull(v);
         assertEquals("thing", v.property("any").value());
@@ -54,7 +55,9 @@ public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
     @Test
     @FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE)
     public void shouldAppendPartitionToEdge() {
-        final GraphTraversalSource source = create();
+        final PartitionStrategy partitionStrategy = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("A").addReadPartition("A").create();
+        final GraphTraversalSource source = create(partitionStrategy);
         final Vertex v1 = source.addV("any", "thing").next();
         final Vertex v2 = source.addV("some", "thing").next();
         final Edge e = source.V(v1.id()).addInE("connectsTo", v2, "every", "thing").next();
@@ -76,10 +79,25 @@ public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
     @Test
     @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
     public void shouldWriteVerticesToMultiplePartitions() {
-        final GraphTraversalSource source = create();
-        final Vertex vA = source.addV("any", "a").next();
-        partitionStrategy.setWritePartition("B");
-        final Vertex vB = source.addV("any", "b").next();
+        final PartitionStrategy partitionStrategyAA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("A").addReadPartition("A").create();
+        final GraphTraversalSource sourceAA = create(partitionStrategyAA);
+
+        final PartitionStrategy partitionStrategyBA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("B").addReadPartition("A").create();
+        final GraphTraversalSource sourceBA = create(partitionStrategyBA);
+
+        final PartitionStrategy partitionStrategyBB = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("B").addReadPartition("B").create();
+        final GraphTraversalSource sourceBB = create(partitionStrategyBB);
+
+        final PartitionStrategy partitionStrategyBAB = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("B").addReadPartition("A").addReadPartition("B").create();
+        final GraphTraversalSource sourceBAB = create(partitionStrategyBAB);
+
+
+        final Vertex vA = sourceAA.addV("any", "a").next();
+        final Vertex vB = sourceBA.addV("any", "b").next();
 
         assertNotNull(vA);
         assertEquals("a", vA.property("any").value());
@@ -89,29 +107,28 @@ public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
         assertEquals("b", vB.property("any").value());
         assertEquals("B", vB.property(partition).value());
 
-        partitionStrategy.removeReadPartition("B");
-        source.V().forEachRemaining(v -> assertEquals("a", v.property("any").value()));
-
-        partitionStrategy.removeReadPartition("A");
-        partitionStrategy.addReadPartition("B");
-
-        source.V().forEachRemaining(v -> assertEquals("b", v.property("any").value()));
+        sourceBA.V().forEachRemaining(v -> assertEquals("a", v.property("any").value()));
+        sourceBB.V().forEachRemaining(v -> assertEquals("b", v.property("any").value()));
 
-        partitionStrategy.addReadPartition("A");
-        assertEquals(new Long(2), source.V().count().next());
+        assertEquals(new Long(2), sourceBAB.V().count().next());
     }
 
     @Test
     @FeatureRequirementSet(FeatureRequirementSet.Package.VERTICES_ONLY)
     public void shouldThrowExceptionOnVInDifferentPartition() {
-        final GraphTraversalSource source = create();
-        final Vertex vA = source.addV("any", "a").next();
-        assertEquals(vA.id(), source.V(vA.id()).id().next());
+        final PartitionStrategy partitionStrategyAA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("A").addReadPartition("A").create();
+        final GraphTraversalSource sourceAA = create(partitionStrategyAA);
 
-        partitionStrategy.clearReadPartitions();
+        final PartitionStrategy partitionStrategyA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("A").create();
+        final GraphTraversalSource sourceA = create(partitionStrategyA);
+
+        final Vertex vA = sourceAA.addV("any", "a").next();
+        assertEquals(vA.id(), sourceAA.V(vA.id()).id().next());
 
         try {
-            g.V(vA.id());
+            sourceA.V(vA.id());
         } catch (Exception ex) {
             final Exception expected = Graph.Exceptions.elementNotFound(Vertex.class, vA.id());
             assertEquals(expected.getClass(), ex.getClass());
@@ -122,15 +139,20 @@ public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
     @Test
     @FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE)
     public void shouldThrowExceptionOnEInDifferentPartition() {
-        final GraphTraversalSource source = create();
-        final Vertex vA = source.addV("any", "a").next();
-        final Edge e = source.V(vA.id()).addOutE("knows", vA).next();
-        assertEquals(e.id(), g.E(e.id()).id().next());
+        final PartitionStrategy partitionStrategyAA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("A").addReadPartition("A").create();
+        final GraphTraversalSource sourceAA = create(partitionStrategyAA);
 
-        partitionStrategy.clearReadPartitions();
+        final PartitionStrategy partitionStrategyA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("A").create();
+        final GraphTraversalSource sourceA = create(partitionStrategyA);
+
+        final Vertex vA = sourceAA.addV("any", "a").next();
+        final Edge e = sourceAA.V(vA.id()).addOutE("knows", vA).next();
+        assertEquals(e.id(), g.E(e.id()).id().next());
 
         try {
-            g.E(e.id());
+            sourceA.E(e.id());
         } catch (Exception ex) {
             final Exception expected = Graph.Exceptions.elementNotFound(Edge.class, e.id());
             assertEquals(expected.getClass(), ex.getClass());
@@ -141,77 +163,93 @@ public class PartitionStrategyProcessTest extends AbstractGremlinProcessTest {
     @Test
     @FeatureRequirementSet(FeatureRequirementSet.Package.SIMPLE)
     public void shouldWriteToMultiplePartitions() {
-        final GraphTraversalSource source = create();
-        final Vertex vA = source.addV("any", "a").next();
-        final Vertex vAA = source.addV("any", "aa").next();
-        final Edge eAtoAA = source.V(vA.id()).addOutE("a->a", vAA).next();
-
-        partitionStrategy.setWritePartition("B");
-        final Vertex vB = source.addV("any", "b").next();
-        source.V(vA.id()).addOutE("a->b", vB).next();
-
-        partitionStrategy.addReadPartition("B");
-        partitionStrategy.setWritePartition("C");
-        final Vertex vC = source.addV("any", "c").next();
-        final Edge eBtovC = source.V(vB.id()).addOutE("b->c", vC).next();
-        final Edge eAtovC = source.V(vA.id()).addOutE("a->c", vC).next();
-
-        partitionStrategy.clearReadPartitions();
-        assertEquals(0, IteratorUtils.count(source.V()));
-        assertEquals(0, IteratorUtils.count(source.E()));
-
-        partitionStrategy.addReadPartition("A");
-        assertEquals(new Long(2), source.V().count().next());
-        assertEquals(new Long(1), source.E().count().next());
-        assertEquals(new Long(1), source.V(vA.id()).outE().count().next());
-        assertEquals(eAtoAA.id(), source.V(vA.id()).outE().next().id());
-        assertEquals(new Long(1), source.V(vA.id()).out().count().next());
-        assertEquals(vAA.id(), source.V(vA.id()).out().next().id());
-
-        final Vertex vA1 = source.V(vA.id()).next();
-        assertEquals(new Long(1), source.V(vA1).outE().count().next());
-        assertEquals(eAtoAA.id(), source.V(vA1).outE().next().id());
-        assertEquals(new Long(1), source.V(vA1).out().count().next());
-        assertEquals(vAA.id(), source.V(vA1).out().next().id());
-
-        partitionStrategy.addReadPartition("B");
-        assertEquals(new Long(3), source.V().count().next());
-        assertEquals(new Long(2), source.E().count().next());
-
-        partitionStrategy.addReadPartition("C");
-        assertEquals(new Long(4), source.V().count().next());
-        assertEquals(new Long(4), source.E().count().next());
-
-        partitionStrategy.removeReadPartition("A");
-        partitionStrategy.removeReadPartition("B");
-
-        assertEquals(1, IteratorUtils.count(source.V()));
+        final PartitionStrategy partitionStrategyAA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("A").addReadPartition("A").create();
+        final GraphTraversalSource sourceAA = create(partitionStrategyAA);
+
+        final PartitionStrategy partitionStrategyBA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("B").addReadPartition("A").create();
+        final GraphTraversalSource sourceBA = create(partitionStrategyBA);
+
+        final PartitionStrategy partitionStrategyCAB = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("C").addReadPartition("A").addReadPartition("B").create();
+        final GraphTraversalSource sourceCAB = create(partitionStrategyCAB);
+
+        final PartitionStrategy partitionStrategyC = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("C").create();
+        final GraphTraversalSource sourceC = create(partitionStrategyC);
+
+        final PartitionStrategy partitionStrategyCA = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("C").addReadPartition("A").create();
+        final GraphTraversalSource sourceCA = create(partitionStrategyCA);
+
+        final PartitionStrategy partitionStrategyCABC = PartitionStrategy.build()
+                .partitionKey(partition)
+                .writePartition("C")
+                .addReadPartition("A")
+                .addReadPartition("B")
+                .addReadPartition("C").create();
+        final GraphTraversalSource sourceCABC = create(partitionStrategyCABC);
+
+        final PartitionStrategy partitionStrategyCC = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("C").addReadPartition("C").create();
+        final GraphTraversalSource sourceCC = create(partitionStrategyCC);
+
+        final PartitionStrategy partitionStrategyCBC = PartitionStrategy.build()
+                .partitionKey(partition).writePartition("C").addReadPartition("C").addReadPartition("B").create();
+        final GraphTraversalSource sourceCBC = create(partitionStrategyCBC);
+
+        final Vertex vA = sourceAA.addV("any", "a").next();
+        final Vertex vAA = sourceAA.addV("any", "aa").next();
+        final Edge eAtoAA = sourceAA.V(vA.id()).addOutE("a->a", vAA).next();
+
+        final Vertex vB = sourceBA.addV("any", "b").next();
+        sourceBA.V(vA.id()).addOutE("a->b", vB).next();
+
+        final Vertex vC = sourceCAB.addV("any", "c").next();
+        final Edge eBtovC = sourceCAB.V(vB.id()).addOutE("b->c", vC).next();
+        final Edge eAtovC = sourceCAB.V(vA.id()).addOutE("a->c", vC).next();
+
+        assertEquals(0, IteratorUtils.count(sourceC.V()));
+        assertEquals(0, IteratorUtils.count(sourceC.E()));
+
+        assertEquals(new Long(2), sourceCA.V().count().next());
+        assertEquals(new Long(1), sourceCA.E().count().next());
+        assertEquals(new Long(1), sourceCA.V(vA.id()).outE().count().next());
+        assertEquals(eAtoAA.id(), sourceCA.V(vA.id()).outE().next().id());
+        assertEquals(new Long(1), sourceCA.V(vA.id()).out().count().next());
+        assertEquals(vAA.id(), sourceCA.V(vA.id()).out().next().id());
+
+        final Vertex vA1 = sourceCA.V(vA.id()).next();
+        assertEquals(new Long(1), sourceCA.V(vA1).outE().count().next());
+        assertEquals(eAtoAA.id(), sourceCA.V(vA1).outE().next().id());
+        assertEquals(new Long(1), sourceCA.V(vA1).out().count().next());
+        assertEquals(vAA.id(), sourceCA.V(vA1).out().next().id());
+
+        assertEquals(new Long(3), sourceCAB.V().count().next());
+        assertEquals(new Long(2), sourceCAB.E().count().next());
+
+        assertEquals(new Long(4), sourceCABC.V().count().next());
+        assertEquals(new Long(4), sourceCABC.E().count().next());
+
+        assertEquals(1, IteratorUtils.count(sourceCC.V()));
         // two edges are in the "C" partition, but one each of their incident vertices are not
-        assertEquals(2, IteratorUtils.count(source.E()));
+        assertEquals(2, IteratorUtils.count(sourceCC.E()));
 
         // two edges are in the "C" partition, but one each of their incident vertices are not
-        assertEquals(new Long(2), source.V(vC.id()).inE().count().next());
-        assertEquals(new Long(0), source.V(vC.id()).in().count().next());
-
-        partitionStrategy.addReadPartition("B");
+        assertEquals(new Long(2), sourceCC.V(vC.id()).inE().count().next());
+        assertEquals(new Long(0), sourceCC.V(vC.id()).in().count().next());
 
         // excluded vertices; vA is not in {B,C}
-        assertEquals(new Long(2), source.V(vC.id()).inE().count().next());
-        assertEquals(new Long(1), source.V(vC.id()).in().count().next());
-        assertEquals(vC.id(), source.E(eBtovC.id()).inV().id().next());
-        assertEquals(vB.id(), source.E(eBtovC.id()).outV().id().next());
-        assertEquals(vC.id(), source.E(eAtovC.id()).inV().id().next());
-        assertFalse(source.E(eAtovC.id()).outV().hasNext());
-    }
-
-    private GraphTraversalSource create() {
-        resetPartitionStrategy();
-        return graphProvider.traversal(graph, partitionStrategy);
+        assertEquals(new Long(2), sourceCBC.V(vC.id()).inE().count().next());
+        assertEquals(new Long(1), sourceCBC.V(vC.id()).in().count().next());
+        assertEquals(vC.id(), sourceCBC.E(eBtovC.id()).inV().id().next());
+        assertEquals(vB.id(), sourceCBC.E(eBtovC.id()).outV().id().next());
+        assertEquals(vC.id(), sourceCBC.E(eAtovC.id()).inV().id().next());
+        assertFalse(sourceCBC.E(eAtovC.id()).outV().hasNext());
     }
 
-    private void resetPartitionStrategy() {
-        partitionStrategy.clearReadPartitions();
-        partitionStrategy.setWritePartition("A");
-        partitionStrategy.addReadPartition("A");
+    private GraphTraversalSource create(final PartitionStrategy strategy) {
+        return graphProvider.traversal(graph, strategy);
     }
 }


[2/2] incubator-tinkerpop git commit: Merge remote-tracking branch 'origin/master'

Posted by sp...@apache.org.
Merge remote-tracking branch 'origin/master'


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

Branch: refs/heads/master
Commit: c53d61e1b7a9985db27cf06a34744237eccd1061
Parents: a9e0d91 e2d3eee
Author: Stephen Mallette <sp...@apache.org>
Authored: Wed Mar 18 10:37:27 2015 -0400
Committer: Stephen Mallette <sp...@apache.org>
Committed: Wed Mar 18 10:37:27 2015 -0400

----------------------------------------------------------------------
 .../traversal/TraversalVertexProgram.java       | 20 +++---
 .../computer/util/VertexProgramPool.java        | 71 ++++++++++++++++++++
 .../graph/traversal/step/map/TreeStep.java      |  4 +-
 .../gremlin/structure/io/gryo/GryoPool.java     | 24 +++----
 .../structure/util/detached/DetachedEdge.java   |  2 +-
 .../util/detached/DetachedElement.java          |  8 ++-
 .../structure/util/detached/DetachedVertex.java | 36 +++++-----
 .../traversal/step/sideEffect/TreeTest.java     |  2 +-
 .../computer/giraph/GiraphComputeVertex.java    |  7 +-
 .../computer/giraph/GiraphGraphComputer.java    |  2 +-
 .../computer/giraph/GiraphMessenger.java        |  2 +-
 .../computer/giraph/GiraphWorkerContext.java    | 23 ++++---
 .../gremlin/hadoop/HadoopGraphProvider.java     | 11 ++-
 13 files changed, 144 insertions(+), 68 deletions(-)
----------------------------------------------------------------------