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/02/14 01:57:46 UTC

[2/3] incubator-tinkerpop git commit: renamed DedupStep -> DedupGlobalStep and SampleStep -> SampleGlobalStep

renamed DedupStep -> DedupGlobalStep and SampleStep -> SampleGlobalStep


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

Branch: refs/heads/master
Commit: 874f474cd1d0ff16810565e2b869258c992c346b
Parents: c93e1e2
Author: Daniel Kuppitz <da...@hotmail.com>
Authored: Sat Feb 14 01:19:27 2015 +0100
Committer: Daniel Kuppitz <da...@hotmail.com>
Committed: Sat Feb 14 01:19:27 2015 +0100

----------------------------------------------------------------------
 .../process/graph/traversal/GraphTraversal.java |  12 +-
 .../traversal/step/filter/DedupGlobalStep.java  |  96 +++++++++++++++
 .../graph/traversal/step/filter/DedupStep.java  |  96 ---------------
 .../traversal/step/filter/SampleGlobalStep.java | 118 +++++++++++++++++++
 .../graph/traversal/step/filter/SampleStep.java | 118 -------------------
 .../strategy/DedupOptimizerStrategy.java        |   7 +-
 6 files changed, 223 insertions(+), 224 deletions(-)
----------------------------------------------------------------------


