You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by ok...@apache.org on 2016/02/25 18:40:47 UTC

incubator-tinkerpop git commit: RangeGlobalStep is now computing in TraversalVertexProgram. Will slowly dissect away the end-steps of TraverserMapReduce such that we have a pure OLTP/OLAP model within TraversalVertexProgram.

Repository: incubator-tinkerpop
Updated Branches:
  refs/heads/TINKERPOP-1166 aae891038 -> d1812f806


RangeGlobalStep is now computing in TraversalVertexProgram. Will slowly dissect away the end-steps of TraverserMapReduce such that we have a pure OLTP/OLAP model within TraversalVertexProgram.


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

Branch: refs/heads/TINKERPOP-1166
Commit: d1812f806cd360ce5716a620413a28938ef80ab6
Parents: aae8910
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Thu Feb 25 10:40:40 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Feb 25 10:40:40 2016 -0700

----------------------------------------------------------------------
 .../traversal/TraversalVertexProgram.java       | 28 ++++++---
 .../computer/traversal/TraverserExecutor.java   |  9 +++
 .../mapreduce/TraverserMapReduce.java           | 12 +---
 .../process/traversal/step/GraphComputing.java  |  4 +-
 .../traversal/step/filter/RangeGlobalStep.java  | 61 +++++++++++++++++---
 .../step/sideEffect/SideEffectCapStep.java      | 11 +---
 .../ComputerVerificationStrategy.java           |  3 +-
 7 files changed, 89 insertions(+), 39 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d1812f80/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 9d7be24..70dbf94 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,6 +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.GraphComputing;
 import org.apache.tinkerpop.gremlin.process.traversal.step.MapReducer;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.SideEffectCapStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
@@ -119,14 +120,16 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
             this.mapReducers.add(mapReducer.getMapReduce());
             this.memoryComputeKeys.add(MemoryComputeKey.of(mapReducer.getMapReduce().getMemoryKey(), MemoryComputeKey.setOperator(), false, false));
         }
-        if (!(this.traversal.get().getEndStep() instanceof SideEffectCapStep) && !(this.traversal.get().getEndStep() instanceof ReducingBarrierStep)) {
+        if (!(this.traversal.get().getEndStep() instanceof SideEffectCapStep) && !(this.traversal.get().getEndStep() instanceof ReducingBarrierStep) && !(this.traversal.get().getEndStep() instanceof RangeGlobalStep)) {
             this.mapReducers.add(new TraverserMapReduce(this.traversal.get()));
-            this.memoryComputeKeys.add(MemoryComputeKey.of(TraverserMapReduce.TRAVERSERS, MemoryComputeKey.setOperator(), false, false));
         }
-        for (final GraphComputing graphComputing : TraversalHelper.getStepsOfAssignableClassRecursively(GraphComputing.class, this.traversal.get())) {
+
+        for (final GraphComputing<?> graphComputing : TraversalHelper.getStepsOfAssignableClassRecursively(GraphComputing.class, this.traversal.get())) {
             graphComputing.getMemoryComputeKey().ifPresent(this.memoryComputeKeys::add);
-            graphComputing.getMemoryComputeKey().ifPresent(x -> this.sideEffectKeys.add(x.getKey())); // TODO: when no more MapReducers, you can remove this
+            graphComputing.getMemoryComputeKey().ifPresent(x -> this.sideEffectKeys.add(x.getKey())); // TODO: when no more MapReducers, you can remove thisi
         }
+
+        this.memoryComputeKeys.add(MemoryComputeKey.of(TraverserMapReduce.TRAVERSERS, MemoryComputeKey.setOperator(), false, false));
     }
 
     @Override
@@ -141,6 +144,9 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
         for (final ReducingBarrierStep<?, ?> reducingBarrierStep : TraversalHelper.getStepsOfAssignableClassRecursively(ReducingBarrierStep.class, this.traversal.get())) {
             memory.set(ReducingBarrierStep.REDUCING, reducingBarrierStep.getSeedSupplier().get());
         }
+        for (final RangeGlobalStep<?> reducingBarrierStep : TraversalHelper.getStepsOfAssignableClassRecursively(RangeGlobalStep.class, this.traversal.get())) {
+            memory.set(reducingBarrierStep.getId(), new TraverserSet<>());
+        }
     }
 
     @Override
