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/02/25 18:53:22 UTC
incubator-tinkerpop git commit: TailGlobalStep is no longer an OLAP
end step. CollectingBarriers are up next -- Aggregate, Order, Dedup.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1166 d1812f806 -> e6d9d6d25
TailGlobalStep is no longer an OLAP end step. CollectingBarriers are up next -- Aggregate, Order, Dedup.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/e6d9d6d2
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/e6d9d6d2
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/e6d9d6d2
Branch: refs/heads/TINKERPOP-1166
Commit: e6d9d6d2581dd3ef4c32d336df0eb7a8989bbaba
Parents: d1812f8
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Feb 25 10:53:18 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Feb 25 10:53:18 2016 -0700
----------------------------------------------------------------------
.../traversal/TraversalVertexProgram.java | 10 +++--
.../computer/traversal/TraverserExecutor.java | 6 ++-
.../traversal/step/filter/RangeGlobalStep.java | 9 ++--
.../traversal/step/filter/TailGlobalStep.java | 45 +++++++++++++++++++-
.../ComputerVerificationStrategy.java | 3 +-
5 files changed, 61 insertions(+), 12 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e6d9d6d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
index 70dbf94..8d8e245 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java
@@ -37,6 +37,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
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.GraphStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
@@ -120,7 +121,10 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
this.mapReducers.add(mapReducer.getMapReduce());
this.memoryComputeKeys.add(MemoryComputeKey.of(mapReducer.getMapReduce().getMemoryKey(), MemoryComputeKey.setOperator(), false, false));
}
- if (!(this.traversal.get().getEndStep() instanceof SideEffectCapStep) && !(this.traversal.get().getEndStep() instanceof ReducingBarrierStep) && !(this.traversal.get().getEndStep() instanceof RangeGlobalStep)) {
+ if (!(this.traversal.get().getEndStep() instanceof SideEffectCapStep) &&
+ !(this.traversal.get().getEndStep() instanceof ReducingBarrierStep) &&
+ !(this.traversal.get().getEndStep() instanceof RangeGlobalStep) &&
+ !(this.traversal.get().getEndStep() instanceof TailGlobalStep)) {
this.mapReducers.add(new TraverserMapReduce(this.traversal.get()));
}
@@ -204,8 +208,8 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
graphComputing.getMemoryComputeKey().ifPresent(memoryKey -> {
final String key = memoryKey.getKey();
if (memory.exists(key)) {
- if(graphComputing instanceof RangeGlobalStep) {
- memory.set(TraverserMapReduce.TRAVERSERS, ((TraverserSet)graphComputing.generateFinalResult(memory.get(key))).iterator());
+ if (graphComputing instanceof RangeGlobalStep || graphComputing instanceof TailGlobalStep) {
+ memory.set(TraverserMapReduce.TRAVERSERS, ((TraverserSet) graphComputing.generateFinalResult(memory.get(key))).iterator());
} else {
memory.set(key, graphComputing.generateFinalResult(memory.get(key)));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e6d9d6d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java
index 18bf48f..95141f4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java
@@ -24,7 +24,9 @@ import org.apache.tinkerpop.gremlin.process.computer.Messenger;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Bypassing;
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.util.EmptyStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
@@ -108,8 +110,8 @@ public final class TraverserExecutor {
private static void drainStep(final Step<?, ?> step, final TraverserSet<?> aliveTraversers, final TraverserSet<?> haltedTraversers, final Memory memory) {
if (step instanceof ReducingBarrierStep) {
memory.add(ReducingBarrierStep.REDUCING, step.next().get());
- } else if (step instanceof RangeGlobalStep) {
- ((RangeGlobalStep) step).setBypass(true);
+ } else if (step instanceof RangeGlobalStep || step instanceof TailGlobalStep) {
+ ((Bypassing) step).setBypass(true);
final TraverserSet<?> traverserSet = new TraverserSet<>();
step.forEachRemaining(traverser -> {
traverser.asAdmin().detach();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e6d9d6d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
index bf64761..5a43a57 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
@@ -31,6 +31,7 @@ import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import java.io.Serializable;
import java.util.Collections;
+import java.util.Iterator;
import java.util.Optional;
import java.util.Set;
import java.util.concurrent.atomic.AtomicLong;
@@ -40,7 +41,7 @@ import java.util.function.BinaryOperator;
* @author Bob Briody (http://bobbriody.com)
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging, GraphComputing<TraverserSet>, Bypassing {
+public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging, GraphComputing<TraverserSet<S>>, Bypassing {
private long low;
private final long high;
@@ -139,9 +140,9 @@ public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging,
}
@Override
- public TraverserSet generateFinalResult(final TraverserSet traverserSet) {
- final TraverserSet resultSet = new TraverserSet();
- this.addStarts(traverserSet.iterator());
+ public TraverserSet<S> generateFinalResult(final TraverserSet<S> traverserSet) {
+ final TraverserSet<S> resultSet = new TraverserSet<>();
+ this.addStarts((Iterator) traverserSet.iterator());
this.forEachRemaining(t -> resultSet.add(t.asAdmin()));
return resultSet;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e6d9d6d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
index 19d3d95..2d5c798 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/TailGlobalStep.java
@@ -18,22 +18,29 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
+import org.apache.tinkerpop.gremlin.process.computer.MemoryComputeKey;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Bypassing;
+import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
+import java.io.Serializable;
import java.util.ArrayDeque;
import java.util.Collections;
import java.util.Deque;
+import java.util.Iterator;
+import java.util.Optional;
import java.util.Set;
+import java.util.function.BinaryOperator;
/**
* @author Matt Frantz (http://github.com/mhfrantz)
*/
-public final class TailGlobalStep<S> extends AbstractStep<S, S> implements Bypassing {
+public final class TailGlobalStep<S> extends AbstractStep<S, S> implements Bypassing, GraphComputing<TraverserSet<S>> {
private final long limit;
private Deque<Traverser.Admin<S>> tail;
@@ -116,4 +123,40 @@ public final class TailGlobalStep<S> extends AbstractStep<S, S> implements Bypas
}
this.tail.add(start);
}
+
+ @Override
+ public void onGraphComputer() {
+
+ }
+
+ @Override
+ public Optional<MemoryComputeKey> getMemoryComputeKey() {
+ return Optional.of(MemoryComputeKey.of(this.getId(), new TailBiOperator(this.limit), false, true));
+ }
+
+ @Override
+ public TraverserSet<S> generateFinalResult(final TraverserSet<S> traverserSet) {
+ final TraverserSet<S> resultSet = new TraverserSet<>();
+ this.addStarts((Iterator) traverserSet.iterator());
+ this.forEachRemaining(t -> resultSet.add(t.asAdmin()));
+ return resultSet;
+ }
+
+ /////////////////////
+
+ public static final class TailBiOperator implements BinaryOperator<TraverserSet>, Serializable {
+
+ private final long limit;
+
+ public TailBiOperator(final long limit) {
+ this.limit = limit;
+ }
+
+ @Override
+ public TraverserSet apply(final TraverserSet mutatingSeed, final TraverserSet set) {
+ if (mutatingSeed.size() < this.limit)
+ mutatingSeed.addAll(set);
+ return mutatingSeed;
+ }
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/e6d9d6d2/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
index ca61103..271e3d3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
@@ -65,7 +65,6 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg
ReducingBarrierStep.class,
SupplyingBarrierStep.class,
OrderGlobalStep.class,
- TailGlobalStep.class,
DedupGlobalStep.class));
private ComputerVerificationStrategy() {
@@ -113,7 +112,7 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg
throw new VerificationException("The final CollectingBarrierStep can not operate on edges or their properties:" + endStep, traversal);
}
///
- if (endStep instanceof TailGlobalStep || endStep instanceof DedupGlobalStep)
+ if (endStep instanceof DedupGlobalStep)
((Bypassing) endStep).setBypass(true);
if (endStep instanceof DedupGlobalStep && !((DedupGlobalStep) endStep).getScopeKeys().isEmpty())
throw new VerificationException("Path history de-duplication is not possible in GraphComputer:" + endStep, traversal);