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/11 20:45:11 UTC

[05/15] incubator-tinkerpop git commit: added back in ComputerTraversalEngine, StandardTraversalEngine, and TraversalSource.Builder. All are deprecated but are functional with respects to Graph.traversal(TravesalSource.Builder). Both TinkerGraphProvider

added back in ComputerTraversalEngine, StandardTraversalEngine, and TraversalSource.Builder. All are deprecated but are functional with respects to Graph.traversal(TravesalSource.Builder). Both TinkerGraphProvider and SparkGraphProvider have a 50-percent chance of either using the new traversal source model or the old deprecated builder model. This way, we are certain that, for users, this push is backwards compatible. Note that for graph system providers, there is only one new method they need to implement in their XXXGraphProvider test code -- getGraphComputer(). Thus, this ticket is extremely gentle on both users and providers even though it is a massive refactor.


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

Branch: refs/heads/master
Commit: 908433faf631f6d585dd2ff662c430da030f2857
Parents: 5f2cd67
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Feb 9 05:36:13 2016 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Feb 9 05:36:13 2016 -0700

----------------------------------------------------------------------
 .../bulkloading/BulkLoaderVertexProgram.java    |   2 +-
 .../process/traversal/TraversalSource.java      | 121 +++++++++++-
 .../dsl/graph/GraphTraversalSource.java         | 198 ++++++++++++++-----
 .../engine/ComputerTraversalEngine.java         | 107 ++++++----
 .../engine/StandardTraversalEngine.java         |  36 +++-
 .../strategy/decoration/SideEffectStrategy.java |  17 +-
 .../tinkerpop/gremlin/structure/Graph.java      |  41 ++--
 ...-shouldRebindTraversalSourceVariables.groovy |   2 +-
 .../apache/tinkerpop/gremlin/GraphProvider.java |   4 +-
 .../computer/SparkHadoopGraphProvider.java      |   9 +-
 .../process/TinkerGraphComputerProvider.java    |   8 +-
 .../TinkerGraphNoStrategyComputerProvider.java  |   2 +-
 .../process/TinkerGraphNoStrategyProvider.java  |   2 +-
 13 files changed, 416 insertions(+), 133 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/bulkloading/BulkLoaderVertexProgram.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/bulkloading/BulkLoaderVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/bulkloading/BulkLoaderVertexProgram.java
