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/10/12 13:09:44 UTC
[1/3] tinkerpop git commit: added GraphComputing.atMaster(boolean) to
allow steps (if the want) to know whether they are executing locally at
master or distributed across workers. This fixes a bug in dedup() on OLAP
where non-element traversers were not
Repository: tinkerpop
Updated Branches:
refs/heads/master a8da47f14 -> 173d823a9
added GraphComputing.atMaster(boolean) to allow steps (if the want) to know whether they are executing locally at master or distributed across workers. This fixes a bug in dedup() on OLAP where non-element traversers were not being dedup'd correctly.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/0dcf6592
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/0dcf6592
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/0dcf6592
Branch: refs/heads/master
Commit: 0dcf65921b6045d734d1d6230309f2a1de4f4ee5
Parents: 193db1c
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Oct 11 08:20:31 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Oct 11 08:20:31 2016 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 2 ++
.../computer/traversal/MasterExecutor.java | 4 ++-
.../computer/traversal/WorkerExecutor.java | 4 ++-
.../process/traversal/step/GraphComputing.java | 30 ++++++++++++++++++++
.../traversal/step/filter/DedupGlobalStep.java | 12 ++++++--
.../step/filter/GroovyDedupTest.groovy | 6 +++-
.../traversal/step/filter/DedupTest.java | 30 +++++++++++++++++---
7 files changed, 79 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0dcf6592/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 746d38c..fbb6043 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,8 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Added `GraphComputing.atMaster(boolean)` to allow steps to know whether they are executing at master or distributed at workers.
+* Fixed a bug in OLAP where `DedupGlobalStep` wasn't de-duping local master traversers.
* Added `HasContainerHolder.removeHasContainer()`-method with default `UnsupportedOperationException` implementation.
* `TraversalSource.withComputer()` is simplified to add a `VertexProgramStrategy`. Easier for language variants.
* Fixed a `Set`, `List`, `Map` bug in the various `Translators` where such collections were not being internally translated.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0dcf6592/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java
index f81ca14..48e3a57 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/MasterExecutor.java
@@ -24,12 +24,12 @@ import org.apache.tinkerpop.gremlin.process.traversal.Path;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
+import org.apache.tinkerpop.gremlin.process.traversal.step.GraphComputing;
import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.ConnectiveStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.filter.HasStep;
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.filter.WherePredicateStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.IdStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.LabelStep;
import org.apache.tinkerpop.gremlin.process.traversal.step.map.PropertiesStep;
@@ -105,6 +105,7 @@ final class MasterExecutor {
else {
currentStep = traversalMatrix.getStepById(traverser.getStepId());
if (!currentStep.getId().equals(previousStep.getId()) && !(previousStep instanceof EmptyStep)) {
+ GraphComputing.atMaster(previousStep, true);
while (previousStep.hasNext()) {
final Traverser.Admin<Object> result = previousStep.next();
if (result.isHalted())
@@ -120,6 +121,7 @@ final class MasterExecutor {
}
}
if (!(currentStep instanceof EmptyStep)) {
+ GraphComputing.atMaster(currentStep, true);
while (currentStep.hasNext()) {
final Traverser.Admin<Object> traverser = currentStep.next();
if (traverser.isHalted())
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0dcf6592/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java
index 0a3aad2..2571e7b 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/WorkerExecutor.java
@@ -21,14 +21,15 @@ package org.apache.tinkerpop.gremlin.process.computer.traversal;
import org.apache.tinkerpop.gremlin.process.computer.Memory;
import org.apache.tinkerpop.gremlin.process.computer.MessageScope;
import org.apache.tinkerpop.gremlin.process.computer.Messenger;
-import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
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.Barrier;
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.LocalBarrier;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.EmptyStep;
+import org.apache.tinkerpop.gremlin.process.traversal.strategy.decoration.HaltedTraverserStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMatrix;
import org.apache.tinkerpop.gremlin.structure.Edge;
@@ -179,6 +180,7 @@ final class WorkerExecutor {
final Memory memory,
final boolean returnHaltedTraversers,
final HaltedTraverserStrategy haltedTraverserStrategy) {
+ GraphComputing.atMaster(step, false);
if (step instanceof Barrier) {
if (step instanceof Bypassing)
((Bypassing) step).setBypass(true);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0dcf6592/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 0028eb1..bd9fc42 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
@@ -18,6 +18,9 @@
*/
package org.apache.tinkerpop.gremlin.process.traversal.step;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
+import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
+
/**
* A {@code GraphComputing} step is one that will change its behavior whether its on a {@link org.apache.tinkerpop.gremlin.process.computer.GraphComputer} or not.
* {@link org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy} is responsible for calling the {@link GraphComputing#onGraphComputer()} method.
@@ -32,4 +35,31 @@ public interface GraphComputing {
*/
public void onGraphComputer();
+ /**
+ * Some steps should behave different whether they are executing at the master traversal or distributed across the worker traversals.
+ * The default implementation does nothing.
+ *
+ * @param atMaster whether the step is currently executing at master
+ */
+ public default void atMaster(boolean atMaster) {
+
+ }
+
+ public static void atMaster(final Step<?, ?> step, boolean atMaster) {
+ if (step instanceof GraphComputing)
+ ((GraphComputing) step).atMaster(atMaster);
+ if (step instanceof TraversalParent) {
+ for (final Traversal.Admin<?, ?> local : ((TraversalParent) step).getLocalChildren()) {
+ for (final Step<?, ?> s : local.getSteps()) {
+ GraphComputing.atMaster(s, atMaster);
+ }
+ }
+ for (final Traversal.Admin<?, ?> global : ((TraversalParent) step).getGlobalChildren()) {
+ for (final Step<?, ?> s : global.getSteps()) {
+ GraphComputing.atMaster(s, atMaster);
+ }
+ }
+ }
+ }
+
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0dcf6592/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 8ef6455..220805f 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
@@ -57,6 +57,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
private boolean onGraphComputer = false;
private final Set<String> dedupLabels;
private Set<String> keepLabels;
+ private boolean executingAtMaster = false;
public DedupGlobalStep(final Traversal.Admin traversal, final String... dedupLabels) {
super(traversal);
@@ -65,7 +66,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
@Override
protected boolean filter(final Traverser.Admin<S> traverser) {
- if (this.onGraphComputer) return true;
+ if (this.onGraphComputer && !this.executingAtMaster) return true;
traverser.setBulk(1);
if (null == this.dedupLabels) {
return this.duplicateSet.add(TraversalUtil.applyNullable(traverser, this.dedupTraversal));
@@ -77,6 +78,11 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
}
@Override
+ public void atMaster(final boolean atMaster) {
+ this.executingAtMaster = atMaster;
+ }
+
+ @Override
public ElementRequirement getMaxRequirement() {
return null == this.dedupLabels ? ElementRequirement.ID : PathProcessor.super.getMaxRequirement();
}
@@ -206,5 +212,7 @@ public final class DedupGlobalStep<S> extends FilterStep<S> implements Traversal
}
@Override
- public Set<String> getKeepLabels() { return this.keepLabels; }
+ public Set<String> getKeepLabels() {
+ return this.keepLabels;
+ }
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0dcf6592/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
index d03f526..a091c6f 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
@@ -19,7 +19,6 @@
package org.apache.tinkerpop.gremlin.process.traversal.step.filter
import org.apache.tinkerpop.gremlin.process.traversal.Path
-import org.apache.tinkerpop.gremlin.process.traversal.Scope
import org.apache.tinkerpop.gremlin.process.traversal.Traversal
import org.apache.tinkerpop.gremlin.process.traversal.util.ScriptTraversal
import org.apache.tinkerpop.gremlin.structure.Vertex
@@ -95,5 +94,10 @@ public abstract class GroovyDedupTest {
public Traversal<Vertex, String> get_g_V_both_both_dedup_byXoutE_countX_name() {
new ScriptTraversal<>(g, "gremlin-groovy", "g.V.both.both.dedup.by(outE().count).name")
}
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_groupCount_selectXvaluesX_unfold_dedup() {
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.groupCount.select(values).unfold.dedup")
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/0dcf6592/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
index fa55c8e..970a976 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
@@ -32,16 +32,18 @@ import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.Arrays;
+import java.util.Collection;
+import java.util.Collections;
import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both;
import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.bothE;
-import static org.hamcrest.MatcherAssert.assertThat;
-import static org.hamcrest.Matchers.containsInAnyOrder;
-import static org.hamcrest.Matchers.isIn;
+import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.select;
+import static org.apache.tinkerpop.gremlin.structure.Column.values;
import static org.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertTrue;
@@ -81,6 +83,8 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Map<String, String>> get_g_V_out_asXxX_in_asXyX_selectXx_yX_byXnameX_fold_dedupXlocal_x_yX_unfold();
+ public abstract Traversal<Vertex, Long> get_g_V_groupCount_selectXvaluesX_unfold_dedup();
+
@Test
@LoadGraphWith(MODERN)
public void g_V_out_in_valuesXnameX_fold_dedupXlocalX_unfold() {
@@ -269,6 +273,14 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
assertEquals(4, new HashSet<>(names).size());
}
+ @Test
+ @LoadGraphWith(MODERN)
+ public void g_V_groupCount_selectXvaluesX_unfold_dedup() {
+ final Traversal<Vertex, Long> traversal = get_g_V_groupCount_selectXvaluesX_unfold_dedup();
+ printTraversalForm(traversal);
+ checkResults(Collections.singletonList(1L), traversal);
+ }
+
public static class Traversals extends DedupTest {
@Override
public Traversal<Vertex, String> get_g_V_out_in_valuesXnameX_fold_dedupXlocalX_unfold() {
@@ -277,7 +289,7 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
@Override
public Traversal<Vertex, Map<String, String>> get_g_V_out_asXxX_in_asXyX_selectXx_yX_byXnameX_fold_dedupXlocal_x_yX_unfold() {
- return g.V().out().as("x").in().as("y").select("x","y").by("name").fold().dedup(Scope.local,"x","y").unfold();
+ return g.V().out().as("x").in().as("y").select("x", "y").by("name").fold().dedup(Scope.local, "x", "y").unfold();
}
@Override
@@ -334,5 +346,15 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
public Traversal<Vertex, String> get_g_V_both_both_dedup_byXoutE_countX_name() {
return g.V().both().both().dedup().by(__.outE().count()).values("name");
}
+
+ @Override
+ public Traversal<Vertex, Long> get_g_V_groupCount_selectXvaluesX_unfold_dedup() {
+ return g.V().groupCount().select(values).<Long>unfold().dedup();
+ }
+
+ /*@Override
+ public Traversal<Vertex,Collection<Vertex>> get_g_V_asXaX_repeatXbothX_timesX3X_emit_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_byXidX_foldX_selectXvaluesX_unfold_dedup() {
+ return g.V().as("a").repeat(both()).times(3).emit().as("b").group().by(select("a")).by(select("b").dedup().order().by(T.id).fold()).select(values).<Collection<Vertex>>unfold().dedup();
+ }*/
}
}
[3/3] tinkerpop git commit: Merge branch 'TINKERPOP-1495'
Posted by ok...@apache.org.
Merge branch 'TINKERPOP-1495'
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/173d823a
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/173d823a
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/173d823a
Branch: refs/heads/master
Commit: 173d823a9ccdbaf1254a36b8172c8ee0c2734478
Parents: a8da47f 85eebfa
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Wed Oct 12 07:09:35 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Wed Oct 12 07:09:35 2016 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 3 ++
.../computer/traversal/MasterExecutor.java | 4 +-
.../computer/traversal/WorkerExecutor.java | 4 +-
.../process/traversal/step/GraphComputing.java | 29 ++++++++++++
.../traversal/step/branch/RepeatStep.java | 1 +
.../traversal/step/filter/DedupGlobalStep.java | 12 ++++-
.../step/filter/GroovyDedupTest.groovy | 11 ++++-
.../traversal/step/filter/DedupTest.java | 48 ++++++++++++++++++--
8 files changed, 103 insertions(+), 9 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/173d823a/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --cc CHANGELOG.asciidoc
index 81f23c6,17cd3b7..a97a32c
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@@ -26,8 -26,9 +26,11 @@@ image::https://raw.githubusercontent.co
TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Increased performance of `CredentialGraph` authentication
+* Removed Java 8 stream usage from `TraversalHelper` for performance reasons.
+ * Fixed a bug in `RepeatStep` where `emit().as('x')` wasn't adding the step labels to the emit-traverser.
+ * Added `GraphComputing.atMaster(boolean)` to allow steps to know whether they are executing at master or distributed at workers.
+ * Fixed a bug in OLAP where `DedupGlobalStep` wasn't de-duping local master traversers.
* Added `HasContainerHolder.removeHasContainer()`-method with default `UnsupportedOperationException` implementation.
* `TraversalSource.withComputer()` is simplified to add a `VertexProgramStrategy`. Easier for language variants.
* Fixed a `Set`, `List`, `Map` bug in the various `Translators` where such collections were not being internally translated.
[2/3] tinkerpop git commit: Fixed a bug in OLAP RepeatStep where
emit().as('x') wasn't behaving correctly. Basically,
forgot to add the step labels to the emitTraverser. One line fix. Added the
complex @dkuppitz traversal DedupTest which demonstrates tha
Posted by ok...@apache.org.
Fixed a bug in OLAP RepeatStep where emit().as('x') wasn't behaving correctly. Basically, forgot to add the step labels to the emitTraverser. One line fix. Added the complex @dkuppitz traversal DedupTest which demonstrates that local dedup works correctly in OLAP.
Project: http://git-wip-us.apache.org/repos/asf/tinkerpop/repo
Commit: http://git-wip-us.apache.org/repos/asf/tinkerpop/commit/85eebfab
Tree: http://git-wip-us.apache.org/repos/asf/tinkerpop/tree/85eebfab
Diff: http://git-wip-us.apache.org/repos/asf/tinkerpop/diff/85eebfab
Branch: refs/heads/master
Commit: 85eebfab89d9c130f9515e1e8953589a22f8e449
Parents: 0dcf659
Author: Marko A. Rodriguez <ok...@gmail.com>
Authored: Tue Oct 11 09:06:28 2016 -0600
Committer: Marko A. Rodriguez <ok...@gmail.com>
Committed: Tue Oct 11 09:06:28 2016 -0600
----------------------------------------------------------------------
CHANGELOG.asciidoc | 1 +
.../process/traversal/step/GraphComputing.java | 1 -
.../traversal/step/branch/RepeatStep.java | 1 +
.../step/filter/GroovyDedupTest.groovy | 5 ++++
.../traversal/step/filter/DedupTest.java | 24 +++++++++++++++++---
5 files changed, 28 insertions(+), 4 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/85eebfab/CHANGELOG.asciidoc
----------------------------------------------------------------------
diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index fbb6043..17cd3b7 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -26,6 +26,7 @@ image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
TinkerPop 3.2.3 (Release Date: NOT OFFICIALLY RELEASED YET)
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
+* Fixed a bug in `RepeatStep` where `emit().as('x')` wasn't adding the step labels to the emit-traverser.
* Added `GraphComputing.atMaster(boolean)` to allow steps to know whether they are executing at master or distributed at workers.
* Fixed a bug in OLAP where `DedupGlobalStep` wasn't de-duping local master traversers.
* Added `HasContainerHolder.removeHasContainer()`-method with default `UnsupportedOperationException` implementation.
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/85eebfab/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 bd9fc42..cec5708 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
@@ -61,5 +61,4 @@ public interface GraphComputing {
}
}
}
-
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/85eebfab/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
----------------------------------------------------------------------
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
index b365d7f..ebdb657 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/branch/RepeatStep.java
@@ -291,6 +291,7 @@ public final class RepeatStep<S> extends ComputerAwareStep<S, S> implements Trav
final Traverser.Admin<S> emitSplit = start.split();
emitSplit.resetLoops();
emitSplit.setStepId(repeatStep.getNextStep().getId());
+ emitSplit.addLabels(repeatStep.labels);
return IteratorUtils.of(start, emitSplit);
}
return IteratorUtils.of(start);
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/85eebfab/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
----------------------------------------------------------------------
diff --git a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
index a091c6f..83428c2 100644
--- a/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
+++ b/gremlin-groovy-test/src/main/groovy/org/apache/tinkerpop/gremlin/process/traversal/step/filter/GroovyDedupTest.groovy
@@ -99,5 +99,10 @@ public abstract class GroovyDedupTest {
public Traversal<Vertex, Long> get_g_V_groupCount_selectXvaluesX_unfold_dedup() {
new ScriptTraversal<>(g, "gremlin-groovy", "g.V.groupCount.select(values).unfold.dedup")
}
+
+ @Override
+ public Traversal<Vertex, Collection<Vertex>> get_g_V_asXaX_repeatXbothX_timesX3X_emit_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_byXidX_foldX_selectXvaluesX_unfold_dedup() {
+ new ScriptTraversal<>(g, "gremlin-groovy", "g.V.as('a').repeat(both()).times(3).emit.as('b').group.by(select('a')).by(select('b').dedup.order.by(id).fold).select(values).unfold.dedup")
+ }
}
}
http://git-wip-us.apache.org/repos/asf/tinkerpop/blob/85eebfab/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
----------------------------------------------------------------------
diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
index 970a976..19e685a 100644
--- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
+++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/filter/DedupTest.java
@@ -85,6 +85,8 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
public abstract Traversal<Vertex, Long> get_g_V_groupCount_selectXvaluesX_unfold_dedup();
+ public abstract Traversal<Vertex, Collection<Vertex>> get_g_V_asXaX_repeatXbothX_timesX3X_emit_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_byXidX_foldX_selectXvaluesX_unfold_dedup();
+
@Test
@LoadGraphWith(MODERN)
public void g_V_out_in_valuesXnameX_fold_dedupXlocalX_unfold() {
@@ -281,6 +283,22 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
checkResults(Collections.singletonList(1L), traversal);
}
+ @Test
+ @LoadGraphWith
+ public void g_V_asXaX_repeatXbothX_timesX3X_emit_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_byXidX_foldX_selectXvaluesX_unfold_dedup() {
+ final Traversal<Vertex, Collection<Vertex>> traversal = get_g_V_asXaX_repeatXbothX_timesX3X_emit_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_byXidX_foldX_selectXvaluesX_unfold_dedup();
+ printTraversalForm(traversal);
+ final Collection<Vertex> vertices = traversal.next();
+ assertFalse(traversal.hasNext());
+ assertEquals(6, vertices.size());
+ assertTrue(vertices.contains(convertToVertex(graph, "marko")));
+ assertTrue(vertices.contains(convertToVertex(graph, "vadas")));
+ assertTrue(vertices.contains(convertToVertex(graph, "josh")));
+ assertTrue(vertices.contains(convertToVertex(graph, "peter")));
+ assertTrue(vertices.contains(convertToVertex(graph, "lop")));
+ assertTrue(vertices.contains(convertToVertex(graph, "ripple")));
+ }
+
public static class Traversals extends DedupTest {
@Override
public Traversal<Vertex, String> get_g_V_out_in_valuesXnameX_fold_dedupXlocalX_unfold() {
@@ -352,9 +370,9 @@ public abstract class DedupTest extends AbstractGremlinProcessTest {
return g.V().groupCount().select(values).<Long>unfold().dedup();
}
- /*@Override
- public Traversal<Vertex,Collection<Vertex>> get_g_V_asXaX_repeatXbothX_timesX3X_emit_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_byXidX_foldX_selectXvaluesX_unfold_dedup() {
+ @Override
+ public Traversal<Vertex, Collection<Vertex>> get_g_V_asXaX_repeatXbothX_timesX3X_emit_asXbX_group_byXselectXaXX_byXselectXbX_dedup_order_byXidX_foldX_selectXvaluesX_unfold_dedup() {
return g.V().as("a").repeat(both()).times(3).emit().as("b").group().by(select("a")).by(select("b").dedup().order().by(T.id).fold()).select(values).<Collection<Vertex>>unfold().dedup();
- }*/
+ }
}
}