[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps

2018-11-16 Thread dkuppitz
This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2095
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit c62a152645de420e2e3b8f3129b5f451c84612df
Author: Daniel Kuppitz 
AuthorDate: Fri Nov 16 10:32:02 2018 -0700

TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
---
 CHANGELOG.asciidoc |  1 +
 .../process/traversal/step/map/GroupStep.java  | 33 +-
 .../step/sideEffect/GroupSideEffectStep.java   |  6 ++--
 .../process/traversal/util/TraversalHelper.java|  5 
 .../test/cucumber/feature-steps.js |  2 +-
 gremlin-test/features/sideEffect/Group.feature | 23 +++
 .../traversal/step/sideEffect/GroupTest.java   | 21 ++
 7 files changed, 80 insertions(+), 11 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 99313e0..5781bcc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <>.
 
+* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
 * Added `:bytecode` command to help developers debugging `Bytecode`-based 
traversals.
 * Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action 
calls.
 * Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 127d562..b8c2f13 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -28,12 +29,12 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
@@ -59,11 +60,28 @@ public final class GroupStep extends 
ReducingBarrierStep>
 public GroupStep(final Traversal.Admin traversal) {
 super(traversal);
 this.valueTraversal = this.integrateChild(__.fold().asAdmin());
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = determineBarrierStep(this.valueTraversal);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.setSeedSupplier(HashMapSupplier.instance());
 }
 
+/**
+ * Determines the first (non-local) barrier step in the provided 
traversal. This method is used by {@link GroupStep}
+ * and {@link 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupSideEffectStep}
 to ultimately
+ * determine the reducing reducing bi-operator.
+ *
+ * @param traversal The traversal to inspect.
+ * @return The first non-local barrier step or {@code null} if no such 
step was found.
+ */
+public static  Barrier determineBarrierStep(final Traversal.Admin traversal) {
+for (final Step step : traversal.getSteps()) {
+if (step instanceof Barrier && !(step instanceof LocalBarrier)) {
+return (Barrier) step;
+}
+}
+return null;
+}
+
 @Override
 public 

[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps

2018-11-16 Thread dkuppitz
This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2095
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 4d1fbb4ce418237deb704271f543152f32d6f9c2
Author: Daniel Kuppitz 
AuthorDate: Fri Nov 16 10:32:02 2018 -0700

TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
---
 CHANGELOG.asciidoc |  1 +
 .../process/traversal/step/map/GroupStep.java  | 33 +-
 .../step/sideEffect/GroupSideEffectStep.java   |  6 ++--
 .../process/traversal/util/TraversalHelper.java|  5 
 .../test/cucumber/feature-steps.js |  4 ++-
 gremlin-test/features/sideEffect/Group.feature | 23 +++
 .../traversal/step/sideEffect/GroupTest.java   | 21 ++
 7 files changed, 82 insertions(+), 11 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 99313e0..5781bcc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <>.
 
+* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
 * Added `:bytecode` command to help developers debugging `Bytecode`-based 
traversals.
 * Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action 
calls.
 * Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 127d562..b8c2f13 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -28,12 +29,12 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
@@ -59,11 +60,28 @@ public final class GroupStep extends 
ReducingBarrierStep>
 public GroupStep(final Traversal.Admin traversal) {
 super(traversal);
 this.valueTraversal = this.integrateChild(__.fold().asAdmin());
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = determineBarrierStep(this.valueTraversal);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.setSeedSupplier(HashMapSupplier.instance());
 }
 
+/**
+ * Determines the first (non-local) barrier step in the provided 
traversal. This method is used by {@link GroupStep}
+ * and {@link 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupSideEffectStep}
 to ultimately
+ * determine the reducing reducing bi-operator.
+ *
+ * @param traversal The traversal to inspect.
+ * @return The first non-local barrier step or {@code null} if no such 
step was found.
+ */
+public static  Barrier determineBarrierStep(final Traversal.Admin traversal) {
+for (final Step step : traversal.getSteps()) {
+if (step instanceof Barrier && !(step instanceof LocalBarrier)) {
+return (Barrier) step;
+}
+}
+return null;
+}
+
 @Override
 public 

[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps

2018-11-16 Thread dkuppitz
This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2095
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 40863106f24d4bd958cc3632010e039f9224e538
Author: Daniel Kuppitz 
AuthorDate: Fri Nov 16 10:32:02 2018 -0700

TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
---
 CHANGELOG.asciidoc |  1 +
 .../process/traversal/step/map/GroupStep.java  | 33 +-
 .../step/sideEffect/GroupSideEffectStep.java   |  6 ++--
 .../process/traversal/util/TraversalHelper.java|  5 
 .../test/cucumber/feature-steps.js |  4 ++-
 gremlin-test/features/sideEffect/Group.feature | 23 +++
 .../traversal/step/sideEffect/GroupTest.java   | 21 ++
 7 files changed, 82 insertions(+), 11 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 99313e0..5781bcc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <>.
 
+* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
 * Added `:bytecode` command to help developers debugging `Bytecode`-based 
traversals.
 * Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action 
calls.
 * Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 127d562..b8c2f13 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -28,12 +29,12 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
@@ -59,11 +60,28 @@ public final class GroupStep extends 
ReducingBarrierStep>
 public GroupStep(final Traversal.Admin traversal) {
 super(traversal);
 this.valueTraversal = this.integrateChild(__.fold().asAdmin());
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = determineBarrierStep(this.valueTraversal);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.setSeedSupplier(HashMapSupplier.instance());
 }
 
+/**
+ * Determines the first (non-local) barrier step in the provided 
traversal. This method is used by {@link GroupStep}
+ * and {@link 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupSideEffectStep}
 to ultimately
+ * determine the reducing reducing bi-operator.
+ *
+ * @param traversal The traversal to inspect.
+ * @return The first non-local barrier step or {@code null} if no such 
step was found.
+ */
+public static  Barrier determineBarrierStep(final Traversal.Admin traversal) {
+for (final Step step : traversal.getSteps()) {
+if (step instanceof Barrier && !(step instanceof LocalBarrier)) {
+return (Barrier) step;
+}
+}
+return null;
+}
+
 @Override
 public 

[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps

2018-11-16 Thread dkuppitz
This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2095
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 0cfb2ff375244efb936eac7b83de6c6202560359
Author: Daniel Kuppitz 
AuthorDate: Fri Nov 16 10:32:02 2018 -0700

TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
---
 CHANGELOG.asciidoc |  1 +
 .../process/traversal/step/map/GroupStep.java  | 33 +-
 .../step/sideEffect/GroupSideEffectStep.java   |  6 ++--
 .../process/traversal/util/TraversalHelper.java|  5 
 .../test/cucumber/feature-steps.js |  4 ++-
 gremlin-test/features/sideEffect/Group.feature | 23 +++
 .../traversal/step/sideEffect/GroupTest.java   | 21 ++
 7 files changed, 82 insertions(+), 11 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 99313e0..5781bcc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <>.
 
+* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
 * Added `:bytecode` command to help developers debugging `Bytecode`-based 
traversals.
 * Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action 
calls.
 * Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 127d562..b8c2f13 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -28,12 +29,12 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
@@ -59,11 +60,28 @@ public final class GroupStep extends 
ReducingBarrierStep>
 public GroupStep(final Traversal.Admin traversal) {
 super(traversal);
 this.valueTraversal = this.integrateChild(__.fold().asAdmin());
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = determineBarrierStep(this.valueTraversal);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.setSeedSupplier(HashMapSupplier.instance());
 }
 
+/**
+ * Determines the first (non-local) barrier step in the provided 
traversal. This method is used by {@link GroupStep}
+ * and {@link 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupSideEffectStep}
 to ultimately
+ * determine the reducing reducing bi-operator.
+ *
+ * @param traversal The traversal to inspect.
+ * @return The first non-local barrier step or {@code null} if no such 
step was found.
+ */
+public static  Barrier determineBarrierStep(final Traversal.Admin traversal) {
+for (final Step step : traversal.getSteps()) {
+if (step instanceof Barrier && !(step instanceof LocalBarrier)) {
+return (Barrier) step;
+}
+}
+return null;
+}
+
 @Override
 public 

[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps

2018-11-16 Thread dkuppitz
This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2095
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 59a094bf76c7c37929e5d14c5b844f2c7c0428fc
Author: Daniel Kuppitz 
AuthorDate: Fri Nov 16 10:32:02 2018 -0700

TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
---
 CHANGELOG.asciidoc |  1 +
 .../process/traversal/step/map/GroupStep.java  | 33 +-
 .../step/sideEffect/GroupSideEffectStep.java   |  6 ++--
 .../process/traversal/util/TraversalHelper.java|  5 
 gremlin-test/features/sideEffect/Group.feature | 23 +++
 .../traversal/step/sideEffect/GroupTest.java   | 21 ++
 6 files changed, 79 insertions(+), 10 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 99313e0..5781bcc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <>.
 
+* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
 * Added `:bytecode` command to help developers debugging `Bytecode`-based 
traversals.
 * Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action 
calls.
 * Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 127d562..b8c2f13 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -28,12 +29,12 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
@@ -59,11 +60,28 @@ public final class GroupStep extends 
ReducingBarrierStep>
 public GroupStep(final Traversal.Admin traversal) {
 super(traversal);
 this.valueTraversal = this.integrateChild(__.fold().asAdmin());
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = determineBarrierStep(this.valueTraversal);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.setSeedSupplier(HashMapSupplier.instance());
 }
 
+/**
+ * Determines the first (non-local) barrier step in the provided 
traversal. This method is used by {@link GroupStep}
+ * and {@link 
org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect.GroupSideEffectStep}
 to ultimately
+ * determine the reducing reducing bi-operator.
+ *
+ * @param traversal The traversal to inspect.
+ * @return The first non-local barrier step or {@code null} if no such 
step was found.
+ */
+public static  Barrier determineBarrierStep(final Traversal.Admin traversal) {
+for (final Step step : traversal.getSteps()) {
+if (step instanceof Barrier && !(step instanceof LocalBarrier)) {
+return (Barrier) step;
+}
+}
+return null;
+}
+
 @Override
 public void modulateBy(final Traversal.Admin kvTraversal) {
 

[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps

2018-11-16 Thread dkuppitz
This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2095
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit c3b65be205964c41acc7d016b2557e6efa188837
Author: Daniel Kuppitz 
AuthorDate: Fri Nov 16 10:32:02 2018 -0700

TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
---
 CHANGELOG.asciidoc |  1 +
 .../process/traversal/step/map/GroupStep.java  | 26 --
 .../process/traversal/util/TraversalHelper.java|  5 +
 gremlin-test/features/sideEffect/Group.feature | 11 +
 .../traversal/step/sideEffect/GroupTest.java   | 21 +
 5 files changed, 57 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 99313e0..5781bcc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <>.
 
+* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
 * Added `:bytecode` command to help developers debugging `Bytecode`-based 
traversals.
 * Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action 
calls.
 * Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 127d562..52b155e 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -28,12 +29,12 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
@@ -43,6 +44,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.function.BinaryOperator;
 
@@ -59,11 +61,20 @@ public final class GroupStep extends 
ReducingBarrierStep>
 public GroupStep(final Traversal.Admin traversal) {
 super(traversal);
 this.valueTraversal = this.integrateChild(__.fold().asAdmin());
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = determineBarrierStep(this.valueTraversal);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.setSeedSupplier(HashMapSupplier.instance());
 }
 
+private static  Barrier determineBarrierStep(final 
Traversal.Admin traversal) {
+for (final Step step : traversal.getSteps()) {
+if (step instanceof Barrier && !(step instanceof LocalBarrier)) {
+return (Barrier) step;
+}
+}
+return null;
+}
+
 @Override
 public void modulateBy(final Traversal.Admin kvTraversal) {
 if ('k' == this.state) {
@@ -71,7 +82,7 @@ public final class GroupStep extends 
ReducingBarrierStep>
 this.state = 'v';
 } else if ('v' == this.state) {
 this.valueTraversal = 
this.integrateChild(convertValueTraversal(kvTraversal));
-this.barrierStep = 

[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps

2018-11-16 Thread dkuppitz
This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2095
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 0f6dda4af5721897dc52f425ad0faf8696a4121d
Author: Daniel Kuppitz 
AuthorDate: Fri Nov 16 10:32:02 2018 -0700

TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
---
 CHANGELOG.asciidoc |  1 +
 .../process/traversal/step/map/GroupStep.java  | 26 --
 gremlin-test/features/sideEffect/Group.feature | 11 +
 .../traversal/step/sideEffect/GroupTest.java   | 21 +
 4 files changed, 52 insertions(+), 7 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 99313e0..5781bcc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <>.
 
+* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
 * Added `:bytecode` command to help developers debugging `Bytecode`-based 
traversals.
 * Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action 
calls.
 * Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 127d562..52b155e 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -20,6 +20,7 @@
 package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 
 import org.apache.tinkerpop.gremlin.process.traversal.Operator;
+import org.apache.tinkerpop.gremlin.process.traversal.Step;
 import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
@@ -28,12 +29,12 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
+import org.apache.tinkerpop.gremlin.process.traversal.step.LocalBarrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
+import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
 import 
org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
-import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
 import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 import org.apache.tinkerpop.gremlin.util.function.HashMapSupplier;
@@ -43,6 +44,7 @@ import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
 import java.util.Map;
+import java.util.Optional;
 import java.util.Set;
 import java.util.function.BinaryOperator;
 
@@ -59,11 +61,20 @@ public final class GroupStep extends 
ReducingBarrierStep>
 public GroupStep(final Traversal.Admin traversal) {
 super(traversal);
 this.valueTraversal = this.integrateChild(__.fold().asAdmin());
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = determineBarrierStep(this.valueTraversal);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.setSeedSupplier(HashMapSupplier.instance());
 }
 
+private static  Barrier determineBarrierStep(final 
Traversal.Admin traversal) {
+for (final Step step : traversal.getSteps()) {
+if (step instanceof Barrier && !(step instanceof LocalBarrier)) {
+return (Barrier) step;
+}
+}
+return null;
+}
+
 @Override
 public void modulateBy(final Traversal.Admin kvTraversal) {
 if ('k' == this.state) {
@@ -71,7 +82,7 @@ public final class GroupStep extends 
ReducingBarrierStep>
 this.state = 'v';
 } else if ('v' == this.state) {
 this.valueTraversal = 
this.integrateChild(convertValueTraversal(kvTraversal));
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 

[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps

2018-11-16 Thread dkuppitz
This is an automated email from the ASF dual-hosted git repository.

dkuppitz pushed a commit to branch TINKERPOP-2095
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git

commit 71e19741a3b2ae8a66be688f14936b7c25c58b42
Author: Daniel Kuppitz 
AuthorDate: Fri Nov 16 10:32:02 2018 -0700

TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
---
 CHANGELOG.asciidoc  |  1 +
 .../process/traversal/step/map/GroupStep.java   | 11 +--
 gremlin-test/features/sideEffect/Group.feature  | 11 +++
 .../traversal/step/sideEffect/GroupTest.java| 21 +
 4 files changed, 38 insertions(+), 6 deletions(-)

diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc
index 99313e0..5781bcc 100644
--- a/CHANGELOG.asciidoc
+++ b/CHANGELOG.asciidoc
@@ -25,6 +25,7 @@ 
image::https://raw.githubusercontent.com/apache/tinkerpop/master/docs/static/ima
 
 This release also includes changes from <>.
 
+* Fixed a bug in `GroupStep` that assigned wrong reducing bi-operators
 * Added `:bytecode` command to help developers debugging `Bytecode`-based 
traversals.
 * Fixed `PersistedOutputRDD` to eager persist RDD by adding `count()` action 
calls.
 * Deserialized `g:Set` to a Python `Set` in GraphSON in `gremlin-python`.
diff --git 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
index 127d562..edc5e63 100644
--- 
a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
+++ 
b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/GroupStep.java
@@ -28,7 +28,6 @@ import 
org.apache.tinkerpop.gremlin.process.traversal.lambda.ElementValueTravers
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.FunctionTraverser;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.IdentityTraversal;
 import org.apache.tinkerpop.gremlin.process.traversal.lambda.TokenTraversal;
-import org.apache.tinkerpop.gremlin.process.traversal.step.Barrier;
 import org.apache.tinkerpop.gremlin.process.traversal.step.ByModulating;
 import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 import 
org.apache.tinkerpop.gremlin.process.traversal.step.util.ReducingBarrierStep;
@@ -54,12 +53,12 @@ public final class GroupStep extends 
ReducingBarrierStep>
 private char state = 'k';
 private Traversal.Admin keyTraversal;
 private Traversal.Admin valueTraversal;
-private Barrier barrierStep;
+private ReducingBarrierStep barrierStep;
 
 public GroupStep(final Traversal.Admin traversal) {
 super(traversal);
 this.valueTraversal = this.integrateChild(__.fold().asAdmin());
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(ReducingBarrierStep.class, 
this.valueTraversal).orElse(null);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.setSeedSupplier(HashMapSupplier.instance());
 }
@@ -71,7 +70,7 @@ public final class GroupStep extends 
ReducingBarrierStep>
 this.state = 'v';
 } else if ('v' == this.state) {
 this.valueTraversal = 
this.integrateChild(convertValueTraversal(kvTraversal));
-this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
this.valueTraversal).orElse(null);
+this.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(ReducingBarrierStep.class, 
this.valueTraversal).orElse(null);
 this.setReducingBiOperator(new GroupBiOperator<>(null == 
this.barrierStep ? Operator.assign : 
this.barrierStep.getMemoryComputeKey().getReducer()));
 this.state = 'x';
 } else {
@@ -117,7 +116,7 @@ public final class GroupStep extends 
ReducingBarrierStep>
 if (null != this.keyTraversal)
 clone.keyTraversal = this.keyTraversal.clone();
 clone.valueTraversal = this.valueTraversal.clone();
-clone.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
clone.valueTraversal).orElse(null);
+clone.barrierStep = 
TraversalHelper.getFirstStepOfAssignableClass(ReducingBarrierStep.class, 
clone.valueTraversal).orElse(null);
 return clone;
 }
 
@@ -185,7 +184,7 @@ public final class GroupStep extends 
ReducingBarrierStep>
 }
 
 public static  Map doFinalReduction(final Map map, 
final Traversal.Admin valueTraversal) {
-TraversalHelper.getFirstStepOfAssignableClass(Barrier.class, 
valueTraversal).ifPresent(barrierStep -> {
+
TraversalHelper.getFirstStepOfAssignableClass(ReducingBarrierStep.class,