index 8eea782..9f38df2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/bulkloading/BulkLoaderVertexProgram.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/bulkloading/BulkLoaderVertexProgram.java
@@ -171,7 +171,7 @@ public class BulkLoaderVertexProgram implements VertexProgram<Tuple> {
             LOGGER.info("Opened Graph instance: {}", graph);
             try {
                 listener = new BulkLoadingListener();
-                g = new GraphTraversalSource(graph).withStrategy(EventStrategy.build().addListener(listener).create());
+                g = graph.traversal().withStrategies(EventStrategy.build().addListener(listener).create());
             } catch (Exception e) {
                 try {
                     graph.close();

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
index 4354767..3b684a2 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalSource.java
@@ -18,29 +18,130 @@
  */
 package org.apache.tinkerpop.gremlin.process.traversal;
 
+import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 
+import java.io.Serializable;
+import java.util.function.Function;
+
 /**
- * A {@code TraversalSource} is responsible for generating a {@link Traversal}. A {@code TraversalSource}, once built,
- * can generate any number of {@link Traversal} instances. Each traversal DSL will maintain a corresponding
- * {@code TraversalSource} which specifies the methods which being a "fluent-chaining" of traversal steps.
+ * A {@code TraversalSource} is used to create {@link Traversal} instances.
+ * A traversal source can generate any number of {@link Traversal} instances.
+ * A traversal source is primarily composed of a {@link Graph} and a {@link TraversalStrategies}.
+ * Various {@code withXXX}-based methods are used to configure the traversal strategies.
+ * Various other methods (dependent on the traversal source type) will then generate a traversal given the graph and configured strategies.
+ * A traversal source is immutable in that fluent chaining of configurations create new traversal sources.
+ * This is unlike {@link Traversal} and {@link GraphComputer}, where chained methods configure the same instance.
+ * Every traversal source implementation must maintain two constructors to enable proper reflection-based construction.
+ * <p/>
+ * {@code TraversalSource(Graph)} and {@code TraversalSource(Graph,TraversalStrategies)}
  *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public interface TraversalSource extends Cloneable {
 
-    // withStrategy
-    // withoutStrategy
-    // withBulk
-    // withPath
-    // withSack
-    // withSideEffect
-
+    /**
+     * Get the {@link TraversalStrategies} associated with this traversal source.
+     *
+     * @return the traversal strategies of the traversal source
+     */
     public TraversalStrategies getStrategies();
 
+    /**
+     * Get the {@link Graph) associated with this traversal source.
+     *
+     * @return the graph of the traversal source
+     */
     public Graph getGraph();
 
+    /////////////////////////////
+
+    /**
+     * Add a {@link Function} that will generate a {@link GraphComputer} from the {@link Graph} that will be used to execute the traversal.
+     * This adds a {@link org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.TraversalVertexProgramStrategy} to the strategies.
+     *
+     * @param graphComputerFunction a function to generate a graph computer from the graph
+     * @return a new traversal source with updated strategies
+     */
+    public TraversalSource withComputer(final Function<Graph, GraphComputer> graphComputerFunction);
+
+    /**
+     * Add a {@link GraphComputer} class used to execute the traversal.
+     * This adds a {@link org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.TraversalVertexProgramStrategy} to the strategies.
+     *
+     * @param graphComputerClass the graph computer class
+     * @return a new traversal source with updated strategies
+     */
+    public default TraversalSource withComputer(final Class<? extends GraphComputer> graphComputerClass) {
+        return this.withComputer(g -> g.compute(graphComputerClass));
+    }
+
+    /**
+     * Add the standard {@link GraphComputer} of the graph that will be used to execute the traversal.
+     * This adds a {@link org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.TraversalVertexProgramStrategy} to the strategies.
+     *
+     * @return a new traversal source with updated strategies
+     */
+    public default TraversalSource withComputer() {
+        return this.withComputer(Graph::compute);
+    }
+
+    /**
+     * Add an arbitrary collection of {@link TraversalStrategy} instances to the traversal source.
+     *
+     * @param traversalStrategies a colleciton of traversal strategies to add
+     * @return a new traversal source with updated strategies
+     */
+    public TraversalSource withStrategies(final TraversalStrategy... traversalStrategies);
+
+    /**
+     * Remove an arbitrary collection of {@link TraversalStrategy} classes from the traversal source.
+     *
+     * @param traversalStrategyClasses a collection of traversal strategy classes to remove
+     * @return a new traversal source with updated strategies
+     */
+    @SuppressWarnings({"unchecked", "varargs"})
+    public TraversalSource withoutStrategies(final Class<? extends TraversalStrategy>... traversalStrategyClasses);
+
+    /**
+     * The clone-method should be used to create immutable traversal sources with each call to a configuration method.
+     * The clone-method should clone the internal {@link TraversalStrategies}, mutate the cloned strategies accordingly,
+     * and then return the cloned traversal source.
+     *
+     * @return the cloned traversal source
+     */
     @SuppressWarnings("CloneDoesntDeclareCloneNotSupportedException")
     public TraversalSource clone();
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
+    public interface Builder<C extends TraversalSource> extends Serializable {
+
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        public Builder engine(final TraversalEngine.Builder engine);
+
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        public Builder with(final TraversalStrategy strategy);
+
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        public Builder without(final Class<? extends TraversalStrategy> strategyClass);
+
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        public C create(final Graph graph);
+    }
+
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
index 0b7058c..8c8d461 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/dsl/graph/GraphTraversalSource.java
@@ -19,9 +19,12 @@
 package org.apache.tinkerpop.gremlin.process.traversal.dsl.graph;
 
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.StandardTraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.AddVertexStartStep;
 import org.apache.tinkerpop.gremlin.process.traversal.step.map.GraphStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.SackStrategy;
@@ -35,10 +38,8 @@ import org.apache.tinkerpop.gremlin.structure.Transaction;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
-import org.javatuples.Pair;
 
 import java.util.ArrayList;
-import java.util.Collections;
 import java.util.List;
 import java.util.function.BinaryOperator;
 import java.util.function.Function;
@@ -46,6 +47,10 @@ import java.util.function.Supplier;
 import java.util.function.UnaryOperator;
 
 /**
+ * A {@code GraphTraversalSource} is the primary DSL of the Gremlin traversal machine.
+ * It provides access to all the configurations and steps for Turing complete graph computing.
+ * Any DSL can be constructed based on the methods of both {@code GraphTraversalSource} and {@link GraphTraversal}.
+ *
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 public class GraphTraversalSource implements TraversalSource {
@@ -88,56 +93,69 @@ public class GraphTraversalSource implements TraversalSource {
     public GraphTraversalSource clone() {
         try {
             final GraphTraversalSource clone = (GraphTraversalSource) super.clone();
+            clone.strategies = this.strategies.clone();
             return clone;
         } catch (final CloneNotSupportedException e) {
             throw new IllegalStateException(e.getMessage(), e);
         }
     }
 
-    //// UTILITIES
-
+    //// CONFIGURATIONS
 
+    @Override
     public GraphTraversalSource withComputer(final Function<Graph, GraphComputer> graphComputerFunction) {
-        this.strategies = this.strategies.clone();
-        this.strategies.addStrategies(new TraversalVertexProgramStrategy(graphComputerFunction), ComputerVerificationStrategy.instance());
-        return this;
+        final GraphTraversalSource clone = this.clone();
+        clone.strategies.addStrategies(new TraversalVertexProgramStrategy(graphComputerFunction), ComputerVerificationStrategy.instance());
+        return clone;
     }
 
+    @Override
     public GraphTraversalSource withComputer(final Class<? extends GraphComputer> graphComputerClass) {
-        return this.withComputer(g -> g.compute(graphComputerClass));
+        return (GraphTraversalSource) TraversalSource.super.withComputer(graphComputerClass);
     }
 
+    @Override
     public GraphTraversalSource withComputer() {
-        return this.withComputer(Graph::compute);
+        return (GraphTraversalSource) TraversalSource.super.withComputer();
     }
 
-    public GraphTraversalSource withStrategy(final TraversalStrategy... traversalStrategies) {
-        this.strategies = this.strategies.clone();
-        this.strategies.addStrategies(traversalStrategies);
-        return this;
+    @Override
+    public GraphTraversalSource withStrategies(final TraversalStrategy... traversalStrategies) {
+        final GraphTraversalSource clone = this.clone();
+        clone.strategies.addStrategies(traversalStrategies);
+        return clone;
     }
 
-    public GraphTraversalSource withoutStrategy(final Class<? extends TraversalStrategy>... traversalStrategyClass) {
-        this.strategies = this.strategies.clone();
-        this.strategies.removeStrategies(traversalStrategyClass);
-        return this;
+    @Override
+    @SuppressWarnings({"unchecked", "varargs"})
+    public GraphTraversalSource withoutStrategies(final Class<? extends TraversalStrategy>... traversalStrategyClasses) {
+        final GraphTraversalSource clone = this.clone();
+        clone.strategies.removeStrategies(traversalStrategyClasses);
+        return clone;
     }
 
     public GraphTraversalSource withSideEffect(final String key, final Supplier sideEffect) {
-        this.strategies = this.strategies.clone();
-        this.strategies.addStrategies(new SideEffectStrategy(Collections.singletonList(new Pair<>(key, sideEffect))));
-        return this;
+        final GraphTraversalSource clone = this.clone();
+        SideEffectStrategy.addSideEffect(clone.strategies, key, sideEffect);
+        return clone;
     }
 
+    public GraphTraversalSource withSideEffect(final String key, final Object sideEffect) {
+        final GraphTraversalSource clone = this.clone();
+        SideEffectStrategy.addSideEffect(clone.strategies, key, sideEffect);
+        return clone;
+    }
 
-    public GraphTraversalSource withSideEffect(final Object... keyValues) {
-        this.strategies = this.strategies.clone();
-        final List<Pair<String, Supplier>> sideEffects = new ArrayList<>();
-        for (int i = 0; i < keyValues.length; i = i + 2) {
-            sideEffects.add(new Pair<>((String) keyValues[i], keyValues[i + 1] instanceof Supplier ? (Supplier) keyValues[i + 1] : new ConstantSupplier<>(keyValues[i + 1])));
-        }
-        this.strategies.addStrategies(new SideEffectStrategy(sideEffects));
-        return this;
+    public <A> GraphTraversalSource withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator, final BinaryOperator<A> mergeOperator) {
+        final GraphTraversalSource clone = this.clone();
+        clone.strategies.addStrategies(new SackStrategy(initialValue, splitOperator, mergeOperator));
+        return clone;
+    }
+
+    public <A> GraphTraversalSource withSack(final A initialValue, final UnaryOperator<A> splitOperator, final BinaryOperator<A> mergeOperator) {
+        final GraphTraversalSource clone = this.clone();
+        clone.strategies.addStrategies(new SackStrategy(new ConstantSupplier<>(initialValue), splitOperator, mergeOperator));
+        return clone;
     }
 
     public <A> GraphTraversalSource withSack(final A initialValue) {
@@ -145,7 +163,7 @@ public class GraphTraversalSource implements TraversalSource {
     }
 
     public <A> GraphTraversalSource withSack(final Supplier<A> initialValue) {
-        return this;//.withSack((Supplier<A>) initialValue, null, null);
+        return this.withSack(initialValue, (UnaryOperator<A>) null, null);
     }
 
     public <A> GraphTraversalSource withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator) {
@@ -164,29 +182,19 @@ public class GraphTraversalSource implements TraversalSource {
         return this.withSack(initialValue, null, mergeOperator);
     }
 
-    public <A> GraphTraversalSource withSack(final Supplier<A> initialValue, final UnaryOperator<A> splitOperator, final BinaryOperator<A> mergeOperator) {
-        this.strategies = this.strategies.clone();
-        this.strategies.addStrategies(new SackStrategy(initialValue, splitOperator, mergeOperator));
-        return this;
-    }
-
-    public <A> GraphTraversalSource withSack(final A initialValue, final UnaryOperator<A> splitOperator, final BinaryOperator<A> mergeOperator) {
-        this.strategies = this.strategies.clone();
-        this.strategies.addStrategies(new SackStrategy(new ConstantSupplier<>(initialValue), splitOperator, mergeOperator));
-        return this;
-    }
-
     public GraphTraversalSource withBulk(final boolean useBulk) {
-        this.oneBulk = !useBulk;
-        return this;
+        final GraphTraversalSource clone = this.clone();
+        clone.oneBulk = !useBulk;
+        return clone;
     }
 
-    public <S> GraphTraversalSource withPath() {
-        this.pathOn = true;
-        return this;
+    public GraphTraversalSource withPath() {
+        final GraphTraversalSource clone = this.clone();
+        clone.pathOn = true;
+        return clone;
     }
 
-    /////////////////////////////
+    //// SPAWNS
 
     /**
      * @deprecated As of release 3.1.0, replaced by {@link #addV()}
@@ -233,4 +241,100 @@ public class GraphTraversalSource implements TraversalSource {
     public String toString() {
         return StringFactory.traversalSourceString(this);
     }
+
+    //////////////////
+    // DEPRECATION //
+    /////////////////
+
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
+    public static Builder build() {
+        return new Builder();
+    }
+
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
+    public static Builder standard() {
+        return GraphTraversalSource.build().engine(StandardTraversalEngine.build());
+    }
+
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
+    public static Builder computer() {
+        return GraphTraversalSource.build().engine(ComputerTraversalEngine.build());
+    }
+
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
+    public static Builder computer(final Class<? extends GraphComputer> graphComputerClass) {
+        return GraphTraversalSource.build().engine(ComputerTraversalEngine.build().computer(graphComputerClass));
+    }
+
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
+    public final static class Builder implements TraversalSource.Builder<GraphTraversalSource> {
+
+        private TraversalEngine.Builder engineBuilder = StandardTraversalEngine.build();
+        private List<TraversalStrategy> withStrategies = new ArrayList<>();
+        private List<Class<? extends TraversalStrategy>> withoutStrategies = new ArrayList<>();
+
+        private Builder() {
+        }
+
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        @Override
+        public Builder engine(final TraversalEngine.Builder engineBuilder) {
+            this.engineBuilder = engineBuilder;
+            return this;
+        }
+
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        @Override
+        public Builder with(final TraversalStrategy strategy) {
+            this.withStrategies.add(strategy);
+            return this;
+        }
+
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        @Override
+        public TraversalSource.Builder without(final Class<? extends TraversalStrategy> strategyClass) {
+            this.withoutStrategies.add(strategyClass);
+            return this;
+        }
+
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        @Override
+        public GraphTraversalSource create(final Graph graph) {
+            GraphTraversalSource traversalSource = new GraphTraversalSource(graph);
+            if (!this.withStrategies.isEmpty())
+                traversalSource = traversalSource.withStrategies(this.withStrategies.toArray(new TraversalStrategy[this.withStrategies.size()]));
+            if (!this.withoutStrategies.isEmpty())
+                traversalSource = traversalSource.withoutStrategies(this.withoutStrategies.toArray(new Class[this.withoutStrategies.size()]));
+            if (this.engineBuilder instanceof ComputerTraversalEngine.Builder)
+                traversalSource = (GraphTraversalSource) ((ComputerTraversalEngine.Builder) this.engineBuilder).create(traversalSource);
+            return traversalSource;
+        }
+    }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
index 0064502..643c3d4 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/ComputerTraversalEngine.java
@@ -21,22 +21,20 @@ package org.apache.tinkerpop.gremlin.process.traversal.engine;
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.finalization.ProfileStrategy;
+import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.Edge;
 import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.structure.Vertex;
 
 import java.util.Collections;
-import java.util.HashSet;
 import java.util.List;
 import java.util.Optional;
-import java.util.Set;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
  */
 @Deprecated
 public final class ComputerTraversalEngine implements TraversalEngine {
@@ -47,60 +45,102 @@ public final class ComputerTraversalEngine implements TraversalEngine {
         this.graphComputer = graphComputer;
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     @Override
     public Type getType() {
         return Type.COMPUTER;
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     @Override
     public String toString() {
-        return null;
-        //return StringFactory.traversalEngineString(this);
+        return this.getClass().getSimpleName().toLowerCase();
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     @Override
     public Optional<GraphComputer> getGraphComputer() {
         return Optional.ofNullable(this.graphComputer);
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     public static Builder build() {
         return new Builder();
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     public final static class Builder implements TraversalEngine.Builder {
 
         private Class<? extends GraphComputer> graphComputerClass;
         private int workers = -1;
-        private static final List<TraversalStrategy> WITH_STRATEGIES = Collections.singletonList(ComputerResultStrategy.instance());
         private Traversal<Vertex, Vertex> vertexFilter = null;
         private Traversal<Vertex, Edge> edgeFilter = null;
 
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
         @Override
         public List<TraversalStrategy> getWithStrategies() {
-            return WITH_STRATEGIES;
+            return Collections.emptyList();
         }
 
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
         public Builder workers(final int workers) {
             this.workers = workers;
             return this;
         }
 
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
         public Builder computer(final Class<? extends GraphComputer> graphComputerClass) {
             this.graphComputerClass = graphComputerClass;
             return this;
         }
 
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
         public Builder vertices(final Traversal<Vertex, Vertex> vertexFilter) {
             this.vertexFilter = vertexFilter;
             return this;
         }
 
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
         public Builder edges(final Traversal<Vertex, Edge> edgeFilter) {
             this.edgeFilter = edgeFilter;
             return this;
         }
 
 
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
         public ComputerTraversalEngine create(final Graph graph) {
             GraphComputer graphComputer = null == this.graphComputerClass ? graph.compute() : graph.compute(this.graphComputerClass);
             if (-1 != this.workers)
@@ -111,40 +151,23 @@ public final class ComputerTraversalEngine implements TraversalEngine {
                 graphComputer = graphComputer.edges(this.edgeFilter);
             return new ComputerTraversalEngine(graphComputer);
         }
-    }
-
-    ////
-
-    public static class ComputerResultStrategy extends AbstractTraversalStrategy<TraversalStrategy.FinalizationStrategy> implements TraversalStrategy.FinalizationStrategy {
-
-        private static final ComputerResultStrategy INSTANCE = new ComputerResultStrategy();
-        private static final Set<Class<? extends FinalizationStrategy>> PRIORS = new HashSet<>();
-
-        static {
-            PRIORS.add(ProfileStrategy.class);
-        }
-
-
-        private ComputerResultStrategy() {
-
-        }
-
-        @Override
-        public void apply(final Traversal.Admin<?, ?> traversal) {
-            if (traversal.getParent() instanceof EmptyStep) {
-                //final TraversalEngine engine = traversal.getEngine();
-                //if (engine.isComputer())
-                //    traversal.addStep(new ComputerResultStep<>(traversal, engine.getGraphComputer().get(), true));
-            }
-        }
-
-        @Override
-        public Set<Class<? extends FinalizationStrategy>> applyPrior() {
-            return PRIORS;
-        }
 
-        public static ComputerResultStrategy instance() {
-            return INSTANCE;
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
+        public TraversalSource create(GraphTraversalSource traversalSource) {
+            traversalSource = traversalSource.withComputer(g -> {
+                GraphComputer graphComputer = (null == this.graphComputerClass) ? g.compute() : g.compute(this.graphComputerClass);
+                if (-1 != this.workers)
+                    graphComputer = graphComputer.workers(this.workers);
+                if (null != this.vertexFilter)
+                    graphComputer = graphComputer.vertices(this.vertexFilter);
+                if (null != this.edgeFilter)
+                    graphComputer = graphComputer.edges(this.edgeFilter);
+                return graphComputer;
+            });
+            return traversalSource;
         }
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
index d72dc36..1dbd8e7 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/engine/StandardTraversalEngine.java
@@ -26,44 +26,76 @@ import java.util.Optional;
 
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
+ * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
  */
 @Deprecated
 public final class StandardTraversalEngine implements TraversalEngine {
 
     private static final StandardTraversalEngine INSTANCE = new StandardTraversalEngine();
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     private StandardTraversalEngine() {
 
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     @Override
     public Type getType() {
         return Type.STANDARD;
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     @Override
     public Optional<GraphComputer> getGraphComputer() {
         return Optional.empty();
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     public static Builder build() {
         return Builder.INSTANCE;
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     public static StandardTraversalEngine instance() {
         return INSTANCE;
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     @Override
     public String toString() {
-        return "null";
-        //return StringFactory.traversalEngineString(this);
+        return this.getClass().getSimpleName().toLowerCase();
     }
 
+    /**
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     public final static class Builder implements TraversalEngine.Builder {
 
         private static final Builder INSTANCE = new Builder();
 
+        /**
+         * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+         */
+        @Deprecated
         @Override
         public TraversalEngine create(final Graph graph) {
             return StandardTraversalEngine.INSTANCE;

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java
index 02c76be..c68f0c3 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java
@@ -20,11 +20,14 @@
 package org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategies;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
 import org.apache.tinkerpop.gremlin.process.traversal.strategy.AbstractTraversalStrategy;
+import org.apache.tinkerpop.gremlin.util.function.ConstantSupplier;
 import org.javatuples.Pair;
 
+import java.util.ArrayList;
 import java.util.List;
 import java.util.function.Supplier;
 
@@ -33,10 +36,9 @@ import java.util.function.Supplier;
  */
 public final class SideEffectStrategy extends AbstractTraversalStrategy<TraversalStrategy.DecorationStrategy> implements TraversalStrategy.DecorationStrategy {
 
-    private final List<Pair<String, Supplier>> sideEffects;
+    private final List<Pair<String, Supplier>> sideEffects = new ArrayList<>();
 
-    public SideEffectStrategy(final List<Pair<String, Supplier>> sideEffects) {
-        this.sideEffects = sideEffects;
+    private SideEffectStrategy() {
     }
 
     @Override
@@ -44,4 +46,13 @@ public final class SideEffectStrategy extends AbstractTraversalStrategy<Traversa
         if (traversal.getParent() instanceof EmptyStep)
             this.sideEffects.forEach(pair -> traversal.getSideEffects().registerSupplier(pair.getValue0(), pair.getValue1()));
     }
+
+    public static void addSideEffect(final TraversalStrategies traversalStrategies, final String key, final Object value) {
+        SideEffectStrategy strategy = (SideEffectStrategy) traversalStrategies.toList().stream().filter(s -> s instanceof SideEffectStrategy).findAny().orElse(null);
+        if (null == strategy) {
+            strategy = new SideEffectStrategy();
+            traversalStrategies.addStrategies(strategy);
+        }
+        strategy.sideEffects.add(new Pair<>(key, value instanceof Supplier ? (Supplier) value : new ConstantSupplier<>(value)));
+    }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
index 93bd810..943be7f 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/structure/Graph.java
@@ -23,7 +23,6 @@ import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
 import org.apache.tinkerpop.gremlin.process.traversal.TraversalSource;
-import org.apache.tinkerpop.gremlin.process.traversal.TraversalStrategy;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
 import org.apache.tinkerpop.gremlin.structure.io.Io;
 import org.apache.tinkerpop.gremlin.structure.io.IoRegistry;
@@ -146,40 +145,42 @@ public interface Graph extends AutoCloseable, Host {
     public GraphComputer compute() throws IllegalArgumentException;
 
     /**
-     * Generate a {@link TraversalSource} using the specified {@code TraversalSource.Builder}. The {@link TraversalSource}
-     * provides methods for creating a {@link Traversal} given the context of {@link TraversalStrategy} implementations
-     * and a {@link GraphComputer}.
+     * Generate a {@link TraversalSource} using the specified {@code TraversalSource} class.
+     * The reusable {@link TraversalSource} provides methods for spawning {@link Traversal} instances.
      *
-     * @param traversalSource The traversal source to use
-     * @param <C>             The traversal source class
+     * @param traversalSourceClass The traversal source class
+     * @param <C>                  The traversal source class
      */
-    public default <C extends TraversalSource> C traversal(final TraversalSource traversalSource) {
-        return (C) traversalSource; // make this a class
+    public default <C extends TraversalSource> C traversal(final Class<C> traversalSourceClass) {
+        try {
+            return traversalSourceClass.getConstructor(Graph.class).newInstance(this);
+        } catch (final Exception e) {
+            throw new IllegalStateException(e.getMessage(), e);
+        }
     }
 
-
-    /*
-     * Generate a {@link TraversalSource} using the specified {@code TraversalSource.Builder}. The {@link TraversalSource}
-     * provides methods for creating a {@link Traversal} given the context of {@link TraversalStrategy} implementations
-     * and a {@link GraphComputer}.
+    /**
+     * Generate a {@link TraversalSource} using the specified {@code TraversalSource.Builder}.
+     * The reusable {@link TraversalSource} provides methods for spawning {@link Traversal} instances.
      *
      * @param sourceBuilder The traversal source builder to use
      * @param <C>           The traversal source class
-
+     * @deprecated As of release 3.2.0. Please use {@link Graph#traversal(Class)}.
+     */
+    @Deprecated
     public default <C extends TraversalSource> C traversal(final TraversalSource.Builder<C> sourceBuilder) {
         return sourceBuilder.create(this);
     }
-    *
 
     /**
-     * Generate a {@link GraphTraversalSource} instance. The
-     * {@link TraversalSource} provides methods for creating a {@link Traversal} given the context of
-     * {@link TraversalStrategy} implementations and a {@link GraphComputer}.
+     * Generate a reusable {@link GraphTraversalSource} instance.
+     * The {@link GraphTraversalSource} provides methods for creating
+     * {@link org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversal} instances.
      *
-     * @return A standard graph traversal source
+     * @return A graph traversal source
      */
     public default GraphTraversalSource traversal() {
-        return this.traversal(new GraphTraversalSource(this));
+        return new GraphTraversalSource(this);
     }
 
     /**

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/generate-shouldRebindTraversalSourceVariables.groovy
----------------------------------------------------------------------
diff --git a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/generate-shouldRebindTraversalSourceVariables.groovy b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/generate-shouldRebindTraversalSourceVariables.groovy
index 909cd69..8497c80 100644
--- a/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/generate-shouldRebindTraversalSourceVariables.groovy
+++ b/gremlin-server/src/test/resources/org/apache/tinkerpop/gremlin/server/generate-shouldRebindTraversalSourceVariables.groovy
@@ -18,5 +18,5 @@
  */
 
 def globals = [:]
-globals << [g : graph.traversal(GraphTraversalSource.build().with(ReadOnlyStrategy.instance()))]
+globals << [g : graph.traversal().withStrategies(ReadOnlyStrategy.instance())]
 globals << [g1 : graph.traversal()]
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
index e62dcb5..f1a0172 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/GraphProvider.java
@@ -89,7 +89,7 @@ public interface GraphProvider {
      * {@link org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine.Type}.
      */
     public default GraphTraversalSource traversal(final Graph graph) {
-        return new GraphTraversalSource(graph);
+        return graph.traversal();
     }
 
     /**
@@ -103,7 +103,7 @@ public interface GraphProvider {
      * it's {@code create} method.
      */
     public default GraphTraversalSource traversal(final Graph graph, final TraversalStrategy... strategies) {
-        return this.traversal(graph).withStrategy(strategies);
+        return this.traversal(graph).withStrategies(strategies);
     }
 
     public default GraphComputer getGraphComputer(final Graph graph) {

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
----------------------------------------------------------------------
diff --git a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
index 3a93b66..0730ba8 100644
--- a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
+++ b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/SparkHadoopGraphProvider.java
@@ -27,6 +27,7 @@ import org.apache.tinkerpop.gremlin.hadoop.groovy.plugin.HadoopGremlinPluginChec
 import org.apache.tinkerpop.gremlin.hadoop.structure.io.FileSystemStorageCheck;
 import org.apache.tinkerpop.gremlin.process.computer.GraphComputer;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.GraphTraversalSource;
+import org.apache.tinkerpop.gremlin.process.traversal.engine.ComputerTraversalEngine;
 import org.apache.tinkerpop.gremlin.spark.structure.Spark;
 import org.apache.tinkerpop.gremlin.spark.structure.io.PersistedOutputRDD;
 import org.apache.tinkerpop.gremlin.spark.structure.io.SparkContextStorageCheck;
@@ -75,8 +76,12 @@ public final class SparkHadoopGraphProvider extends HadoopGraphProvider {
     @Override
     public GraphTraversalSource traversal(final Graph graph) {
         return RANDOM.nextBoolean() ?
-                graph.traversal().withComputer(g -> g.compute(SparkGraphComputer.class).workers(RANDOM.nextInt(3) + 1)) :
-                graph.traversal().withComputer(SparkGraphComputer.class);
+                RANDOM.nextBoolean() ?
+                        graph.traversal(GraphTraversalSource.build().engine(ComputerTraversalEngine.build().computer(SparkGraphComputer.class).workers(RANDOM.nextInt(3) + 1))) :
+                        graph.traversal().withComputer(g -> g.compute(SparkGraphComputer.class).workers(RANDOM.nextInt(3) + 1)) :
+                RANDOM.nextBoolean() ?
+                        graph.traversal(GraphTraversalSource.computer(SparkGraphComputer.class)) :
+                        graph.traversal().withComputer(SparkGraphComputer.class);
     }
 
     @Override

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphComputerProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphComputerProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphComputerProvider.java
index 587c218..217806a 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphComputerProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphComputerProvider.java
@@ -24,14 +24,20 @@ import org.apache.tinkerpop.gremlin.structure.Graph;
 import org.apache.tinkerpop.gremlin.tinkergraph.TinkerGraphProvider;
 import org.apache.tinkerpop.gremlin.tinkergraph.process.computer.TinkerGraphComputer;
 
+import java.util.Random;
+
 /**
  * @author Marko A. Rodriguez (http://markorodriguez.com)
  */
 @GraphProvider.Descriptor(computer = TinkerGraphComputer.class)
 public class TinkerGraphComputerProvider extends TinkerGraphProvider {
 
+    private static final Random RANDOM = new Random();
+
     @Override
     public GraphTraversalSource traversal(final Graph graph) {
-        return new GraphTraversalSource(graph).withComputer(Graph::compute);
+        return RANDOM.nextBoolean() ?
+                graph.traversal().withComputer(Graph::compute) :
+                graph.traversal(GraphTraversalSource.computer());
     }
 }

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyComputerProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyComputerProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyComputerProvider.java
index faa4958..b56fdc5 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyComputerProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyComputerProvider.java
@@ -48,6 +48,6 @@ public class TinkerGraphNoStrategyComputerProvider extends TinkerGraphComputerPr
                 .map(TraversalStrategy::getClass)
                 .filter(clazz -> !REQUIRED_STRATEGIES.contains(clazz))
                 .collect(Collectors.toList());
-        return graph.traversal().withoutStrategy(toRemove.toArray(new Class[toRemove.size()])).withComputer(Graph::compute);
+        return graph.traversal().withoutStrategies(toRemove.toArray(new Class[toRemove.size()])).withComputer(Graph::compute);
     }
 }
\ No newline at end of file

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/908433fa/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyProvider.java
----------------------------------------------------------------------
diff --git a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyProvider.java b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyProvider.java
index 3937d16..43971d1 100644
--- a/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyProvider.java
+++ b/tinkergraph-gremlin/src/test/java/org/apache/tinkerpop/gremlin/tinkergraph/process/TinkerGraphNoStrategyProvider.java
@@ -54,6 +54,6 @@ public class TinkerGraphNoStrategyProvider extends TinkerGraphProvider {
                 .map(TraversalStrategy::getClass)
                 .filter(clazz -> !REQUIRED_STRATEGIES.contains(clazz))
                 .collect(Collectors.toList());
-        return graph.traversal().withoutStrategy(toRemove.toArray(new Class[toRemove.size()]));
+        return graph.traversal().withoutStrategies(toRemove.toArray(new Class[toRemove.size()]));
     }
 }