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 2016/12/14 16:37:19 UTC

tinkerpop git commit: added StringFactory rules for GraphActors, Partitioner, and Partition. Realized someting profoundly sucky about DedupGlobalStep. Exposed more test cases to AkkaGraphActors.

Repository: tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1564 3ad30d2f6 -> 55735cd34


added StringFactory rules for GraphActors, Partitioner, and Partition. Realized someting profoundly sucky about DedupGlobalStep. Exposed more test cases to AkkaGraphActors.


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

Branch: refs/heads/TINKERPOP-1564
Commit: 55735cd347e5308dee67d11ac7c700892916e601
Parents: 3ad30d2
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Dec 14 09:37:14 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Dec 14 09:37:14 2016 -0700

----------------------------------------------------------------------
 .../akka/process/actor/AkkaGraphActors.java     |  8 +++-
 .../akka/process/AkkaActorsProvider.java        |  1 -
 .../actor/traversal/TraversalMasterProgram.java |  8 ++--
 .../traversal/step/filter/DedupGlobalStep.java  |  3 +-
 .../tinkerpop/gremlin/structure/Partition.java  | 15 +++++--
 .../gremlin/structure/util/StringFactory.java   | 15 +++++++
 .../util/partitioner/GlobalPartitioner.java     | 41 ++++++++++++++++++--
 .../util/partitioner/HashPartitioner.java       | 32 ++++++++++++++-
 8 files changed, 108 insertions(+), 15 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/55735cd3/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actor/AkkaGraphActors.java
----------------------------------------------------------------------
diff --git a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actor/AkkaGraphActors.java b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actor/AkkaGraphActors.java
index b28f536..362db97 100644
--- a/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actor/AkkaGraphActors.java
+++ b/akka-gremlin/src/main/java/org/apache/tinkerpop/gremlin/akka/process/actor/AkkaGraphActors.java
@@ -25,9 +25,10 @@ import com.typesafe.config.Config;
 import com.typesafe.config.ConfigFactory;
 import com.typesafe.config.ConfigValueFactory;
 import org.apache.tinkerpop.gremlin.process.actor.ActorProgram;
-import org.apache.tinkerpop.gremlin.process.actor.GraphActors;
 import org.apache.tinkerpop.gremlin.process.actor.Address;
+import org.apache.tinkerpop.gremlin.process.actor.GraphActors;
 import org.apache.tinkerpop.gremlin.structure.Partitioner;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
 import java.util.concurrent.CompletableFuture;
 import java.util.concurrent.Future;
@@ -52,6 +53,11 @@ public final class AkkaGraphActors<R> implements GraphActors<R> {
     }
 
     @Override