http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
index 07aa1e2..189e300 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/GraphTraversal.java
@@ -35,7 +35,7 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.branch.UnionSte
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.AndStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.CoinStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.CyclicPathStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupGlobalStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.ExceptStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.HasStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.HasTraversalStep;
@@ -44,7 +44,7 @@ import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.LambdaFi
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.OrStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.RangeStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.RetainStep;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SampleStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SampleGlobalStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.SimplePathStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.TimeLimitStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.WhereStep;
@@ -344,11 +344,11 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     public default GraphTraversal<S, E> dedup() {
-        return this.asAdmin().addStep(new DedupStep<>(this.asAdmin()));
+        return this.asAdmin().addStep(new DedupGlobalStep<>(this.asAdmin()));
     }
 
     public default GraphTraversal<S, E> dedup(final Scope scope) {
-        return this.asAdmin().addStep(scope.equals(Scope.global) ? new DedupStep<>(this.asAdmin()) : new DedupLocalStep<>(this.asAdmin()));
+        return this.asAdmin().addStep(scope.equals(Scope.global) ? new DedupGlobalStep<>(this.asAdmin()) : new DedupLocalStep<>(this.asAdmin()));
     }
 
     public default GraphTraversal<S, E> except(final String sideEffectKeyOrPathLabel) {
@@ -468,12 +468,12 @@ public interface GraphTraversal<S, E> extends Traversal<S, E> {
     }
 
     public default GraphTraversal<S, E> sample(final int amountToSample) {
-        return this.asAdmin().addStep(new SampleStep<>(this.asAdmin(), amountToSample));
+        return this.asAdmin().addStep(new SampleGlobalStep<>(this.asAdmin(), amountToSample));
     }
 
     public default GraphTraversal<S, E> sample(final Scope scope, final int amountToSample) {
         return this.asAdmin().addStep(scope.equals(Scope.global)
-                ? new SampleStep<>(this.asAdmin(), amountToSample)
+                ? new SampleGlobalStep<>(this.asAdmin(), amountToSample)
                 : new SampleLocalStep<>(this.asAdmin(), amountToSample));
     }
 

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
new file mode 100644
index 0000000..ee148b3
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupGlobalStep.java
@@ -0,0 +1,96 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
+import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+
+import java.util.Collections;
+import java.util.HashSet;
+import java.util.List;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class DedupGlobalStep<S> extends FilterStep<S> implements Reversible, Reducing<Set<Object>, S>, TraversalParent {
+
+    private Traversal.Admin<S, Object> dedupTraversal = new IdentityTraversal<>();
+    private Set<Object> duplicateSet = new HashSet<>();
+
+    public DedupGlobalStep(final Traversal.Admin traversal) {
+        super(traversal);
+    }
+
+    @Override
+    protected boolean filter(final Traverser.Admin<S> traverser) {
+        traverser.setBulk(1);
+        return this.duplicateSet.add(TraversalUtil.apply(traverser, this.dedupTraversal));
+    }
+
+
+    @Override
+    public List<Traversal<S, Object>> getLocalChildren() {
+        return Collections.singletonList(this.dedupTraversal);
+    }
+
+    @Override
+    public void addLocalChild(final Traversal.Admin dedupTraversal) {
+        this.dedupTraversal = this.integrateChild(dedupTraversal, TYPICAL_LOCAL_OPERATIONS);
+    }
+
+    @Override
+    public Reducer<Set<Object>, S> getReducer() {
+        return new Reducer<>(HashSet::new, (set, start) -> {
+            set.add(TraversalUtil.apply(start, this.dedupTraversal));
+            return set;
+        }, true);
+    }
+
+    @Override
+    public DedupGlobalStep<S> clone() throws CloneNotSupportedException {
+        final DedupGlobalStep<S> clone = (DedupGlobalStep<S>) super.clone();
+        clone.duplicateSet = new HashSet<>();
+        clone.dedupTraversal = clone.integrateChild(this.dedupTraversal.clone(), TYPICAL_LOCAL_OPERATIONS);
+        return clone;
+    }
+
+    @Override
+    public void reset() {
+        super.reset();
+        this.duplicateSet.clear();
+    }
+
+    @Override
+    public String toString() {
+        return TraversalHelper.makeStepString(this, this.dedupTraversal);
+    }
+
+    @Override
+    public Set<TraverserRequirement> getRequirements() {
+        return this.getSelfAndChildRequirements(TraverserRequirement.SIDE_EFFECTS);
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupStep.java
deleted file mode 100644
index 1b56b9a..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/DedupStep.java
+++ /dev/null
@@ -1,96 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
-
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.Traverser;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reducing;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-
-import java.util.Collections;
-import java.util.HashSet;
-import java.util.List;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class DedupStep<S> extends FilterStep<S> implements Reversible, Reducing<Set<Object>, S>, TraversalParent {
-
-    private Traversal.Admin<S, Object> dedupTraversal = new IdentityTraversal<>();
-    private Set<Object> duplicateSet = new HashSet<>();
-
-    public DedupStep(final Traversal.Admin traversal) {
-        super(traversal);
-    }
-
-    @Override
-    protected boolean filter(final Traverser.Admin<S> traverser) {
-        traverser.setBulk(1);
-        return this.duplicateSet.add(TraversalUtil.apply(traverser, this.dedupTraversal));
-    }
-
-
-    @Override
-    public List<Traversal<S, Object>> getLocalChildren() {
-        return Collections.singletonList(this.dedupTraversal);
-    }
-
-    @Override
-    public void addLocalChild(final Traversal.Admin dedupTraversal) {
-        this.dedupTraversal = this.integrateChild(dedupTraversal, TYPICAL_LOCAL_OPERATIONS);
-    }
-
-    @Override
-    public Reducer<Set<Object>, S> getReducer() {
-        return new Reducer<>(HashSet::new, (set, start) -> {
-            set.add(TraversalUtil.apply(start, this.dedupTraversal));
-            return set;
-        }, true);
-    }
-
-    @Override
-    public DedupStep<S> clone() throws CloneNotSupportedException {
-        final DedupStep<S> clone = (DedupStep<S>) super.clone();
-        clone.duplicateSet = new HashSet<>();
-        clone.dedupTraversal = clone.integrateChild(this.dedupTraversal.clone(), TYPICAL_LOCAL_OPERATIONS);
-        return clone;
-    }
-
-    @Override
-    public void reset() {
-        super.reset();
-        this.duplicateSet.clear();
-    }
-
-    @Override
-    public String toString() {
-        return TraversalHelper.makeStepString(this, this.dedupTraversal);
-    }
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return this.getSelfAndChildRequirements(TraverserRequirement.SIDE_EFFECTS);
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
new file mode 100644
index 0000000..a56a457
--- /dev/null
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleGlobalStep.java
@@ -0,0 +1,118 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
+
+import org.apache.tinkerpop.gremlin.process.Traversal;
+import org.apache.tinkerpop.gremlin.process.Traverser;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.CollectingBarrierStep;
+import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
+import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
+import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
+import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
+import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
+
+import java.util.Collections;
+import java.util.List;
+import java.util.Random;
+import java.util.Set;
+
+/**
+ * @author Marko A. Rodriguez (http://markorodriguez.com)
+ */
+public final class SampleGlobalStep<S> extends CollectingBarrierStep<S> implements Reversible, TraversalParent {
+
+    private Traversal.Admin<S, Number> probabilityTraversal = new ConstantTraversal<>(1.0d);
+    private final int amountToSample;
+    private static final Random RANDOM = new Random();
+
+    public SampleGlobalStep(final Traversal.Admin traversal, final int amountToSample) {
+        super(traversal);
+        this.amountToSample = amountToSample;
+    }
+
+    @Override
+    public List<Traversal.Admin<S, Number>> getLocalChildren() {
+        return Collections.singletonList(this.probabilityTraversal);
+    }
+
+    @Override
+    public void addLocalChild(final Traversal.Admin<?, ?> probabilityTraversal) {
+        this.probabilityTraversal = this.integrateChild(probabilityTraversal, TYPICAL_LOCAL_OPERATIONS);
+    }
+
+    @Override
+    public String toString() {
+        return TraversalHelper.makeStepString(this, this.amountToSample, this.probabilityTraversal);
+    }
+
+    @Override
+    public void barrierConsumer(final TraverserSet<S> traverserSet) {
+        // return the entire traverser set if the set is smaller than the amount to sample
+        if (traverserSet.bulkSize() <= this.amountToSample)
+            return;
+        //////////////// else sample the set
+        double totalWeight = 0.0d;
+        for (final Traverser<S> s : traverserSet) {
+            totalWeight = totalWeight + TraversalUtil.apply(s.asAdmin(), this.probabilityTraversal).doubleValue() * s.bulk();
+        }
+        ///////
+        final TraverserSet<S> sampledSet = new TraverserSet<>();
+        int runningAmountToSample = 0;
+        while (runningAmountToSample < this.amountToSample) {
+            boolean reSample = false;
+            double runningWeight = 0.0d;
+            for (final Traverser.Admin<S> s : traverserSet) {
+                long sampleBulk = sampledSet.contains(s) ? sampledSet.get(s).bulk() : 0;
+                if (sampleBulk < s.bulk()) {
+                    final double currentWeight = TraversalUtil.apply(s, this.probabilityTraversal).doubleValue();
+                    for (int i = 0; i < (s.bulk() - sampleBulk); i++) {
+                        runningWeight = runningWeight + currentWeight;
+                        if (RANDOM.nextDouble() <= (runningWeight / totalWeight)) {
+                            final Traverser.Admin<S> split = s.asAdmin().split();
+                            split.asAdmin().setBulk(1l);
+                            sampledSet.add(split);
+                            runningAmountToSample++;
+                            totalWeight = totalWeight - currentWeight;
+                            reSample = true;
+                            break;
+                        }
+                    }
+                    if (reSample || (runningAmountToSample >= this.amountToSample))
+                        break;
+                }
+            }
+        }
+        traverserSet.clear();
+        traverserSet.addAll(sampledSet);
+    }
+
+    @Override
+    public Set<TraverserRequirement> getRequirements() {
+        return this.getSelfAndChildRequirements(TraverserRequirement.BULK);
+    }
+
+    @Override
+    public SampleGlobalStep<S> clone() throws CloneNotSupportedException {
+        final SampleGlobalStep<S> clone = (SampleGlobalStep<S>) super.clone();
+        clone.probabilityTraversal = clone.integrateChild(this.probabilityTraversal.clone(), TYPICAL_LOCAL_OPERATIONS);
+        return clone;
+    }
+}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleStep.java
deleted file mode 100644
index 97d1d22..0000000
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/step/filter/SampleStep.java
+++ /dev/null
@@ -1,118 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one
- * or more contributor license agreements.  See the NOTICE file
- * distributed with this work for additional information
- * regarding copyright ownership.  The ASF licenses this file
- * to you under the Apache License, Version 2.0 (the
- * "License"); you may not use this file except in compliance
- * with the License.  You may obtain a copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing,
- * software distributed under the License is distributed on an
- * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
- * KIND, either express or implied.  See the License for the
- * specific language governing permissions and limitations
- * under the License.
- */
-package org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter;
-
-import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.Traverser;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.util.CollectingBarrierStep;
-import org.apache.tinkerpop.gremlin.process.traversal.lambda.ConstantTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Reversible;
-import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
-import org.apache.tinkerpop.gremlin.process.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.util.TraverserSet;
-
-import java.util.Collections;
-import java.util.List;
-import java.util.Random;
-import java.util.Set;
-
-/**
- * @author Marko A. Rodriguez (http://markorodriguez.com)
- */
-public final class SampleStep<S> extends CollectingBarrierStep<S> implements Reversible, TraversalParent {
-
-    private Traversal.Admin<S, Number> probabilityTraversal = new ConstantTraversal<>(1.0d);
-    private final int amountToSample;
-    private static final Random RANDOM = new Random();
-
-    public SampleStep(final Traversal.Admin traversal, final int amountToSample) {
-        super(traversal);
-        this.amountToSample = amountToSample;
-    }
-
-    @Override
-    public List<Traversal.Admin<S, Number>> getLocalChildren() {
-        return Collections.singletonList(this.probabilityTraversal);
-    }
-
-    @Override
-    public void addLocalChild(final Traversal.Admin<?, ?> probabilityTraversal) {
-        this.probabilityTraversal = this.integrateChild(probabilityTraversal, TYPICAL_LOCAL_OPERATIONS);
-    }
-
-    @Override
-    public String toString() {
-        return TraversalHelper.makeStepString(this, this.amountToSample, this.probabilityTraversal);
-    }
-
-    @Override
-    public void barrierConsumer(final TraverserSet<S> traverserSet) {
-        // return the entire traverser set if the set is smaller than the amount to sample
-        if (traverserSet.bulkSize() <= this.amountToSample)
-            return;
-        //////////////// else sample the set
-        double totalWeight = 0.0d;
-        for (final Traverser<S> s : traverserSet) {
-            totalWeight = totalWeight + TraversalUtil.apply(s.asAdmin(), this.probabilityTraversal).doubleValue() * s.bulk();
-        }
-        ///////
-        final TraverserSet<S> sampledSet = new TraverserSet<>();
-        int runningAmountToSample = 0;
-        while (runningAmountToSample < this.amountToSample) {
-            boolean reSample = false;
-            double runningWeight = 0.0d;
-            for (final Traverser.Admin<S> s : traverserSet) {
-                long sampleBulk = sampledSet.contains(s) ? sampledSet.get(s).bulk() : 0;
-                if (sampleBulk < s.bulk()) {
-                    final double currentWeight = TraversalUtil.apply(s, this.probabilityTraversal).doubleValue();
-                    for (int i = 0; i < (s.bulk() - sampleBulk); i++) {
-                        runningWeight = runningWeight + currentWeight;
-                        if (RANDOM.nextDouble() <= (runningWeight / totalWeight)) {
-                            final Traverser.Admin<S> split = s.asAdmin().split();
-                            split.asAdmin().setBulk(1l);
-                            sampledSet.add(split);
-                            runningAmountToSample++;
-                            totalWeight = totalWeight - currentWeight;
-                            reSample = true;
-                            break;
-                        }
-                    }
-                    if (reSample || (runningAmountToSample >= this.amountToSample))
-                        break;
-                }
-            }
-        }
-        traverserSet.clear();
-        traverserSet.addAll(sampledSet);
-    }
-
-    @Override
-    public Set<TraverserRequirement> getRequirements() {
-        return this.getSelfAndChildRequirements(TraverserRequirement.BULK);
-    }
-
-    @Override
-    public SampleStep<S> clone() throws CloneNotSupportedException {
-        final SampleStep<S> clone = (SampleStep<S>) super.clone();
-        clone.probabilityTraversal = clone.integrateChild(this.probabilityTraversal.clone(), TYPICAL_LOCAL_OPERATIONS);
-        return clone;
-    }
-}

http://git-wip-us.apache.org/repos/asf/incubator-tinkerpop/blob/874f474c/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java
index 903f4cd..22935da 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/graph/traversal/strategy/DedupOptimizerStrategy.java
@@ -20,8 +20,7 @@ package org.apache.tinkerpop.gremlin.process.graph.traversal.strategy;
 
 import org.apache.tinkerpop.gremlin.process.Step;
 import org.apache.tinkerpop.gremlin.process.Traversal;
-import org.apache.tinkerpop.gremlin.process.TraversalEngine;
-import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupStep;
+import org.apache.tinkerpop.gremlin.process.graph.traversal.step.filter.DedupGlobalStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.map.OrderGlobalStep;
 import org.apache.tinkerpop.gremlin.process.graph.traversal.step.sideEffect.IdentityStep;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
@@ -44,7 +43,7 @@ public final class DedupOptimizerStrategy extends AbstractTraversalStrategy {
 
     @Override
     public void apply(final Traversal.Admin<?, ?> traversal) {
-        if (!TraversalHelper.hasStepOfClass(DedupStep.class, traversal))
+        if (!TraversalHelper.hasStepOfClass(DedupGlobalStep.class, traversal))
             return;
 
         boolean done = false;
@@ -52,7 +51,7 @@ public final class DedupOptimizerStrategy extends AbstractTraversalStrategy {
             done = true;
             for (int i = 0; i < traversal.getSteps().size(); i++) {
                 final Step step1 = traversal.getSteps().get(i);
-                if (step1 instanceof DedupStep && !(((DedupStep) step1).getLocalChildren().get(0) instanceof IdentityTraversal)) {
+                if (step1 instanceof DedupGlobalStep && !(((DedupGlobalStep) step1).getLocalChildren().get(0) instanceof IdentityTraversal)) {
                     for (int j = i; j >= 0; j--) {
                         final Step step2 = traversal.getSteps().get(j);
                         if (BIJECTIVE_PIPES.stream().filter(c -> c.isAssignableFrom(step2.getClass())).findAny().isPresent()) {