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/10/03 22:29:34 UTC

incubator-tinkerpop git commit: GroupStep no longer supports a reduce traversal. Its just key/value traversals. This makes it so that GroupStep is completely lazy and can reduce on the fly limiting the memory footprint of group'ing.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/group_step_2 8403cf2be -> 86f707f0c


GroupStep no longer supports a reduce traversal. Its just key/value traversals. This makes it so that GroupStep is completely lazy and can reduce on the fly limiting the memory footprint of group'ing.


Project: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/commit/86f707f0
Tree: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/tree/86f707f0
Diff: http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/diff/86f707f0

Branch: refs/heads/group_step_2
Commit: 86f707f0c878af878e40ef1a4ee967ea8b063b52
Parents: 8403cf2
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Sat Oct 3 14:29:25 2015 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Sat Oct 3 14:29:25 2015 -0600

----------------------------------------------------------------------
 .../process/traversal/step/map/GroupStep.java   | 84 ++++++++------------
 .../step/util/CollectingBarrierStep.java        | 17 +++-
 .../traversal/step/filter/DedupTest.java        |  2 +-
 .../traversal/step/filter/SampleTest.java       |  4 +-
 .../process/traversal/step/map/MaxTest.java     |  2 +-
 .../process/traversal/step/map/MeanTest.java    |  2 +-
 .../process/traversal/step/map/MinTest.java     |  2 +-
 .../process/traversal/step/map/OrderTest.java   |  2 +-
 .../process/traversal/step/map/SumTest.java     |  2 +-
 .../traversal/step/sideEffect/GroupTest.java    | 15 ++--
 10 files changed, 67 insertions(+), 65 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/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 91f68e3..a06e251 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
@@ -29,7 +29,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
 import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.BarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
 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.traverser.util.TraverserSet;
@@ -54,13 +53,12 @@ import java.util.function.Supplier;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R>> implements MapReducer, TraversalParent {
+public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>> implements MapReducer, TraversalParent {
 
     private char state = 'k';
 
     private Traversal.Admin<S, K> keyTraversal = null;
-    private Traversal.Admin<S, V> valueTraversal = null;
-    private Traversal.Admin<V, R> reduceTraversal = (Traversal.Admin) __.<V>fold().asAdmin();
+    private Traversal.Admin<S, V> valueTraversal = this.integrateChild((Traversal.Admin) __.<V>fold().asAdmin());
 
     public GroupStep(final Traversal.Admin traversal) {
         super(traversal);
@@ -75,8 +73,7 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
             children.add((Traversal.Admin) this.keyTraversal);
         if (null != this.valueTraversal)
             children.add((Traversal.Admin) this.valueTraversal);
-        if (null != this.reduceTraversal)
-            children.add((Traversal.Admin) this.reduceTraversal);
+        ;
         return children;
     }
 
@@ -87,12 +84,9 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
             this.state = 'v';
         } else if ('v' == this.state) {
             this.valueTraversal = this.integrateChild(kvrTraversal);
-            this.state = 'r';
-        } else if ('r' == this.state) {
-            this.reduceTraversal = this.integrateChild(kvrTraversal);
             this.state = 'x';
         } else {
-            throw new IllegalStateException("The key, value, and reduce functions for group()-step have already been set");
+            throw new IllegalStateException("The key and value traversals for group()-step have already been set: " + this);
         }
     }
 
@@ -102,14 +96,12 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
     }
 
     @Override
-    public GroupStep<S, K, V, R> clone() {
-        final GroupStep<S, K, V, R> clone = (GroupStep<S, K, V, R>) super.clone();
+    public GroupStep<S, K, V> clone() {
+        final GroupStep<S, K, V> clone = (GroupStep<S, K, V>) super.clone();
         if (null != this.keyTraversal)
             clone.keyTraversal = clone.integrateChild(this.keyTraversal.clone());
         if (null != this.valueTraversal)
             clone.valueTraversal = clone.integrateChild(this.valueTraversal.clone());
-        if (null != this.reduceTraversal)
-            clone.reduceTraversal = clone.integrateChild(this.reduceTraversal.clone());
         clone.setBiFunction(new GroupBiFunction<>((GroupStep) clone));
         return clone;
     }
@@ -124,15 +116,15 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
     }
 
     @Override