+    public String toString() {
+        return StringFactory.graphActorsString(this);
+    }
+
+    @Override
     public Address.Master master() {
         return this.master;
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/55735cd3/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
----------------------------------------------------------------------
diff --git a/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java b/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
index 9c8b320..bf9e092 100644
--- a/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
+++ b/akka-gremlin/src/test/java/org/apache/tinkerpop/gremlin/akka/process/AkkaActorsProvider.java
@@ -68,7 +68,6 @@ public class AkkaActorsProvider extends AbstractGraphProvider {
             "g_VX1X_repeatXbothEXcreatedX_whereXwithoutXeXX_aggregateXeX_otherVX_emit_path",
             "g_withBulkXfalseX_withSackX1_sumX_V_out_barrier_sack",
             "g_V_both_groupCountXaX_out_capXaX_selectXkeysX_unfold_both_groupCountXaX_capXaX",
-            "g_V_both_both_dedup_byXoutE_countX_name",
             GraphTest.Traversals.class.getCanonicalName(),
             GroupTest.Traversals.class.getCanonicalName(),
             ComplexTest.Traversals.class.getCanonicalName(),

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/55735cd3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalMasterProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalMasterProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalMasterProgram.java
index 7846d53..2cd5f7f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalMasterProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/actor/traversal/TraversalMasterProgram.java
@@ -35,6 +35,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Distributing;
 import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Pushing;
+import org.apache.tinkerpop.gremlin.process.traversal.step.SideEffectCapable;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
@@ -106,9 +107,10 @@ final class TraversalMasterProgram<M> implements ActorProgram.Master<M> {
                                     new OrderedTraverser<>(step.next(), this.orderCounter++));
                         }
                     } else {
-                        this.traversal.getSideEffects().forEach((k, v) -> {
-                            this.broadcast(new SideEffectSetMessage(k, v));
-                        });
+                        if (step instanceof SideEffectCapable) {
+                            final String key = ((SideEffectCapable) step).getSideEffectKey();
+                            this.broadcast(new SideEffectSetMessage(key, this.traversal.getSideEffects().get(key)));
+                        }
                         this.broadcast(new BarrierDoneMessage(barrier));
                         barrier.done();
                     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/55735cd3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
index 2bd9c32..b89c64b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
@@ -173,8 +173,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
                 object = TraversalUtil.applyNullable(traverser, this.dedupTraversal);
             }
             if (!map.containsKey(object)) {
-                traverser.setBulk(1l);
-                traverser.set(DetachedFactory.detach(traverser.get(), true));
+                traverser.setBulk(1L);
                 map.put(object, traverser);
             }
         }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/55735cd3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Partition.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Partition.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Partition.java
index 12faca9..dbb5260 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Partition.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Partition.java
@@ -19,8 +19,10 @@
 
 package org.apache.tinkerpop.gremlin.structure;
 
+import java.net.InetAddress;
 import java.net.URI;
 import java.util.Iterator;
+import java.util.UUID;
 
 /**
  * A {@code Partition} represents a physical or logical split of the underlying {@link Graph} structure.
@@ -59,11 +61,18 @@ public interface Partition {
     public Iterator<Edge> edges(final Object... ids);
 
     /**
-     * Get the {@link URI} location of the partition.
+     * Get the {@link UUID} of the partition.
      *
-     * @return the location of the partition
+     * @return the unique id of the partition
      */
-    public URI location();
+    public UUID guid();
+
+    /**
+     * Get the {@link InetAddress} of the locations physical location.
+     *
+     * @return the physical location of the partition.
+     */
+    public InetAddress location();
 
     public static interface PhysicalPartition extends Partition {
     }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/55735cd3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
index bcead2d..553ebe3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/StringFactory.java
@@ -18,6 +18,7 @@
  */
 package org.apache.tinkerpop.gremlin.structure.util;
 
+import org.apache.tinkerpop.gremlin.process.actor.GraphActors;
 import org.apache.tinkerpop.gremlin.process.computer.Computer;
 import org.apache.tinkerpop.gremlin.process.computer.ComputerResult;
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
@@ -35,6 +36,8 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalRing;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Partition;
+import org.apache.tinkerpop.gremlin.structure.Partitioner;
 import org.apache.tinkerpop.gremlin.structure.Property;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.VertexProperty;
@@ -139,6 +142,18 @@ public final class StringFactory {
         return graphComputer.getClass().getSimpleName().toLowerCase();
     }
 
