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