-    public MapReduce<K, Collection<V>, K, R, Map<K, R>> getMapReduce() {
-        return new GroupMapReduce<>(this);
+    public MapReduce<K, V, K, V, Map<K, V>> getMapReduce() {
+        return new GroupMapReduce(this);
     }
 
     @Override
-    public Traverser<Map<K, R>> processNextStart() {
+    public Traverser<Map<K, V>> processNextStart() {
         if (this.byPass) {
             final Traverser.Admin<S> traverser = this.starts.next();
-            final Object[] kvPair = new Object[]{TraversalUtil.applyNullable(traverser, (Traversal.Admin<S, Map>) this.keyTraversal), TraversalUtil.applyNullable(traverser, (Traversal.Admin<S, Map>) this.valueTraversal)};
+            final Object[] kvPair = new Object[]{TraversalUtil.applyNullable(traverser, (Traversal.Admin<S, Map>) this.keyTraversal), traverser.get()};
             return traverser.asAdmin().split(kvPair, (Step) this);
         } else {
             return super.processNextStart();
@@ -141,29 +133,28 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
 
     @Override
     public String toString() {
-        return StringFactory.stepString(this, this.keyTraversal, this.valueTraversal, this.reduceTraversal);
+        return StringFactory.stepString(this, this.keyTraversal, this.valueTraversal);
     }
 
     ///////////
 
-    private static class GroupBiFunction<S, K, V, R> implements BiFunction<Map<K, Traversal.Admin<V, R>>, Traverser.Admin<S>, Map<K, Traversal.Admin<V, R>>>, Serializable {
+    private static class GroupBiFunction<S, K, V> implements BiFunction<Map<K, Traversal.Admin<S, V>>, Traverser.Admin<S>, Map<K, Traversal.Admin<S, V>>>, Serializable {
 
-        private final GroupStep<S, K, V, R> groupStep;
+        private final GroupStep<S, K, V> groupStep;
 
-        private GroupBiFunction(final GroupStep<S, K, V, R> groupStep) {
+        private GroupBiFunction(final GroupStep<S, K, V> groupStep) {
             this.groupStep = groupStep;
         }
 
         @Override
-        public Map<K, Traversal.Admin<V, R>> apply(final Map<K, Traversal.Admin<V, R>> mutatingSeed, final Traverser.Admin<S> traverser) {
+        public Map<K, Traversal.Admin<S, V>> apply(final Map<K, Traversal.Admin<S, V>> mutatingSeed, final Traverser.Admin<S> traverser) {
             final K key = TraversalUtil.applyNullable(traverser, this.groupStep.keyTraversal);
-            final V value = TraversalUtil.applyNullable(traverser, this.groupStep.valueTraversal);
-            Traversal.Admin<V, R> traversal = mutatingSeed.get(key);
+            Traversal.Admin<S, V> traversal = mutatingSeed.get(key);
             if (null == traversal) {
-                traversal = this.groupStep.reduceTraversal.clone();
+                traversal = this.groupStep.valueTraversal.clone();
                 mutatingSeed.put(key, traversal);
             }
-            traversal.addStart(traversal.getTraverserGenerator().generate(value, traversal.getStartStep(), 1l));
+            traversal.addStart(traverser.split());
             TraversalHelper.getStepsOfClass(BarrierStep.class, traversal).stream().findFirst().ifPresent(BarrierStep::processAllStarts);
             return mutatingSeed;
         }
@@ -194,20 +185,20 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
 
     ///////////
 
-    public static final class GroupMapReduce<K, V, R> implements MapReduce<K, Collection<V>, K, R, Map<K, R>> {
+    public static final class GroupMapReduce<S, K, V> implements MapReduce<K, S, K, V, Map<K, V>> {
 
         public static final String GROUP_BY_STEP_STEP_ID = "gremlin.groupStep.stepId";
 
         private String groupStepId;
-        private Traversal.Admin<V, R> reduceTraversal;
+        private Traversal.Admin<S, V> valueTraversal;
 
         private GroupMapReduce() {
 
         }
 
-        public GroupMapReduce(final GroupStep<?, K, V, R> step) {
+        public GroupMapReduce(final GroupStep<S, K, V> step) {
             this.groupStepId = step.getId();
-            this.reduceTraversal = step.reduceTraversal;
+            this.valueTraversal = step.valueTraversal;
         }
 
         @Override
@@ -219,7 +210,7 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
         @Override
         public void loadState(final Graph graph, final Configuration configuration) {
             this.groupStepId = configuration.getString(GROUP_BY_STEP_STEP_ID);
-            this.reduceTraversal = ((GroupStep) new TraversalMatrix<>(TraversalVertexProgram.getTraversal(graph, configuration)).getStepById(this.groupStepId)).reduceTraversal;
+            this.valueTraversal = ((GroupStep) new TraversalMatrix<>(TraversalVertexProgram.getTraversal(graph, configuration)).getStepById(this.groupStepId)).valueTraversal.clone();
         }
 
         @Override
@@ -228,29 +219,24 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
         }
 
         @Override
-        public void map(final Vertex vertex, final MapEmitter<K, Collection<V>> emitter) {
+        public void map(final Vertex vertex, final MapEmitter<K, S> emitter) {
             vertex.<TraverserSet<Object[]>>property(TraversalVertexProgram.HALTED_TRAVERSERS).ifPresent(traverserSet -> traverserSet.forEach(traverser -> {
                 final Object[] objects = traverser.get();
-                if (objects[1] instanceof Collection)
-                    emitter.emit((K) objects[0], (Collection)objects[1]);
-                else {
-                    final List<V> collection = new ArrayList<>();
-                    collection.add((V) objects[1]);
-                    emitter.emit((K) objects[0], collection);
-                }
+                emitter.emit((K) objects[0], (S) objects[1]);
+
             }));
         }
 
         @Override
-        public void reduce(final K key, final Iterator<Collection<V>> values, final ReduceEmitter<K, R> emitter) {
-            Traversal.Admin<V, R> reduceTraversalClone = this.reduceTraversal.clone();
-            reduceTraversalClone.addStarts(reduceTraversalClone.getTraverserGenerator().generateIterator((Iterator) values, reduceTraversalClone.getStartStep(), 1l));
+        public void reduce(final K key, final Iterator<S> values, final ReduceEmitter<K, V> emitter) {
+            Traversal.Admin<S, V> reduceTraversalClone = this.valueTraversal.clone();
+            reduceTraversalClone.addStarts(reduceTraversalClone.getTraverserGenerator().generateIterator((Iterator)values, reduceTraversalClone.getStartStep(), 1l));
             emitter.emit(key, reduceTraversalClone.next());
         }
 
         @Override
-        public Map<K, R> generateFinalResult(final Iterator<KeyValue<K, R>> keyValues) {
-            final Map<K, R> map = new HashMap<>();
+        public Map<K, V> generateFinalResult(final Iterator<KeyValue<K, V>> keyValues) {
+            final Map<K, V> map = new HashMap<>();
             keyValues.forEachRemaining(keyValue -> map.put(keyValue.getKey(), keyValue.getValue()));
             return map;
         }
@@ -261,11 +247,11 @@ public final class GroupStep<S, K, V, R> extends ReducingBarrierStep<S, Map<K, R
         }
 
         @Override
-        public GroupMapReduce<K, V, R> clone() {
+        public GroupMapReduce<S, K, V> clone() {
             try {
-                final GroupMapReduce<K, V, R> clone = (GroupMapReduce<K, V, R>) super.clone();
-                if (null != clone.reduceTraversal)
-                    clone.reduceTraversal = this.reduceTraversal.clone();
+                final GroupMapReduce<S, K, V> clone = (GroupMapReduce<S, K, V>) super.clone();
+                if (null != clone.valueTraversal)
+                    clone.valueTraversal = this.valueTraversal.clone();
                 return clone;
             } catch (final CloneNotSupportedException e) {
                 throw new IllegalStateException(e.getMessage(), e);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java
index e73c655..eb0f940 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/CollectingBarrierStep.java
@@ -30,7 +30,7 @@ import java.util.Set;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public abstract class CollectingBarrierStep<S> extends AbstractStep<S, S> {
+public abstract class CollectingBarrierStep<S> extends AbstractStep<S, S> implements BarrierStep {
     private TraverserSet<S> traverserSet = new TraverserSet<>();
 
     private int maxBarrierSize;
@@ -52,6 +52,21 @@ public abstract class CollectingBarrierStep<S> extends AbstractStep<S, S> {
     }
 
     @Override
+    public void processAllStarts() {
+        if (this.starts.hasNext()) {
+            if (Integer.MAX_VALUE == this.maxBarrierSize) {
+                this.starts.forEachRemaining(this.traverserSet::add);
+                this.barrierConsumer(this.traverserSet);
+            } else {
+                while (this.starts.hasNext() && this.traverserSet.size() < this.maxBarrierSize) {
+                    this.traverserSet.add(this.starts.next());
+                }
+                this.barrierConsumer(this.traverserSet);
+            }
+        }
+    }
+
+    @Override
     public Traverser<S> processNextStart() {
         if (!this.traverserSet.isEmpty()) {
             return this.traverserSet.remove();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
index 8fd5140..56b2d14 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
@@ -251,7 +251,7 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
         @Override
         public Traversal<Vertex, Map<String, List<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXdedupXlocalXX() {
             //return g.V().<String, Set<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(dedup(Scope.local));
-            return g.V().<String, List<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(unfold().dedup().fold());
+            return g.V().<String, List<Double>>group().by(T.label).by(bothE().values("weight").dedup().fold());
         }
 
         @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java
index d65e2b6..2c324ac 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/SampleTest.java
@@ -133,12 +133,12 @@ public abstract class SampleTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_2XX() {
-            return g.V().<String, Collection<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(unfold().fold().sample(Scope.local, 2));
+            return g.V().<String, Collection<Double>>group().by(T.label).by(bothE().values("weight").fold().sample(Scope.local, 2));
         }
 
         @Override
         public Traversal<Vertex, Map<String, Collection<Double>>> get_g_V_group_byXlabelX_byXbothE_valuesXweightX_foldX_byXsampleXlocal_5XX() {
-            return g.V().<String, Collection<Double>>group().by(T.label).by(bothE().values("weight").fold()).by(unfold().fold().sample(Scope.local, 5));
+            return g.V().<String, Collection<Double>>group().by(T.label).by(bothE().values("weight").fold().sample(Scope.local,5));
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MaxTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MaxTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MaxTest.java
index 2c24575..4356ae4 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MaxTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MaxTest.java
@@ -91,7 +91,7 @@ public abstract class MaxTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmaxXlocalXX() {
-            return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").fold()).by(max(Scope.local));
+            return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").max());
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanTest.java
index b2e7f29..8ec8a68 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MeanTest.java
@@ -79,7 +79,7 @@ public abstract class MeanTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXmeanXlocalXX() {
-            return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").fold()).by(mean(Scope.local));
+            return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").mean());
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MinTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MinTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MinTest.java
index 477f419..94c92a1 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MinTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/MinTest.java
@@ -91,7 +91,7 @@ public abstract class MinTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXminXlocalXX() {
-            return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").fold()).by(min(Scope.local));
+            return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").min());
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderTest.java
index 842141a..99dae26 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/OrderTest.java
@@ -304,7 +304,7 @@ public abstract class OrderTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, List<Vertex>>> get_g_V_group_byXlabelX_byXnameX_byXorderXlocalX_byXdecrXX() {
-            return g.V().<String, List<Vertex>>group().by(T.label).by("name").by(__.order().by(Order.decr).fold());
+            return g.V().<String, List<Vertex>>group().by(T.label).by(__.values("name").order().by(Order.decr).fold());
         }
 
     }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumTest.java
index 3eb49de..62a170f 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/SumTest.java
@@ -76,7 +76,7 @@ public abstract class SumTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Number>> get_g_V_hasLabelXsoftwareX_group_byXnameX_byXbothE_valuesXweightX_foldX_byXsumXlocalXX() {
-            return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").fold()).by(sum(Scope.local));
+            return g.V().hasLabel("software").<String, Number>group().by("name").by(bothE().values("weight").sum());
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/86f707f0/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
index 104e8c1..51794ac 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupTest.java
@@ -19,15 +19,16 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
 
 import org.apache.tinkerpop.gremlin.LoadGraphWith;
-import org.apache.tinkerpop.gremlin.process.*;
+import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
+import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
 import org.apache.tinkerpop.gremlin.process.traversal.Scope;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.junit.Test;
 import org.junit.runner.RunWith;
 
-import java.util.*;
+import java.util.Collection;
+import java.util.Map;
 
 import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
 import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.*;
@@ -55,7 +56,7 @@ public abstract class GroupTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_group_byXnameX() {
-        final Traversal<Vertex,Map<String,Collection<Vertex>>> traversal = get_g_V_group_byXnameX();
+        final Traversal<Vertex, Map<String, Collection<Vertex>>> traversal = get_g_V_group_byXnameX();
         printTraversalForm(traversal);
         assertCommonA(traversal);
     }
@@ -63,7 +64,7 @@ public abstract class GroupTest extends AbstractGremlinProcessTest {
     @Test
     @LoadGraphWith(MODERN)
     public void g_V_groupXaX_byXnameX_capXaX() {
-        final Traversal<Vertex,Map<String,Collection<Vertex>>> traversal = get_g_V_groupXaX_byXnameX_capXaX();
+        final Traversal<Vertex, Map<String, Collection<Vertex>>> traversal = get_g_V_groupXaX_byXnameX_capXaX();
         printTraversalForm(traversal);
         assertCommonA(traversal);
     }
@@ -166,7 +167,7 @@ public abstract class GroupTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<String, Long>> get_g_V_hasXlangX_group_byXlangX_byX1X_byXcountXlocalXX() {
-            return g.V().has("lang").<String, Long>group().by("lang").by(inject(1)).by(count());
+            return g.V().has("lang").<String, Long>group().by("lang").by(count());
         }
 
         @Override
@@ -176,7 +177,7 @@ public abstract class GroupTest extends AbstractGremlinProcessTest {
 
         @Override
         public Traversal<Vertex, Map<Long, Collection<String>>> get_g_V_group_byXoutE_countX_byXnameX() {
-            return g.V().<Long, Collection<String>>group().by(outE().count()).by("name");
+            return g.V().<Long, Collection<String>>group().by(outE().count()).by(values("name").fold());
         }
     }
 }