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 2015/02/18 23:30:27 UTC
[1/5] incubator-tinkerpop git commit: reducing barrier work with
@dkuppitz.
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/master 58affa2f3 -> 70391673c
reducing barrier work with @dkuppitz.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/2b949aef
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/2b949aef
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/2b949aef
Branch: refs/heads/master
Commit: 2b949aef49d6c9c239b980c2a6bc93d68dc95dd5
Parents: cae8df0
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Feb 18 14:41:29 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Feb 18 14:41:29 2015 -0700
----------------------------------------------------------------------
.../traversal/TraversalVertexProgram.java | 3 +-
.../traversal/step/map/ComputerResultStep.java | 3 +
.../mapreduce/TraverserMapReduce.java | 47 ++++---------
.../traversal/step/filter/DedupGlobalStep.java | 2 +-
.../traversal/step/map/CountGlobalStep.java | 62 +++++++++++++++-
.../graph/traversal/step/map/FoldStep.java | 2 +-
.../graph/traversal/step/map/MaxGlobalStep.java | 2 +-
.../traversal/step/map/MeanGlobalStep.java | 2 +-
.../graph/traversal/step/map/MinGlobalStep.java | 2 +-
.../graph/traversal/step/map/SumGlobalStep.java | 2 +-
.../step/util/ReducingBarrierStep.java | 74 +++++++++++++++++---
.../traversal/strategy/ReducingStrategy.java | 36 +---------
.../process/traversal/step/Reducing.java | 16 +++--
.../gremlin/process/ProcessComputerSuite.java | 4 +-
14 files changed, 165 insertions(+), 92 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/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 c706e77..edc1643 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
@@ -35,6 +35,7 @@ import org.apache.tinkerpop.gremlin.process.computer.util.AbstractVertexProgramB
import org.apache.tinkerpop.gremlin.process.computer.util.LambdaHolder;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.GraphStep;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.SideEffectCapStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalMatrix;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -114,7 +115,7 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
for (final MapReducer<?, ?, ?, ?, ?> mapReducer : TraversalHelper.getStepsOfAssignableClassRecurssively(MapReducer.class, this.traversal)) {
this.mapReducers.add(mapReducer.getMapReduce());
}
- if (!(this.traversal.getEndStep().getPreviousStep() instanceof SideEffectCapStep))
+ if (!(this.traversal.getEndStep().getPreviousStep() instanceof SideEffectCapStep) && !(this.traversal.getEndStep().getPreviousStep() instanceof ReducingBarrierStep))
this.mapReducers.add(new TraverserMapReduce(this.traversal.getEndStep().getPreviousStep()));
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
index 9ab2208..eb86435 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
@@ -26,6 +26,7 @@ import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.sideEffect.mapreduce.TraverserMapReduce;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.SideEffectCapStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.step.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -104,6 +105,8 @@ public final class ComputerResultStep<S> extends AbstractStep<S, S> {
}
this.traversers = IteratorUtils.of(this.getTraversal().getTraverserGenerator().generate((S) sideEffects, this, 1l));
}
+ } else if (endStep instanceof ReducingBarrierStep) {
+ this.traversers = result.memory().get(Graph.Hidden.hide("reducingBarrier"));
} else {
this.traversers = result.memory().get(TraverserMapReduce.TRAVERSERS);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
index 044e2ed..0048531 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/sideEffect/mapreduce/TraverserMapReduce.java
@@ -21,23 +21,19 @@ package org.apache.tinkerpop.gremlin.process.computer.traversal.step.sideEffect.
import org.apache.commons.configuration.Configuration;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.util.GraphComputerHelper;
import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.ComparatorHolder;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
import org.apache.tinkerpop.gremlin.structure.Graph;
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.util.Comparator;
import java.util.Iterator;
import java.util.Optional;
-import java.util.function.BiFunction;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -48,7 +44,6 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Object
private Traversal.Admin<?, ?> traversal;
private Optional<Comparator<Comparable>> comparator = Optional.empty();
- private Optional<Reducing.Reducer> reducer = Optional.empty();
private TraverserMapReduce() {
}
@@ -56,7 +51,6 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Object
public TraverserMapReduce(final Step traversalEndStep) {
this.traversal = traversalEndStep.getTraversal();
this.comparator = Optional.ofNullable(traversalEndStep instanceof ComparatorHolder ? GraphComputerHelper.chainComparators(((ComparatorHolder) traversalEndStep).getComparators()) : null);
- this.reducer = Optional.ofNullable(traversalEndStep instanceof Reducing ? ((Reducing) traversalEndStep).getReducer() : null);
}
@Override
@@ -64,12 +58,11 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Object
this.traversal = TraversalVertexProgram.getTraversalSupplier(configuration).get();
final Step endStep = this.traversal.getEndStep().getPreviousStep(); // don't get the ComputerResultStep
this.comparator = Optional.ofNullable(endStep instanceof ComparatorHolder ? GraphComputerHelper.chainComparators(((ComparatorHolder) endStep).getComparators()) : null);
- this.reducer = Optional.ofNullable(endStep instanceof Reducing ? ((Reducing) endStep).getReducer() : null);
}
@Override
public boolean doStage(final Stage stage) {
- return stage.equals(Stage.MAP) || (stage.equals(Stage.REDUCE) && this.reducer.isPresent());
+ return stage.equals(Stage.MAP);
}
@Override
@@ -81,40 +74,26 @@ public final class TraverserMapReduce extends StaticMapReduce<Comparable, Object
}
@Override
- public void reduce(final Comparable key, final Iterator<Object> values, final ReduceEmitter<Comparable, Object> emitter) {
- Object mutatingSeed = this.reducer.get().getSeedSupplier().get();
- final BiFunction function = this.reducer.get().getBiFunction();
- final boolean onTraverser = this.reducer.get().onTraverser();
- while (values.hasNext()) {
- mutatingSeed = function.apply(mutatingSeed, onTraverser ? values.next() : ((Traverser) values.next()).get());
- }
- emitter.emit(key, this.traversal.getTraverserGenerator().generate(Reducing.FinalGet.tryFinalGet(mutatingSeed), (Step) this.traversal.getEndStep(), 1l));
- }
-
- @Override
public Optional<Comparator<Comparable>> getMapKeySort() {
return this.comparator;
}
@Override
public Iterator<Object> generateFinalResult(final Iterator<KeyValue<Comparable, Object>> keyValues) {
- if (this.reducer.isPresent() && !keyValues.hasNext())
- return IteratorUtils.of(this.traversal.getTraverserGenerator().generate(this.reducer.get().getSeedSupplier().get(), (Step) this.traversal.getEndStep(), 1l));
- else {
- return new Iterator<Object>() {
- @Override
- public boolean hasNext() {
- return keyValues.hasNext();
- }
-
- @Override
- public Object next() {
- return keyValues.next().getValue();
- }
- };
- }
+ return new Iterator<Object>() {
+ @Override
+ public boolean hasNext() {
+ return keyValues.hasNext();
+ }
+
+ @Override
+ public Object next() {
+ return keyValues.next().getValue();
+ }
+ };
}
+
@Override
public String getMemoryKey() {
return TRAVERSERS;
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
index ee148b3..b4950be 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
@@ -67,7 +67,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Reversibl
return new Reducer<>(HashSet::new, (set, start) -> {
set.add(TraversalUtil.apply(start, this.dedupTraversal));
return set;
- }, true);
+ }, false, true);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java
index 0179ec9..62c714f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java
@@ -18,22 +18,33 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
+import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
+import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.io.Serializable;
import java.util.EnumSet;
+import java.util.Iterator;
import java.util.Set;
import java.util.function.BiFunction;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> implements Reducing<Long, Traverser<S>> {
+public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> implements Reducing<Long, Traverser<S>>, MapReducer {
private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(TraverserRequirement.BULK);
@@ -51,10 +62,15 @@ public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> imple
@Override
public Reducer<Long, Traverser<S>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true);
+ return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true, true);
}
- /////
+ @Override
+ public MapReduce<MapReduce.NullObject, Long, MapReduce.NullObject, Long, Long> getMapReduce() {
+ return (MapReduce) new CountMapReduce();
+ }
+
+ ///////////
private static class CountBiFunction<S> implements BiFunction<Long, Traverser<S>, Long>, Serializable {
@@ -73,4 +89,44 @@ public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> imple
return INSTANCE;
}
}
+
+ ///////////
+
+ private class CountMapReduce extends StaticMapReduce<MapReduce.NullObject, Long, MapReduce.NullObject, Long, Iterator<Traverser.Admin<Long>>> {
+
+ @Override
+ public boolean doStage(final MapReduce.Stage stage) {
+ return true;
+ }
+
+ @Override
+ public String getMemoryKey() {
+ return Graph.Hidden.hide("reducingBarrier");
+ }
+
+ @Override
+ public Iterator<Traverser.Admin<Long>> generateFinalResult(final Iterator<KeyValue<NullObject, Long>> keyValues) {
+ return IteratorUtils.of(getTraversal().getTraverserGenerator().generate(keyValues.hasNext() ? keyValues.next().getValue() : 0L, (Step) CountGlobalStep.this, 1L));
+ }
+
+ @Override
+ public void map(final Vertex vertex, final MapEmitter<NullObject, Long> emitter) {
+ vertex.<TraverserSet<?>>property(TraversalVertexProgram.HALTED_TRAVERSERS).ifPresent(traverserSet -> traverserSet.forEach(traverser -> emitter.emit(traverser.bulk())));
+ }
+
+ @Override
+ public void combine(final NullObject key, final Iterator<Long> values, final ReduceEmitter<NullObject, Long> emitter) {
+ this.reduce(key, values, emitter);
+ }
+
+ @Override
+ public void reduce(final NullObject key, final Iterator<Long> values, final ReduceEmitter<NullObject, Long> emitter) {
+ long count = 0l;
+ while (values.hasNext()) {
+ count = count + values.next();
+ }
+ emitter.emit(count);
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java
index fe0633d..fb2dfbf 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java
@@ -51,7 +51,7 @@ public final class FoldStep<S, E> extends ReducingBarrierStep<S, E> implements R
@Override
public Reducer<E, S> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), ((ObjectBiFunction<S, E>) this.getBiFunction()).getBiFunction(), false);
+ return new Reducer<>(this.getSeedSupplier(), ((ObjectBiFunction<S, E>) this.getBiFunction()).getBiFunction(), false, false);
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java
index cdd3bbc..1765340 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java
@@ -48,7 +48,7 @@ public final class MaxGlobalStep<S extends Number> extends ReducingBarrierStep<S
@Override
public Reducer<S, Traverser<S>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true);
+ return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true, true);
}
/////
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java
index 17acfff..4e656a2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java
@@ -51,7 +51,7 @@ public final class MeanGlobalStep<S extends Number, E extends Number> extends Re
@Override
public Reducer<E, Traverser<S>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true);
+ return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), false, true);
}
/////
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java
index a1fd769..1c190cb 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java
@@ -48,7 +48,7 @@ public final class MinGlobalStep<S extends Number> extends ReducingBarrierStep<S
@Override
public Reducer<S, Traverser<S>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true);
+ return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true, true);
}
/////
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java
index e0623db..be8f4e3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java
@@ -54,7 +54,7 @@ public final class SumGlobalStep extends ReducingBarrierStep<Number, Double> imp
@Override
public Reducer<Double, Traverser<Number>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true);
+ return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true, true);
}
/////
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
index 95774c7..0a3f10f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
@@ -22,22 +22,32 @@ import org.apache.tinkerpop.gremlin.process.FastNoSuchElementException;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
+import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.traversal.step.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.structure.Graph;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
import java.io.Serializable;
+import java.util.Iterator;
import java.util.function.BiFunction;
import java.util.function.Supplier;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> {
+public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> implements MapReducer {
private Supplier<E> seedSupplier;
private BiFunction<E, Traverser<S>, E> reducingBiFunction;
private boolean done = false;
+ private boolean byPass =false;
public ReducingBarrierStep(final Traversal.Admin traversal) {
super(traversal);
@@ -59,6 +69,10 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> {
return this.reducingBiFunction;
}
+ public void byPass() {
+ this.byPass = true;
+ }
+
@Override
public void reset() {
super.reset();
@@ -67,13 +81,17 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> {
@Override
public Traverser<E> processNextStart() {
- if (this.done)
- throw FastNoSuchElementException.instance();
- E seed = this.seedSupplier.get();
- while (this.starts.hasNext())
- seed = this.reducingBiFunction.apply(seed, this.starts.next());
- this.done = true;
- return TraversalHelper.getRootTraversal(this.getTraversal()).getTraverserGenerator().generate(Reducing.FinalGet.tryFinalGet(seed), (Step) this, 1l);
+ if(this.byPass) {
+ return (Traverser<E>) this.starts.next();
+ } else {
+ if (this.done)
+ throw FastNoSuchElementException.instance();
+ E seed = this.seedSupplier.get();
+ while (this.starts.hasNext())
+ seed = this.reducingBiFunction.apply(seed, this.starts.next());
+ this.done = true;
+ return TraversalHelper.getRootTraversal(this.getTraversal()).getTraverserGenerator().generate(Reducing.FinalGet.tryFinalGet(seed), (Step) this, 1l);
+ }
}
@Override
@@ -83,6 +101,11 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> {
return clone;
}
+ @Override
+ public MapReduce getMapReduce() {
+ return new DefaultMapReduce();
+ }
+
///////
public static class ObjectBiFunction<S, E> implements BiFunction<E, Traverser<S>, E>, Serializable {
@@ -106,5 +129,40 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> {
///////
+ public class DefaultMapReduce extends StaticMapReduce {
+
+ @Override
+ public boolean doStage(Stage stage) {
+ return !stage.equals(Stage.COMBINE);
+ }
+
+ @Override
+ public String getMemoryKey() {
+ return Graph.Hidden.hide("reducingBarrier");
+ }
+
+ @Override
+ public Object generateFinalResult(final Iterator keyValues) {
+ return ((KeyValue) keyValues.next()).getValue();
+
+ }
+
+ @Override
+ public void map(final Vertex vertex, final MapEmitter emitter) {
+ vertex.<TraverserSet<?>>property(TraversalVertexProgram.HALTED_TRAVERSERS).ifPresent(traverserSet -> traverserSet.forEach(emitter::emit));
+ }
+
+ @Override
+ public void reduce(final Object key, final Iterator values, final ReduceEmitter emitter) {
+ Object mutatingSeed = getSeedSupplier().get();
+ final BiFunction function = getBiFunction();
+ final boolean onTraverser = true;
+ while (values.hasNext()) {
+ mutatingSeed = function.apply(mutatingSeed, onTraverser ? values.next() : ((Traverser) values.next()).get());
+ }
+ emitter.emit(key, getTraversal().getTraverserGenerator().generate(Reducing.FinalGet.tryFinalGet(mutatingSeed), (Step) getTraversal().getEndStep(), 1l));
+ }
+
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
index 5163ac8..f5261b3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
@@ -20,11 +20,7 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.strategy;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
-import org.apache.tinkerpop.gremlin.process.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
-import org.apache.tinkerpop.gremlin.process.traversal.step.AbstractStep;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -42,37 +38,11 @@ public final class ReducingStrategy extends AbstractTraversalStrategy {
return;
final Step endStep = traversal.getEndStep();
- if (endStep instanceof Reducing)
- TraversalHelper.replaceStep(endStep, new ReducingIdentity(traversal, (Reducing) endStep), traversal);
+ if (endStep instanceof ReducingBarrierStep)
+ ((ReducingBarrierStep) endStep).byPass();
}
public static ReducingStrategy instance() {
return INSTANCE;
}
-
- private static class ReducingIdentity extends AbstractStep implements Reducing {
-
- private final Reducer reducer;
- private String reducingStepString;
-
- public ReducingIdentity(final Traversal.Admin traversal, final Reducing reducingStep) {
- super(traversal);
- this.reducer = reducingStep.getReducer();
- this.reducingStepString = reducingStep.toString();
- }
-
- @Override
- public String toString() {
- return TraversalHelper.makeStepString(this, this.reducingStepString);
- }
-
- public Reducer getReducer() {
- return this.reducer;
- }
-
- public Traverser processNextStart() {
- return this.starts.next();
- }
-
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java
index ddbdd87..16e62b1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java
@@ -35,17 +35,15 @@ public interface Reducing<A, B> {
private final Supplier<A> seedSupplier;
private final BiFunction<A, B, A> biFunction;
private final boolean onTraverser;
+ private final boolean supportsCombiner;
- public Reducer(final Supplier<A> seedSupplier, final BiFunction<A, B, A> biFunction, final boolean onTraverser) {
+ public Reducer(final Supplier<A> seedSupplier, final BiFunction<A, B, A> biFunction, final boolean supportsCombiner, final boolean onTraverser) {
this.seedSupplier = seedSupplier;
this.biFunction = biFunction;
+ this.supportsCombiner = supportsCombiner;
this.onTraverser = onTraverser;
}
- public boolean onTraverser() {
- return this.onTraverser;
- }
-
public Supplier<A> getSeedSupplier() {
return this.seedSupplier;
}
@@ -53,6 +51,14 @@ public interface Reducing<A, B> {
public BiFunction<A, B, A> getBiFunction() {
return this.biFunction;
}
+
+ public boolean supportsCombiner() {
+ return this.supportsCombiner;
+ }
+
+ public boolean onTraverser() {
+ return this.onTraverser;
+ }
}
//////////
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/2b949aef/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
index a67f64b..fa2c88e 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
@@ -72,7 +72,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
// GraphComputerTest.ComputerTest.class, // todo: not sure this should be here as it forces retest of GraphComputer without an "implementation"
// branch
- BranchTest.ComputerTest.class,
+ /*BranchTest.ComputerTest.class,
ChooseTest.ComputerTest.class,
LocalTest.ComputerTest.class,
RepeatTest.ComputerTest.class,
@@ -96,7 +96,7 @@ public class ProcessComputerSuite extends AbstractGremlinSuite {
WhereTest.ComputerTest.class,
// map
- BackTest.ComputerTest.class,
+ BackTest.ComputerTest.class,*/
CountTest.ComputerTest.class,
FoldTest.ComputerTest.class,
MapTest.ComputerTest.class,
[4/5] incubator-tinkerpop git commit: Merge branch 'reducingbarrier'
Posted by ok...@apache.org.
Merge branch 'reducingbarrier'
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/afa593d4
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/afa593d4
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/afa593d4
Branch: refs/heads/master
Commit: afa593d4d7c2c967d75af52beb45746349ff3642
Parents: 58affa2 b287159
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Feb 18 15:22:15 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Feb 18 15:22:15 2015 -0700
----------------------------------------------------------------------
.../traversal/TraversalVertexProgram.java | 3 +-
.../traversal/step/map/ComputerResultStep.java | 3 +
.../mapreduce/TraverserMapReduce.java | 47 +++--------
.../traversal/step/filter/DedupGlobalStep.java | 11 +--
.../traversal/step/map/CountGlobalStep.java | 59 ++++++++++++--
.../graph/traversal/step/map/FoldStep.java | 27 ++++--
.../graph/traversal/step/map/MaxGlobalStep.java | 58 ++++++++++++-
.../traversal/step/map/MeanGlobalStep.java | 8 +-
.../graph/traversal/step/map/MinGlobalStep.java | 8 +-
.../graph/traversal/step/map/SumGlobalStep.java | 8 +-
.../step/util/ReducingBarrierStep.java | 86 ++++++++++++++++----
.../traversal/strategy/ReducingStrategy.java | 36 +-------
.../process/traversal/step/Reducing.java | 68 ----------------
.../gremlin/process/ProcessComputerSuite.java | 4 +-
14 files changed, 222 insertions(+), 204 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/afa593d4/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/ProcessComputerSuite.java
----------------------------------------------------------------------
[3/5] incubator-tinkerpop git commit: Count and Max are now
MapReducers proper.
Posted by ok...@apache.org.
Count and Max are now MapReducers proper.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/b2871597
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/b2871597
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/b2871597
Branch: refs/heads/master
Commit: b2871597c361fc81fa5075705cd36efba3d271b5
Parents: a949e61
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Feb 18 15:21:58 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Feb 18 15:21:58 2015 -0700
----------------------------------------------------------------------
.../traversal/step/map/ComputerResultStep.java | 2 +-
.../traversal/step/filter/DedupGlobalStep.java | 11 +--
.../traversal/step/map/CountGlobalStep.java | 33 ++++-----
.../graph/traversal/step/map/FoldStep.java | 27 ++++---
.../graph/traversal/step/map/MaxGlobalStep.java | 58 +++++++++++++--
.../traversal/step/map/MeanGlobalStep.java | 8 +--
.../graph/traversal/step/map/MinGlobalStep.java | 8 +--
.../graph/traversal/step/map/SumGlobalStep.java | 8 +--
.../step/util/ReducingBarrierStep.java | 59 +++++++---------
.../process/traversal/step/Reducing.java | 74 --------------------
10 files changed, 116 insertions(+), 172 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
index eb86435..4c0fe83 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/ComputerResultStep.java
@@ -106,7 +106,7 @@ public final class ComputerResultStep<S> extends AbstractStep<S, S> {
this.traversers = IteratorUtils.of(this.getTraversal().getTraverserGenerator().generate((S) sideEffects, this, 1l));
}
} else if (endStep instanceof ReducingBarrierStep) {
- this.traversers = result.memory().get(Graph.Hidden.hide("reducingBarrier"));
+ this.traversers = result.memory().get(ReducingBarrierStep.REDUCING);
} else {
this.traversers = result.memory().get(TraverserMapReduce.TRAVERSERS);
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
index b4950be..0476353 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -36,7 +35,7 @@ import java.util.Set;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class DedupGlobalStep<S> extends FilterStep<S> implements Reversible, Reducing<Set<Object>, S>, TraversalParent {
+public final class DedupGlobalStep<S> extends FilterStep<S> implements Reversible, TraversalParent {
private Traversal.Admin<S, Object> dedupTraversal = new IdentityTraversal<>();
private Set<Object> duplicateSet = new HashSet<>();
@@ -63,14 +62,6 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Reversibl
}
@Override
- public Reducer<Set<Object>, S> getReducer() {
- return new Reducer<>(HashSet::new, (set, start) -> {
- set.add(TraversalUtil.apply(start, this.dedupTraversal));
- return set;
- }, false, true);
- }
-
- @Override
public DedupGlobalStep<S> clone() throws CloneNotSupportedException {
final DedupGlobalStep<S> clone = (DedupGlobalStep<S>) super.clone();
clone.duplicateSet = new HashSet<>();
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java
index 62c714f..28e413d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/CountGlobalStep.java
@@ -27,10 +27,8 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexPr
import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
-import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
@@ -44,7 +42,7 @@ import java.util.function.BiFunction;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> implements Reducing<Long, Traverser<S>>, MapReducer {
+public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> implements MapReducer {
private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(TraverserRequirement.BULK);
@@ -61,13 +59,8 @@ public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> imple
}
@Override
- public Reducer<Long, Traverser<S>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true, true);
- }
-
- @Override
- public MapReduce<MapReduce.NullObject, Long, MapReduce.NullObject, Long, Long> getMapReduce() {
- return (MapReduce) new CountMapReduce();
+ public MapReduce<MapReduce.NullObject, Long, MapReduce.NullObject, Long, Iterator<Traverser.Admin<Long>>> getMapReduce() {
+ return new CountMapReduce();
}
///////////
@@ -100,16 +93,6 @@ public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> imple
}
@Override
- public String getMemoryKey() {
- return Graph.Hidden.hide("reducingBarrier");
- }
-
- @Override
- public Iterator<Traverser.Admin<Long>> generateFinalResult(final Iterator<KeyValue<NullObject, Long>> keyValues) {
- return IteratorUtils.of(getTraversal().getTraverserGenerator().generate(keyValues.hasNext() ? keyValues.next().getValue() : 0L, (Step) CountGlobalStep.this, 1L));
- }
-
- @Override
public void map(final Vertex vertex, final MapEmitter<NullObject, Long> emitter) {
vertex.<TraverserSet<?>>property(TraversalVertexProgram.HALTED_TRAVERSERS).ifPresent(traverserSet -> traverserSet.forEach(traverser -> emitter.emit(traverser.bulk())));
}
@@ -127,6 +110,16 @@ public final class CountGlobalStep<S> extends ReducingBarrierStep<S, Long> imple
}
emitter.emit(count);
}
+
+ @Override
+ public String getMemoryKey() {
+ return REDUCING;
+ }
+
+ @Override
+ public Iterator<Traverser.Admin<Long>> generateFinalResult(final Iterator<KeyValue<NullObject, Long>> keyValues) {
+ return IteratorUtils.of(getTraversal().getTraverserGenerator().generate(keyValues.hasNext() ? keyValues.next().getValue() : 0L, (Step) CountGlobalStep.this, 1L));
+ }
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java
index fb2dfbf..885c2fe 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/FoldStep.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.util.function.ArrayListSupplier;
@@ -35,7 +34,7 @@ import java.util.function.Supplier;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class FoldStep<S, E> extends ReducingBarrierStep<S, E> implements Reducing<E, S> {
+public final class FoldStep<S, E> extends ReducingBarrierStep<S, E> {
private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(TraverserRequirement.OBJECT);
@@ -46,12 +45,7 @@ public final class FoldStep<S, E> extends ReducingBarrierStep<S, E> implements R
public FoldStep(final Traversal.Admin traversal, final Supplier<E> seed, final BiFunction<E, S, E> foldFunction) {
super(traversal);
this.setSeedSupplier(seed);
- this.setBiFunction(new ObjectBiFunction<>(foldFunction));
- }
-
- @Override
- public Reducer<E, S> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), ((ObjectBiFunction<S, E>) this.getBiFunction()).getBiFunction(), false, false);
+ this.setBiFunction(new FoldBiFunction<>(foldFunction));
}
@Override
@@ -79,4 +73,21 @@ public final class FoldStep<S, E> extends ReducingBarrierStep<S, E> implements R
return INSTANCE;
}
}
+
+ ///////
+
+ public static class FoldBiFunction<S, E> implements BiFunction<E, Traverser<S>, E>, Serializable {
+
+ private final BiFunction<E, S, E> biFunction;
+
+ public FoldBiFunction(final BiFunction<E, S, E> biFunction) {
+ this.biFunction = biFunction;
+ }
+
+ @Override
+ public E apply(final E seed, final Traverser<S> traverser) {
+ return this.biFunction.apply(seed, traverser.get());
+ }
+
+ }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java
index 1765340..0cfb574 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MaxGlobalStep.java
@@ -18,22 +18,31 @@
*/
package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
+import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
+import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
+import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
+import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
+import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.io.Serializable;
import java.util.Collections;
+import java.util.Iterator;
import java.util.Set;
import java.util.function.BiFunction;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class MaxGlobalStep<S extends Number> extends ReducingBarrierStep<S, S> implements Reducing<S, Traverser<S>> {
+public final class MaxGlobalStep<S extends Number> extends ReducingBarrierStep<S, S> implements MapReducer {
public MaxGlobalStep(final Traversal.Admin traversal) {
super(traversal);
@@ -47,8 +56,8 @@ public final class MaxGlobalStep<S extends Number> extends ReducingBarrierStep<S
}
@Override
- public Reducer<S, Traverser<S>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true, true);
+ public MapReduce<MapReduce.NullObject, Number, MapReduce.NullObject, Number, Iterator<Traverser.Admin<Number>>> getMapReduce() {
+ return new MaxMapReduce();
}
/////
@@ -70,4 +79,45 @@ public final class MaxGlobalStep<S extends Number> extends ReducingBarrierStep<S
return INSTANCE;
}
}
+
+ ///////////
+
+ private class MaxMapReduce extends StaticMapReduce<MapReduce.NullObject, Number, MapReduce.NullObject, Number, Iterator<Traverser.Admin<Number>>> {
+
+ @Override
+ public boolean doStage(final MapReduce.Stage stage) {
+ return true;
+ }
+
+ @Override
+ public void map(final Vertex vertex, final MapEmitter<NullObject, Number> emitter) {
+ vertex.<TraverserSet<Number>>property(TraversalVertexProgram.HALTED_TRAVERSERS).ifPresent(traverserSet -> traverserSet.forEach(traverser -> emitter.emit(traverser.get())));
+ }
+
+ @Override
+ public void combine(final NullObject key, final Iterator<Number> values, final ReduceEmitter<NullObject, Number> emitter) {
+ this.reduce(key, values, emitter);
+ }
+
+ @Override
+ public void reduce(final NullObject key, final Iterator<Number> values, final ReduceEmitter<NullObject, Number> emitter) {
+ Number max = -Double.MAX_VALUE;
+ while (values.hasNext()) {
+ final Number value = values.next();
+ if (value.doubleValue() > max.doubleValue())
+ max = value;
+ }
+ emitter.emit(max);
+ }
+
+ @Override
+ public String getMemoryKey() {
+ return REDUCING;
+ }
+
+ @Override
+ public Iterator<Traverser.Admin<Number>> generateFinalResult(final Iterator<KeyValue<NullObject, Number>> keyValues) {
+ return IteratorUtils.of(getTraversal().getTraverserGenerator().generate(keyValues.hasNext() ? keyValues.next().getValue() : -Double.MAX_VALUE, (Step) MaxGlobalStep.this, 1L));
+ }
+ }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java
index 4e656a2..f9c8a05 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MeanGlobalStep.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.util.function.MeanNumberSupplier;
@@ -34,7 +33,7 @@ import java.util.function.Supplier;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class MeanGlobalStep<S extends Number, E extends Number> extends ReducingBarrierStep<S, E> implements Reducing<E, Traverser<S>> {
+public final class MeanGlobalStep<S extends Number, E extends Number> extends ReducingBarrierStep<S, E> {
private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(TraverserRequirement.OBJECT, TraverserRequirement.BULK);
@@ -49,11 +48,6 @@ public final class MeanGlobalStep<S extends Number, E extends Number> extends Re
return REQUIREMENTS;
}
- @Override
- public Reducer<E, Traverser<S>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), false, true);
- }
-
/////
private static class MeanBiFunction<S extends Number> implements BiFunction<S, Traverser<S>, S>, Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java
index 1c190cb..876717d 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/MinGlobalStep.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
@@ -33,7 +32,7 @@ import java.util.function.BiFunction;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class MinGlobalStep<S extends Number> extends ReducingBarrierStep<S, S> implements Reducing<S, Traverser<S>> {
+public final class MinGlobalStep<S extends Number> extends ReducingBarrierStep<S, S> {
public MinGlobalStep(final Traversal.Admin traversal) {
super(traversal);
@@ -46,11 +45,6 @@ public final class MinGlobalStep<S extends Number> extends ReducingBarrierStep<S
return Collections.singleton(TraverserRequirement.OBJECT);
}
- @Override
- public Reducer<S, Traverser<S>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true, true);
- }
-
/////
private static class MinBiFunction<S extends Number> implements BiFunction<S, Traverser<S>, S>, Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java
index be8f4e3..1f2842b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/map/SumGlobalStep.java
@@ -21,7 +21,6 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.map;
import org.apache.tinkerpop.gremlin.process.Traversal;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
@@ -33,7 +32,7 @@ import java.util.function.BiFunction;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class SumGlobalStep extends ReducingBarrierStep<Number, Double> implements Reducing<Double, Traverser<Number>> {
+public final class SumGlobalStep extends ReducingBarrierStep<Number, Double> {
private static final Set<TraverserRequirement> REQUIREMENTS = EnumSet.of(
TraverserRequirement.BULK,
@@ -52,11 +51,6 @@ public final class SumGlobalStep extends ReducingBarrierStep<Number, Double> imp
return REQUIREMENTS;
}
- @Override
- public Reducer<Double, Traverser<Number>> getReducer() {
- return new Reducer<>(this.getSeedSupplier(), this.getBiFunction(), true, true);
- }
-
/////
private static class SumBiFunction<S extends Number> implements BiFunction<Double, Traverser<S>, Double>, Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
index 9e1ab48..a861b27 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
@@ -28,7 +28,6 @@ import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexPr
import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.traversal.step.AbstractStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
import org.apache.tinkerpop.gremlin.structure.Graph;
@@ -36,6 +35,7 @@ import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.io.Serializable;
+import java.util.Collections;
import java.util.Iterator;
import java.util.function.BiFunction;
import java.util.function.Supplier;
@@ -45,10 +45,12 @@ import java.util.function.Supplier;
*/
public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> implements MapReducer {
+ public static final String REDUCING = Graph.Hidden.hide("reducing");
+
private Supplier<E> seedSupplier;
private BiFunction<E, Traverser<S>, E> reducingBiFunction;
private boolean done = false;
- private boolean byPass =false;
+ private boolean byPass = false;
public ReducingBarrierStep(final Traversal.Admin traversal) {
super(traversal);
@@ -82,8 +84,8 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
@Override
public Traverser<E> processNextStart() {
- if(this.byPass) {
- return (Traverser<E>) this.starts.next();
+ if (this.byPass) {
+ return (Traverser<E>) this.starts.next();
} else {
if (this.done)
throw FastNoSuchElementException.instance();
@@ -91,7 +93,7 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
while (this.starts.hasNext())
seed = this.reducingBiFunction.apply(seed, this.starts.next());
this.done = true;
- return TraversalHelper.getRootTraversal(this.getTraversal()).getTraverserGenerator().generate(Reducing.FinalGet.tryFinalGet(seed), (Step) this, 1l);
+ return TraversalHelper.getRootTraversal(this.getTraversal()).getTraverserGenerator().generate(FinalGet.tryFinalGet(seed), (Step) this, 1l);
}
}
@@ -109,28 +111,7 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
///////
- public static class ObjectBiFunction<S, E> implements BiFunction<E, Traverser<S>, E>, Serializable {
-
- private final BiFunction<E, S, E> biFunction;
-
- public ObjectBiFunction(final BiFunction<E, S, E> biFunction) {
- this.biFunction = biFunction;
- }
-
- public final BiFunction<E, S, E> getBiFunction() {
- return this.biFunction;
- }
-
- @Override
- public E apply(final E seed, final Traverser<S> traverser) {
- return this.biFunction.apply(seed, traverser.get());
- }
-
- }
-
- ///////
-
- public class DefaultMapReduce extends StaticMapReduce {
+ public class DefaultMapReduce extends StaticMapReduce<MapReduce.NullObject, Object, MapReduce.NullObject, Object, Object> {
@Override
public boolean doStage(Stage stage) {
@@ -139,31 +120,41 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
@Override
public String getMemoryKey() {
- return Graph.Hidden.hide("reducingBarrier");
+ return REDUCING;
}
@Override
public Object generateFinalResult(final Iterator keyValues) {
- return IteratorUtils.of(((KeyValue) keyValues.next()).getValue());
+ return keyValues.hasNext() ? IteratorUtils.of(((KeyValue) keyValues.next()).getValue()) : Collections.emptyIterator();
}
@Override
- public void map(final Vertex vertex, final MapEmitter emitter) {
+ public void map(final Vertex vertex, final MapEmitter<NullObject, Object> emitter) {
vertex.<TraverserSet<?>>property(TraversalVertexProgram.HALTED_TRAVERSERS).ifPresent(traverserSet -> traverserSet.forEach(emitter::emit));
}
@Override
- public void reduce(final Object key, final Iterator values, final ReduceEmitter emitter) {
+ public void reduce(final NullObject key, final Iterator<Object> values, final ReduceEmitter<NullObject, Object> emitter) {
Object mutatingSeed = getSeedSupplier().get();
final BiFunction function = getBiFunction();
- final boolean onTraverser = true;
while (values.hasNext()) {
- mutatingSeed = function.apply(mutatingSeed, onTraverser ? values.next() : ((Traverser) values.next()).get());
+ mutatingSeed = function.apply(mutatingSeed, values.next());
}
- emitter.emit(key, getTraversal().getTraverserGenerator().generate(Reducing.FinalGet.tryFinalGet(mutatingSeed), (Step) getTraversal().getEndStep(), 1l));
+ emitter.emit(getTraversal().getTraverserGenerator().generate(FinalGet.tryFinalGet(mutatingSeed), (Step) getTraversal().getEndStep(), 1l));
}
}
+ /////
+
+ public interface FinalGet<A> {
+
+ public A getFinal();
+
+ public static <A> A tryFinalGet(final Object object) {
+ return object instanceof FinalGet ? ((FinalGet<A>) object).getFinal() : (A) object;
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/b2871597/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java
deleted file mode 100644
index 16e62b1..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/Reducing.java
+++ /dev/null
@@ -1,74 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.traversal.step;
-
-import java.io.Serializable;
-import java.util.function.BiFunction;
-import java.util.function.Supplier;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public interface Reducing<A, B> {
-
- public Reducer<A, B> getReducer();
-
- //////////
-
- public class Reducer<A, B> implements Serializable {
- private final Supplier<A> seedSupplier;
- private final BiFunction<A, B, A> biFunction;
- private final boolean onTraverser;
- private final boolean supportsCombiner;
-
- public Reducer(final Supplier<A> seedSupplier, final BiFunction<A, B, A> biFunction, final boolean supportsCombiner, final boolean onTraverser) {
- this.seedSupplier = seedSupplier;
- this.biFunction = biFunction;
- this.supportsCombiner = supportsCombiner;
- this.onTraverser = onTraverser;
- }
-
- public Supplier<A> getSeedSupplier() {
- return this.seedSupplier;
- }
-
- public BiFunction<A, B, A> getBiFunction() {
- return this.biFunction;
- }
-
- public boolean supportsCombiner() {
- return this.supportsCombiner;
- }
-
- public boolean onTraverser() {
- return this.onTraverser;
- }
- }
-
- //////////
-
- public interface FinalGet<A> {
-
- public A getFinal();
-
- public static <A> A tryFinalGet(final Object object) {
- return object instanceof FinalGet ? ((FinalGet<A>) object).getFinal() : (A) object;
- }
- }
-}
[2/5] incubator-tinkerpop git commit: DefaultMapReduce 'just works.'
Posted by ok...@apache.org.
DefaultMapReduce 'just works.'
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/a949e612
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/a949e612
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/a949e612
Branch: refs/heads/master
Commit: a949e6125907742bc80830ca475423bf1adcf1d3
Parents: 2b949ae
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Feb 18 14:44:20 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Feb 18 14:44:20 2015 -0700
----------------------------------------------------------------------
.../process/graph/traversal/step/util/ReducingBarrierStep.java | 3 ++-
1 file changed, 2 insertions(+), 1 deletion(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/a949e612/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
index 0a3f10f..9e1ab48 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
@@ -33,6 +33,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
+import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.io.Serializable;
import java.util.Iterator;
@@ -143,7 +144,7 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
@Override
public Object generateFinalResult(final Iterator keyValues) {
- return ((KeyValue) keyValues.next()).getValue();
+ return IteratorUtils.of(((KeyValue) keyValues.next()).getValue());
}
[5/5] incubator-tinkerpop git commit: gutted ReducingStrategy.
ReducingBarrierStep is now ready to go @dkuppitz.
Posted by ok...@apache.org.
gutted ReducingStrategy. ReducingBarrierStep is now ready to go @dkuppitz.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/70391673
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/70391673
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/70391673
Branch: refs/heads/master
Commit: 70391673c2bbee929dd28dd8ccc7e235732fc2f6
Parents: afa593d
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Feb 18 15:30:28 2015 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Feb 18 15:30:28 2015 -0700
----------------------------------------------------------------------
.../gremlin/process/TraversalStrategies.java | 14 +++++-
.../step/util/ReducingBarrierStep.java | 10 ++--
.../traversal/strategy/ProfileStrategy.java | 2 -
.../traversal/strategy/ReducingStrategy.java | 48 --------------------
4 files changed, 18 insertions(+), 56 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/70391673/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java
index fc7a314..d81f253 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/TraversalStrategies.java
@@ -19,7 +19,18 @@
package org.apache.tinkerpop.gremlin.process;
import org.apache.tinkerpop.gremlin.process.graph.traversal.__;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.*;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.ComparatorHolderRemovalStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.ConjunctionStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.DedupOptimizerStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.EngineDependentStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.IdentityRemovalStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.LabeledEndStepStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.MatchWhereStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.ProfileStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.RangeByIsCountStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.SideEffectCapStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.SideEffectRegistrationStrategy;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.strategy.TraversalVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.DefaultTraversalStrategies;
import org.apache.tinkerpop.gremlin.process.traverser.TraverserGeneratorFactory;
import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -161,7 +172,6 @@ public interface TraversalStrategies extends Serializable, Cloneable {
SideEffectCapStrategy.instance(),
MatchWhereStrategy.instance(),
ComparatorHolderRemovalStrategy.instance(),
- ReducingStrategy.instance(),
LabeledEndStepStrategy.instance(),
EngineDependentStrategy.instance(),
ProfileStrategy.instance(),
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/70391673/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
index a861b27..484d65e 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/util/ReducingBarrierStep.java
@@ -21,12 +21,14 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.step.util;
import org.apache.tinkerpop.gremlin.process.FastNoSuchElementException;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.Traverser;
import org.apache.tinkerpop.gremlin.process.computer.KeyValue;
import org.apache.tinkerpop.gremlin.process.computer.MapReduce;
import org.apache.tinkerpop.gremlin.process.computer.traversal.TraversalVertexProgram;
import org.apache.tinkerpop.gremlin.process.computer.util.StaticMapReduce;
import org.apache.tinkerpop.gremlin.process.traversal.step.AbstractStep;
+import org.apache.tinkerpop.gremlin.process.traversal.step.EngineDependent;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
@@ -34,7 +36,6 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
-import java.io.Serializable;
import java.util.Collections;
import java.util.Iterator;
import java.util.function.BiFunction;
@@ -43,7 +44,7 @@ import java.util.function.Supplier;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> implements MapReducer {
+public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> implements MapReducer, EngineDependent {
public static final String REDUCING = Graph.Hidden.hide("reducing");
@@ -72,8 +73,9 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
return this.reducingBiFunction;
}
- public void byPass() {
- this.byPass = true;
+ @Override
+ public void onEngine(final TraversalEngine traversalEngine) {
+ this.byPass = traversalEngine.isComputer();
}
@Override
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/70391673/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ProfileStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ProfileStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ProfileStrategy.java
index 5236faf..675b525 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ProfileStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ProfileStrategy.java
@@ -20,7 +20,6 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.strategy;
import org.apache.tinkerpop.gremlin.process.Step;
import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.TraversalStrategy;
import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.ProfileStep;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -45,7 +44,6 @@ public final class ProfileStrategy extends AbstractTraversalStrategy {
PRIORS.add(IdentityRemovalStrategy.class);
PRIORS.add(LabeledEndStepStrategy.class);
PRIORS.add(MatchWhereStrategy.class);
- PRIORS.add(ReducingStrategy.class);
PRIORS.add(SideEffectCapStrategy.class);
PRIORS.add(SideEffectRegistrationStrategy.class);
PRIORS.add(RangeByIsCountStrategy.class);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/70391673/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
deleted file mode 100644
index f5261b3..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/ReducingStrategy.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements. See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership. The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License. You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied. See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.graph.traversal.strategy;
-
-import org.apache.tinkerpop.gremlin.process.Step;
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.ReducingBarrierStep;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class ReducingStrategy extends AbstractTraversalStrategy {
-
- private static final ReducingStrategy INSTANCE = new ReducingStrategy();
-
- private ReducingStrategy() {
- }
-
- @Override
- public void apply(final Traversal.Admin<?, ?> traversal) {
- if (traversal.getEngine().isStandard())
- return;
-
- final Step endStep = traversal.getEndStep();
- if (endStep instanceof ReducingBarrierStep)
- ((ReducingBarrierStep) endStep).byPass();
- }
-
- public static ReducingStrategy instance() {
- return INSTANCE;
- }
-}