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 2017/01/09 14:54:22 UTC
[10/17] tinkerpop git commit: added the concept of a master barrier
to DedupGlobalStep to speed up the addition of worker barriers into the
master traversal. A slight performance increase.
added the concept of a master barrier to DedupGlobalStep to speed up the addition of worker barriers into the master traversal. A slight performance increase.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/64c80657
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/64c80657
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/64c80657
Branch: refs/heads/tp32
Commit: 64c80657bf9199d5b9f28f56b65f1ce327192bd1
Parents: 253248e
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Jan 4 13:13:58 2017 -0700
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Thu Jan 5 17:00:17 2017 -0700
----------------------------------------------------------------------
.../traversal/step/filter/DedupGlobalStep.java | 21 +++++++++++++-------
1 file changed, 14 insertions(+), 7 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/64c80657/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
index dfe7958..e3d36b1 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupGlobalStep.java
@@ -34,7 +34,6 @@ import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementExce
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
import org.apache.tinkerpop.gremlin.structure.util.detached.DetachedFactory;
-import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils;
import java.util.ArrayList;
import java.util.Arrays;
@@ -59,6 +58,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
private Set<String> keepLabels;
private boolean executingAtMaster = false;
private boolean barrierAdded = false;
+ private Map<Object, Traverser.Admin<S>> masterBarrier;
public DedupGlobalStep(final Traversal.Admin traversal, final String... dedupLabels) {
super(traversal);
@@ -76,6 +76,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
this.dedupLabels.forEach(label -> objects.add(TraversalUtil.applyNullable((S) this.getScopeValue(Pop.last, label, traverser), this.dedupTraversal)));
return this.duplicateSet.add(objects);
}
+
}
@Override
@@ -90,6 +91,11 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
@Override
protected Traverser.Admin<S> processNextStart() {
+ if (null != this.masterBarrier) {
+ this.starts.add(this.masterBarrier.values().iterator());
+ this.barrierAdded = true;
+ }
+ this.masterBarrier = null;
return PathProcessor.processTraverserPathLabels(super.processNextStart(), this.keepLabels);
}
@@ -196,12 +202,13 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
@Override
public void addBarrier(final Map<Object, Traverser.Admin<S>> barrier) {
- this.barrierAdded = true;
- IteratorUtils.removeOnNext(barrier.entrySet().iterator()).forEachRemaining(entry -> {
- final Traverser.Admin<S> traverser = entry.getValue();
- traverser.setSideEffects(this.getTraversal().getSideEffects());
- this.addStart(traverser);
- });
+ if (null == this.masterBarrier)
+ this.masterBarrier = new HashMap<>(barrier);
+ else {
+ for (Map.Entry<Object, Traverser.Admin<S>> entry : barrier.entrySet()) {
+ this.masterBarrier.putIfAbsent(entry.getKey(), entry.getValue());
+ }
+ }
}
@Override