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/23 21:40:08 UTC
incubator-tinkerpop git commit: Solved the GroupStep-hack. The whole
notion of a FinalGet is bad. Every ReducingBarrier step now implements
generateFinalReduction() with the default being the identity function. For
GroupStep, MeanStep, and GroupStepV3d0,
Repository: incubator-tinkerpop
Updated Branches:
refs/heads/TINKERPOP-1166 9416e9498 -> d77bf58c8
Solved the GroupStep-hack. The whole notion of a FinalGet is bad. Every ReducingBarrier step now implements generateFinalReduction() with the default being the identity function. For GroupStep, MeanStep, and GroupStepV3d0, they do the final respective reduction. Also, GroupStep is a bit more organized -- only one BinaryOperator needed.
Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/d77bf58c
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/d77bf58c
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/d77bf58c
Branch: refs/heads/TINKERPOP-1166
Commit: d77bf58c8e60f52f180af21ef18091c3cb143c3b
Parents: 9416e94
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Feb 23 13:40:04 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Feb 23 13:40:04 2016 -0700
----------------------------------------------------------------------
.../traversal/TraversalVertexProgram.java | 14 +---
.../process/traversal/step/map/GroupStep.java | 77 +++++++++---------
.../traversal/step/map/GroupStepV3d0.java | 34 ++------
.../traversal/step/map/MeanGlobalStep.java | 5 ++
.../traversal/step/util/GroupStepHelper.java | 9 ---
.../step/util/ReducingBarrierStep.java | 83 +++-----------------
.../gremlin/structure/io/gryo/GryoMapper.java | 17 ++--
7 files changed, 68 insertions(+), 171 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d77bf58c/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 1d29f86..777220f 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
@@ -36,10 +36,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.map.GroupStepV3d0;
import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.FinalGet;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
import org.apache.tinkerpop.gremlin.process.traversal.util.PureTraversal;
@@ -187,16 +184,9 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
final boolean voteToHalt = memory.<Boolean>get(VOTE_TO_HALT);
if (voteToHalt) {
for (final ReducingBarrierStep<?, ?> reducingBarrierStep : TraversalHelper.getStepsOfAssignableClassRecursively(ReducingBarrierStep.class, this.traversal.get())) {
- if (memory.exists(ReducingBarrierStep.REDUCING)) {
- if (reducingBarrierStep instanceof GroupStep)
- memory.set(ReducingBarrierStep.REDUCING, ((GroupStep) reducingBarrierStep).getReducedMap(memory.get(ReducingBarrierStep.REDUCING)));
- else if(reducingBarrierStep instanceof GroupStepV3d0)
- memory.set(ReducingBarrierStep.REDUCING, ((GroupStepV3d0) reducingBarrierStep).getReducedMap(memory.get(ReducingBarrierStep.REDUCING)));
- else
- memory.set(ReducingBarrierStep.REDUCING, FinalGet.tryFinalGet(memory.get(ReducingBarrierStep.REDUCING)));
- }
+ if (memory.exists(ReducingBarrierStep.REDUCING))
+ memory.set(ReducingBarrierStep.REDUCING, reducingBarrierStep.generateFinalReduction(memory.get(ReducingBarrierStep.REDUCING)));
}
-
return true;
} else {
memory.set(VOTE_TO_HALT, true);
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d77bf58c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index ba4a840..3e34009 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -40,12 +40,11 @@ import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.function.BinaryOperator;
-import java.util.function.Supplier;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>> implements TraversalParent, GraphComputing, ByModulating {
+public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>> implements TraversalParent, ByModulating {
private char state = 'k';
@@ -54,26 +53,23 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
private Traversal.Admin<?, V> reduceTraversal = this.integrateChild(__.fold().asAdmin()); // used in OLAP
private Traversal.Admin<S, V> valueReduceTraversal = this.integrateChild(__.fold().asAdmin()); // used in OLTP
- private boolean onComputer = false;
-
public GroupStep(final Traversal.Admin traversal) {
super(traversal);
- this.setSeedSupplier((Supplier) new GroupStepHelper.GroupMapSupplier());
- this.setReducingBiOperator(new GroupStandardBiOperator<>(this));
+ this.setSeedSupplier(HashMapSupplier.instance());
+ this.setReducingBiOperator(new GroupBiOperator<>(this));
}
@Override
public void onGraphComputer() {
- this.onComputer = true;
- this.setSeedSupplier(HashMapSupplier.instance());
- this.setReducingBiOperator(new GroupComputerBiOperator<>());
+ super.onGraphComputer();
+ this.setReducingBiOperator(new GroupBiOperator<>(this));
}
@Override
public Map<K, V> projectTraverser(final Traverser.Admin<S> traverser) {
final K key = TraversalUtil.applyNullable(traverser, this.keyTraversal);
final TraverserSet traverserSet = new TraverserSet();
- if (this.onComputer) {
+ if (this.onGraphComputer) {
this.valueTraversal.reset();
this.valueTraversal.addStart(traverser);
this.valueTraversal.getEndStep().forEachRemaining(t -> traverserSet.add(t.asAdmin()));
@@ -139,55 +135,52 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
return StringFactory.stepString(this, this.keyTraversal, this.valueReduceTraversal);
}
- public Map<K, V> getReducedMap(final Map<K, TraverserSet> traverserMap) {
+ @Override
+ public Map<K, V> generateFinalReduction(final Object traverserMap) {
final Map<K, V> reducedMap = new HashMap<>();
- for (final K key : traverserMap.keySet()) {
- final Traversal.Admin<?, V> reduceClone = this.reduceTraversal.clone();
- reduceClone.addStarts(traverserMap.get(key).iterator());
- reducedMap.put(key, reduceClone.next());
+ if (this.onGraphComputer) {
+ for (final K key : ((Map<K, TraverserSet>) traverserMap).keySet()) {
+ final Traversal.Admin<?, V> reduceClone = this.reduceTraversal.clone();
+ reduceClone.addStarts(((Map<K, TraverserSet>) traverserMap).get(key).iterator());
+ reducedMap.put(key, reduceClone.next());
+ }
+ } else {
+ for (final K key : ((Map<K, Traversal.Admin>) traverserMap).keySet()) {
+ reducedMap.put(key, (V) (((Map<K, Traversal.Admin>) traverserMap).get(key)).next());
+ }
}
return reducedMap;
}
///////////
- public static final class GroupComputerBiOperator<S, K, V> implements BinaryOperator<Map<K, V>>, Serializable {
-
- private GroupComputerBiOperator() {
- }
-
- @Override
- public Map<K, V> apply(final Map<K, V> mutatingSeed, final Map<K, V> map) {
- for (final K key : map.keySet()) {
- TraverserSet<?> traverserSet = (TraverserSet) mutatingSeed.get(key);
- if (null == traverserSet) {
- traverserSet = new TraverserSet<>();
- mutatingSeed.put(key, (V) traverserSet);
- }
- traverserSet.addAll((TraverserSet) map.get(key));
- }
- return mutatingSeed;
- }
- }
-
- public static final class GroupStandardBiOperator<K, V> implements BinaryOperator<Map<K, V>>, Serializable {
+ public static final class GroupBiOperator<K, V> implements BinaryOperator<Map<K, V>>, Serializable {
private final GroupStep groupStep;
- public GroupStandardBiOperator(final GroupStep groupStep) {
+ public GroupBiOperator(final GroupStep groupStep) {
this.groupStep = groupStep;
}
@Override
public Map<K, V> apply(final Map<K, V> mutatingSeed, final Map<K, V> map) {
for (final K key : map.keySet()) {
- final TraverserSet<?> traverserSet = (TraverserSet<?>) map.get(key);
- Traversal.Admin valueReduceTraversal = (Traversal.Admin) mutatingSeed.get(key);
- if (null == valueReduceTraversal) {
- valueReduceTraversal = this.groupStep.valueReduceTraversal.clone();
- mutatingSeed.put(key, (V) valueReduceTraversal);
+ if (this.groupStep.onGraphComputer) {
+ TraverserSet<?> traverserSet = (TraverserSet) mutatingSeed.get(key);
+ if (null == traverserSet) {
+ traverserSet = new TraverserSet<>();
+ mutatingSeed.put(key, (V) traverserSet);
+ }
+ traverserSet.addAll((TraverserSet) map.get(key));
+ } else {
+ final TraverserSet<?> traverserSet = (TraverserSet<?>) map.get(key);
+ Traversal.Admin valueReduceTraversal = (Traversal.Admin) mutatingSeed.get(key);
+ if (null == valueReduceTraversal) {
+ valueReduceTraversal = this.groupStep.valueReduceTraversal.clone();
+ mutatingSeed.put(key, (V) valueReduceTraversal);
+ }
+ traverserSet.forEach(valueReduceTraversal::addStart);
}
- traverserSet.forEach(valueReduceTraversal::addStart);
}
return mutatingSeed;
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d77bf58c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
index b72dce5..b52b32b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStepV3d0.java
@@ -25,7 +25,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.FinalGet;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
@@ -48,7 +47,7 @@ import java.util.function.Supplier;
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@Deprecated
-public final class GroupStepV3d0<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R>> implements ByModulating, GraphComputing, TraversalParent {
+public final class GroupStepV3d0<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R>> implements ByModulating, TraversalParent {
private char state = 'k';
@@ -58,7 +57,7 @@ public final class GroupStepV3d0<S, K, V, R> extends ReducingBarrierStep<S, Map<
public GroupStepV3d0(final Traversal.Admin traversal) {
super(traversal);
- this.setSeedSupplier((Supplier) new GroupMapSupplierV3d0());
+ this.setSeedSupplier(HashMapSupplier.instance());
this.setReducingBiOperator(new GroupBiOperatorV3d0<>());
}
@@ -73,6 +72,7 @@ public final class GroupStepV3d0<S, K, V, R> extends ReducingBarrierStep<S, Map<
@Override
public void onGraphComputer() {
+ super.onGraphComputer();
this.setSeedSupplier((Supplier) HashMapSupplier.instance());
this.setReducingBiOperator(new GroupBiOperatorV3d0<>());
}
@@ -136,10 +136,11 @@ public final class GroupStepV3d0<S, K, V, R> extends ReducingBarrierStep<S, Map<
return StringFactory.stepString(this, this.keyTraversal, this.valueTraversal, this.reduceTraversal);
}
- public Map<K, R> getReducedMap(final Map<K, Collection<V>> valueMap) {
+ @Override
+ public Map<K, R> generateFinalReduction(final Object valueMap) {
final Map<K, R> reducedMap = new HashMap<>();
- for (final K key : valueMap.keySet()) {
- final R r = TraversalUtil.applyNullable(valueMap.get(key), this.reduceTraversal);
+ for (final K key : ((Map<K, Collection<V>>) valueMap).keySet()) {
+ final R r = TraversalUtil.applyNullable(((Map<K, Collection<V>>) valueMap).get(key), this.reduceTraversal);
reducedMap.put(key, r);
}
return reducedMap;
@@ -167,25 +168,4 @@ public final class GroupStepV3d0<S, K, V, R> extends ReducingBarrierStep<S, Map<
return mutatingSeed;
}
}
-
- ////////
-
- private class GroupMapV3d0 extends HashMap<K, Collection<V>> implements FinalGet<Map<K, R>> {
-
- @Override
- public Map<K, R> getFinal() {
- return GroupStepV3d0.this.getReducedMap(this);
- }
- }
-
- private class GroupMapSupplierV3d0 implements Supplier<GroupMapV3d0>, Serializable {
-
- private GroupMapSupplierV3d0() {
- }
-
- @Override
- public GroupMapV3d0 get() {
- return new GroupMapV3d0();
- }
- }
}
\ No newline at end of file
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d77bf58c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java
index 1f8c99e..c5912e5 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanGlobalStep.java
@@ -59,6 +59,11 @@ public final class MeanGlobalStep<S extends Number, E extends Number> extends Re
return REQUIREMENTS;
}
+ @Override
+ public E generateFinalReduction(final Object reduction) {
+ return (E) ((MeanNumber) reduction).getFinal();
+ }
+
/////
public static final class MeanGlobalBiOperator<S extends Number> implements BinaryOperator<S>, Serializable {
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d77bf58c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/GroupStepHelper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/GroupStepHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/GroupStepHelper.java
index 4ed4dc4..ab47ff4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/GroupStepHelper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/GroupStepHelper.java
@@ -30,12 +30,10 @@ import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.LambdaMapStep;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import java.io.Serializable;
import java.util.Arrays;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
-import java.util.function.Supplier;
/**
* @author Marko A. Rodriguez (http://markorodriguez.com)
@@ -94,11 +92,4 @@ public final class GroupStepHelper {
}
}
- public static class GroupMapSupplier implements Supplier<GroupMap>, Serializable {
-
- @Override
- public GroupMap get() {
- return new GroupMap<>(new HashMap<>());
- }
- }
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d77bf58c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java
index 921385c..e40eeb2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/ReducingBarrierStep.java
@@ -18,24 +18,16 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.step.util;
-import org.apache.commons.configuration.Configuration;
-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.computer.util.VertexProgramHelper;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
-import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
+import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.structure.Graph;
-import org.apache.tinkerpop.gremlin.structure.Vertex;
import java.util.Iterator;
-import java.util.function.BiFunction;
import java.util.function.BinaryOperator;
import java.util.function.Supplier;
@@ -43,13 +35,14 @@ import java.util.function.Supplier;
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
-public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> implements Barrier {
+public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> implements Barrier, GraphComputing {
public static final String REDUCING = Graph.Hidden.hide("reducing");
protected Supplier<E> seedSupplier;
protected BinaryOperator<E> reducingBiOperator;
+ protected boolean onGraphComputer = false;
private boolean done = false;
private E seed = null;
@@ -102,13 +95,17 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
this.seed = this.reducingBiOperator.apply(this.seed, this.projectTraverser(this.starts.next()));
}
+ public E generateFinalReduction(final Object reduction) {
+ return (E) reduction;
+ }
+
@Override
public Traverser<E> processNextStart() {
if (this.done)
throw FastNoSuchElementException.instance();
this.processAllStarts();
this.done = true;
- final Traverser<E> traverser = TraversalHelper.getRootTraversal(this.getTraversal()).getTraverserGenerator().generate(FinalGet.tryFinalGet(this.seed), (Step) this, 1l);
+ final Traverser<E> traverser = TraversalHelper.getRootTraversal(this.getTraversal()).getTraverserGenerator().generate(this.onGraphComputer ? this.seed : this.generateFinalReduction(this.seed), (Step) this, 1l);
this.seed = null;
return traverser;
}
@@ -121,66 +118,8 @@ public abstract class ReducingBarrierStep<S, E> extends AbstractStep<S, E> imple
return clone;
}
- ///////
-
- public static class DefaultMapReduce extends StaticMapReduce<MapReduce.NullObject, Object, MapReduce.NullObject, Object, Object> {
-
- private static final String REDUCING_BARRIER_STEP_SEED_SUPPLIER = "gremlin.reducingBarrierStep.seedSupplier";
- private static final String REDUCING_BARRIER_STEP_BI_FUNCTION = "gremlin.reducingBarrierStep.biFunction";
-
- private BiFunction biFunction;
- private Supplier seedSupplier;
-
- private DefaultMapReduce() {
- }
-
- public DefaultMapReduce(final Supplier seedSupplier, final BiFunction biFunction) {
- this.seedSupplier = seedSupplier;
- this.biFunction = biFunction;
-
- }
-
- @Override
- public void storeState(final Configuration configuration) {
- super.storeState(configuration);
- VertexProgramHelper.serialize(this.seedSupplier, configuration, REDUCING_BARRIER_STEP_SEED_SUPPLIER);
- VertexProgramHelper.serialize(this.biFunction, configuration, REDUCING_BARRIER_STEP_BI_FUNCTION);
-
- }
-
- @Override
- public void loadState(final Graph graph, final Configuration configuration) {
- this.seedSupplier = VertexProgramHelper.deserialize(configuration, REDUCING_BARRIER_STEP_SEED_SUPPLIER);
- this.biFunction = VertexProgramHelper.deserialize(configuration, REDUCING_BARRIER_STEP_BI_FUNCTION);
- }
-
- @Override
- public boolean doStage(final Stage stage) {
- return !stage.equals(Stage.COMBINE);
- }
-
- @Override
- public String getMemoryKey() {
- return REDUCING;
- }
-
- @Override
- public Object generateFinalResult(final Iterator keyValues) {
- return ((KeyValue) keyValues.next()).getValue();
- }
-
- @Override
- 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 NullObject key, final Iterator<Object> values, final ReduceEmitter<NullObject, Object> emitter) {
- Object mutatingSeed = this.seedSupplier.get();
- while (values.hasNext()) {
- mutatingSeed = this.biFunction.apply(mutatingSeed, values.next());
- }
- emitter.emit(FinalGet.tryFinalGet(mutatingSeed));
- }
+ @Override
+ public void onGraphComputer() {
+ this.onGraphComputer = true;
}
}
http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d77bf58c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
index c8fceb7..b74ed35 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/io/gryo/GryoMapper.java
@@ -333,15 +333,14 @@ public final class GryoMapper implements Mapper<Kryo> {
add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(FoldStep.ListBiOperator.class, null, 113));
add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(FoldStep.FoldBiOperator.class, null, 114));
add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(GroupCountStep.GroupCountBiOperator.class, null, 115));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(GroupStep.GroupComputerBiOperator.class, null, 116));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(GroupStep.GroupStandardBiOperator.class, null, 117));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MaxGlobalStep.MaxGlobalBiOperator.class, null, 118));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MeanGlobalStep.MeanGlobalBiOperator.class, null, 119));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MeanGlobalStep.MeanNumber.class, null, 120));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MinGlobalStep.MinGlobalBiOperator.class, null, 121));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(SumGlobalStep.SumGlobalBiOperator.class, null, 122));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TreeStep.TreeBiOperator.class, null, 123));
- add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(GroupStepV3d0.GroupBiOperatorV3d0.class, null, 124)); // ***LAST ID**
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(GroupStep.GroupBiOperator.class, null, 116));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MaxGlobalStep.MaxGlobalBiOperator.class, null, 117));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MeanGlobalStep.MeanGlobalBiOperator.class, null, 118));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MeanGlobalStep.MeanNumber.class, null, 119));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(MinGlobalStep.MinGlobalBiOperator.class, null, 120));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(SumGlobalStep.SumGlobalBiOperator.class, null, 121));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(TreeStep.TreeBiOperator.class, null, 122));
+ add(Triplet.<Class, Function<Kryo, Serializer>, Integer>with(GroupStepV3d0.GroupBiOperatorV3d0.class, null, 123)); // ***LAST ID**
}};
private final List<IoRegistry> registries = new ArrayList<>();