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();
}
}