@@ -194,9 +200,17 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet<
     public boolean terminate(final Memory memory) {
         final boolean voteToHalt = memory.<Boolean>get(VOTE_TO_HALT);
         if (voteToHalt) {
-            for (final GraphComputing graphComputing : TraversalHelper.getStepsOfAssignableClassRecursively(GraphComputing.class, this.traversal.get())) {
-                graphComputing.getMemoryComputeKey().ifPresent(key -> {
-                    memory.set(key.getKey(), graphComputing.generateFinalResult(memory.get(key.getKey())));
+            for (final GraphComputing<Object> graphComputing : TraversalHelper.getStepsOfAssignableClassRecursively(GraphComputing.class, this.traversal.get())) {
+                graphComputing.getMemoryComputeKey().ifPresent(memoryKey -> {
+                    final String key = memoryKey.getKey();
+                    if (memory.exists(key)) {
+                        if(graphComputing instanceof RangeGlobalStep) {
+                            memory.set(TraverserMapReduce.TRAVERSERS, ((TraverserSet)graphComputing.generateFinalResult(memory.get(key))).iterator());
+                        } else {
+                            memory.set(key, graphComputing.generateFinalResult(memory.get(key)));
+                        }
+
+                    }
                 });
             }
             return true;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d1812f80/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java
index 4660183..18bf48f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraverserExecutor.java
@@ -24,6 +24,7 @@ import org.apache.tinkerpop.gremlin.process.computer.Messenger;
 import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSideEffects;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
@@ -107,6 +108,14 @@ public final class TraverserExecutor {
     private static void drainStep(final Step<?, ?> step, final TraverserSet<?> aliveTraversers, final TraverserSet<?> haltedTraversers, final Memory memory) {
         if (step instanceof ReducingBarrierStep) {
             memory.add(ReducingBarrierStep.REDUCING, step.next().get());
+        } else if (step instanceof RangeGlobalStep) {
+            ((RangeGlobalStep) step).setBypass(true);
+            final TraverserSet<?> traverserSet = new TraverserSet<>();
+            step.forEachRemaining(traverser -> {
+                traverser.asAdmin().detach();
+                traverserSet.add((Traverser.Admin) traverser);
+            });
+            memory.add(step.getId(), traverserSet);
         } else {
             step.forEachRemaining(traverser -> {
                 if (traverser.asAdmin().isHalted()) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d1812f80/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 a0245aa..77eb344 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
@@ -22,13 +22,11 @@ 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.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.TraversalParent;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.DedupGlobalStep;
-import org.apache.tinkerpop.gremlin.process.traversal.step.filter.RangeGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.filter.TailGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.OrderGlobalStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.CollectingBarrierStep;
@@ -57,7 +55,6 @@ public final class TraverserMapReduce implements MapReduce<Comparable, Traverser
     private Comparator<Comparable> comparator = null;
     private CollectingBarrierStep<?> collectingBarrierStep = null;
     private boolean attachHaltedTraverser = false;
-    private RangeGlobalStep<?> rangeGlobalStep = null;
     private TailGlobalStep<?> tailGlobalStep = null;
     private boolean dedupGlobal = false;
 
@@ -96,8 +93,6 @@ public final class TraverserMapReduce implements MapReduce<Comparable, Traverser
                 this.attachHaltedTraverser = ((TraversalParent) this.collectingBarrierStep).getLocalChildren().stream().filter(TraversalHelper::isBeyondElementId).findAny().isPresent();
             }
         }
-        if (traversalEndStep instanceof RangeGlobalStep)
-            this.rangeGlobalStep = ((RangeGlobalStep) traversalEndStep).clone();
         if (traversalEndStep instanceof TailGlobalStep)
             this.tailGlobalStep = ((TailGlobalStep) traversalEndStep).clone();
         if (traversalEndStep instanceof DedupGlobalStep)
@@ -107,7 +102,7 @@ public final class TraverserMapReduce implements MapReduce<Comparable, Traverser
 
     @Override
     public boolean doStage(final Stage stage) {
-        return stage.equals(Stage.MAP) || null != this.collectingBarrierStep || null != this.rangeGlobalStep || null != this.tailGlobalStep || this.dedupGlobal;
+        return stage.equals(Stage.MAP) || null != this.collectingBarrierStep || null != this.tailGlobalStep || this.dedupGlobal;
     }
 
     @Override
@@ -161,11 +156,6 @@ public final class TraverserMapReduce implements MapReduce<Comparable, Traverser
             }
             this.collectingBarrierStep.barrierConsumer((TraverserSet) traverserSet);
             return (Iterator) traverserSet.iterator();
-        } else if (null != this.rangeGlobalStep) {
-            final RangeGlobalStep<?> rangeGlobalStep = this.rangeGlobalStep;
-            rangeGlobalStep.setBypass(false);
-            rangeGlobalStep.addStarts(IteratorUtils.map(keyValues, keyValue -> (Traverser) keyValue.getValue()));
-            return (Iterator) rangeGlobalStep;
         } else if (null != this.tailGlobalStep) {
             final TailGlobalStep<?> tailGlobalStep = this.tailGlobalStep;
             tailGlobalStep.setBypass(false);

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d1812f80/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java
index 941681f..3904d74 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/GraphComputing.java
@@ -25,7 +25,7 @@ import java.util.Optional;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public interface GraphComputing {
+public interface GraphComputing<R> {
 
     public void onGraphComputer();
 
@@ -33,7 +33,7 @@ public interface GraphComputing {
         return Optional.empty();
     }
 
-    public default Object generateFinalResult(final Object a) {
+    public default R generateFinalResult(final R a) {
         return a;
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d1812f80/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
index e270204..bf64761 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/RangeGlobalStep.java
@@ -18,28 +18,34 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal.step.filter;
 
+import org.apache.tinkerpop.gremlin.process.computer.MemoryComputeKey;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Bypassing;
+import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
 import org.apache.tinkerpop.gremlin.process.traversal.step.Ranging;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 
+import java.io.Serializable;
 import java.util.Collections;
+import java.util.Optional;
 import java.util.Set;
 import java.util.concurrent.atomic.AtomicLong;
+import java.util.function.BinaryOperator;
 
 /**
  * @author Bob Briody (http://bobbriody.com)
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging, Bypassing {
+public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging, GraphComputing<TraverserSet>, Bypassing {
 
-    private final long low;
+    private long low;
     private final long high;
     private AtomicLong counter = new AtomicLong(0l);
-    private boolean bypass = false;
+    private boolean bypass;
 
     public RangeGlobalStep(final Traversal.Admin traversal, final long low, final long high) {
         super(traversal);
@@ -50,10 +56,6 @@ public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging,
         this.high = high;
     }
 
-    public void setBypass(final boolean bypass) {
-        this.bypass = bypass;
-    }
-
     @Override
     protected boolean filter(final Traverser.Admin<S> traverser) {
         if (this.bypass) return true;
@@ -99,10 +101,12 @@ public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging,
         return StringFactory.stepString(this, this.low, this.high);
     }
 
+    @Override
     public long getLowRange() {
         return this.low;
     }
 
+    @Override
     public long getHighRange() {
         return this.high;
     }
@@ -116,11 +120,52 @@ public final class RangeGlobalStep<S> extends FilterStep<S> implements Ranging,
 
     @Override
     public int hashCode() {
-        return super.hashCode() ^ Long.hashCode(this.low) ^ Long.hashCode(this.high) ^ Boolean.hashCode(this.bypass);
+        return super.hashCode() ^ Long.hashCode(this.low) ^ Long.hashCode(this.high);
     }
 
     @Override
     public Set<TraverserRequirement> getRequirements() {
         return Collections.singleton(TraverserRequirement.BULK);
     }
+
+    @Override
+    public void onGraphComputer() {
+
+    }
+
+    @Override
+    public Optional<MemoryComputeKey> getMemoryComputeKey() {
+        return Optional.of(MemoryComputeKey.of(this.getId(), new RangeBiOperator(this.high), false, true));
+    }
+
+    @Override
+    public TraverserSet generateFinalResult(final TraverserSet traverserSet) {
+        final TraverserSet resultSet = new TraverserSet();
+        this.addStarts(traverserSet.iterator());
+        this.forEachRemaining(t -> resultSet.add(t.asAdmin()));
+        return resultSet;
+    }
+
+    @Override
+    public void setBypass(final boolean bypass) {
+        this.bypass = bypass;
+    }
+
+    ////////////////
+
+    public static final class RangeBiOperator implements BinaryOperator<TraverserSet>, Serializable {
+
+        private final long highRange;
+
+        public RangeBiOperator(final long highRange) {
+            this.highRange = highRange;
+        }
+
+        @Override
+        public TraverserSet apply(final TraverserSet mutatingSeed, final TraverserSet set) {
+            if (mutatingSeed.size() < this.highRange)
+                mutatingSeed.addAll(set);
+            return mutatingSeed;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d1812f80/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java
index 7929297..1a973a3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/SideEffectCapStep.java
@@ -20,7 +20,6 @@ package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
-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.util.SupplyingBarrierStep;
 import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
@@ -37,7 +36,7 @@ import java.util.Set;
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
-public final class SideEffectCapStep<S, E> extends SupplyingBarrierStep<S, E> implements ByModulating, GraphComputing {
+public final class SideEffectCapStep<S, E> extends SupplyingBarrierStep<S, E> implements GraphComputing {
 
     private List<String> sideEffectKeys;
     private transient Map<String, GraphComputing> sideEffectFinalizer;
@@ -80,7 +79,7 @@ public final class SideEffectCapStep<S, E> extends SupplyingBarrierStep<S, E> im
         if (!this.onGraphComputer && null == this.sideEffectFinalizer) {
             this.sideEffectFinalizer = new HashMap<>();
             for (final String key : this.sideEffectKeys) {
-                for (final GraphComputing graphComputing : TraversalHelper.getStepsOfAssignableClassRecursively(GraphComputing.class, TraversalHelper.getRootTraversal(this.getTraversal()))) {
+                for (final GraphComputing<?> graphComputing : TraversalHelper.getStepsOfAssignableClassRecursively(GraphComputing.class, TraversalHelper.getRootTraversal(this.getTraversal()))) {
                     if (graphComputing.getMemoryComputeKey().isPresent() && graphComputing.getMemoryComputeKey().get().getKey().equals(key)) {
                         this.sideEffectFinalizer.put(key, graphComputing);
                     }
@@ -120,12 +119,6 @@ public final class SideEffectCapStep<S, E> extends SupplyingBarrierStep<S, E> im
         return sideEffects;
     }
 
-    // TODO: either expand or make this a strategy
-    @Override
-    public void modulateBy(final Traversal.Admin<?, ?> traversal) throws UnsupportedOperationException {
-        ((ByModulating) this.getPreviousStep()).modulateBy(traversal);
-    }
-
     @Override
     public void onGraphComputer() {
         this.onGraphComputer = true;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/d1812f80/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
index aefe44c..ca61103 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java
@@ -65,7 +65,6 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg
             ReducingBarrierStep.class,
             SupplyingBarrierStep.class,
             OrderGlobalStep.class,
-            RangeGlobalStep.class,
             TailGlobalStep.class,
             DedupGlobalStep.class));
 
@@ -114,7 +113,7 @@ public final class ComputerVerificationStrategy extends AbstractTraversalStrateg
                     throw new VerificationException("The final CollectingBarrierStep can not operate on edges or their properties:" + endStep, traversal);
             }
             ///
-            if (endStep instanceof RangeGlobalStep || endStep instanceof TailGlobalStep || endStep instanceof DedupGlobalStep)
+            if (endStep instanceof TailGlobalStep || endStep instanceof DedupGlobalStep)
                 ((Bypassing) endStep).setBypass(true);
             if (endStep instanceof DedupGlobalStep && !((DedupGlobalStep) endStep).getScopeKeys().isEmpty())
                 throw new VerificationException("Path history de-duplication is not possible in GraphComputer:" + endStep, traversal);