+    public static String graphActorsString(final GraphActors graphActors) {
+        return graphActors.getClass().getSimpleName().toLowerCase();
+    }
+
+    public static String partitionerString(final Partitioner partitioner) {
+        return "partitioner" + L_BRACKET + partitioner.getClass().getSimpleName().toLowerCase() + COLON + partitioner.getPartitions().size() + R_BRACKET;
+    }
+
+    public static String partitionString(final Partition partition) {
+        return "partition" + L_BRACKET + partition.location().getHostAddress() + COLON + partition.guid() + R_BRACKET;
+    }
+
     public static String traversalSourceString(final TraversalSource traversalSource) {
         final String graphString = traversalSource.getGraph().toString();
         final Optional<Computer> optional = VertexProgramStrategy.getComputer(traversalSource.getStrategies());

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/55735cd3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/GlobalPartitioner.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/GlobalPartitioner.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/GlobalPartitioner.java
index 910de8e..361750b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/GlobalPartitioner.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/GlobalPartitioner.java
@@ -25,11 +25,14 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Partition;
 import org.apache.tinkerpop.gremlin.structure.Partitioner;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
-import java.net.URI;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
 import java.util.Collections;
 import java.util.Iterator;
 import java.util.List;
+import java.util.UUID;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -52,12 +55,24 @@ public final class GlobalPartitioner implements Partitioner {
         return this.partition;
     }
 
+    @Override
+    public String toString() {
+        return StringFactory.partitionerString(this);
+    }
+
     private class GlobalPartition implements Partition {
 
         private final Graph graph;
+        private final UUID guid = UUID.randomUUID();
+        private final InetAddress location;
 
         private GlobalPartition(final Graph graph) {
             this.graph = graph;
+            try {
+                this.location = InetAddress.getLocalHost();
+            } catch (final UnknownHostException e) {
+                throw new IllegalStateException(e.getMessage(), e);
+            }
         }
 
         @Override
@@ -76,8 +91,28 @@ public final class GlobalPartitioner implements Partitioner {
         }
 
         @Override
-        public URI location() {
-            return URI.create("localhost");
+        public String toString() {
+            return StringFactory.partitionString(this);
+        }
+
+        @Override
+        public boolean equals(final Object other) {
+            return other instanceof Partition && ((Partition) other).guid().equals(this.guid);
+        }
+
+        @Override
+        public int hashCode() {
+            return this.guid.hashCode() + this.location.hashCode();
+        }
+
+        @Override
+        public UUID guid() {
+            return this.guid;
+        }
+
+        @Override
+        public InetAddress location() {
+            return this.location;
         }
     }
 }

http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/55735cd3/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/HashPartitioner.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/HashPartitioner.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/HashPartitioner.java
index 432918f..b3d3db7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/HashPartitioner.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/util/partitioner/HashPartitioner.java
@@ -24,12 +24,14 @@ import org.apache.tinkerpop.gremlin.structure.Element;
 import org.apache.tinkerpop.gremlin.structure.Partition;
 import org.apache.tinkerpop.gremlin.structure.Partitioner;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
 
-import java.net.URI;
+import java.net.InetAddress;
 import java.util.ArrayList;
 import java.util.Iterator;
 import java.util.List;
+import java.util.UUID;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -47,6 +49,11 @@ public final class HashPartitioner implements Partitioner {
     }
 
     @Override
+    public String toString() {
+        return StringFactory.partitionerString(this);
+    }
+
+    @Override
     public List<Partition> getPartitions() {
         return this.partitions;
     }
@@ -65,6 +72,7 @@ public final class HashPartitioner implements Partitioner {
         private final Partition basePartition;
         private final int totalSplits;
         private final int splitId;
+        private final UUID guid = UUID.randomUUID();
 
         private HashPartition(final Partition basePartition, final int splitId, final int totalSplits) {
             this.basePartition = basePartition;
@@ -88,7 +96,27 @@ public final class HashPartitioner implements Partitioner {
         }
 
         @Override
-        public URI location() {
+        public String toString() {
+            return StringFactory.partitionString(this);
+        }
+
+        @Override
+        public boolean equals(final Object other) {
+            return other instanceof Partition && ((Partition) other).guid().equals(this.guid);
+        }
+
+        @Override
+        public int hashCode() {
+            return this.guid.hashCode() + this.location().hashCode();
+        }
+
+        @Override
+        public UUID guid() {
+            return this.guid;
+        }
+
+        @Override
+        public InetAddress location() {
             return this.basePartition.location();
         }
     }