[tinkerpop] 01/01: TINKERPOP-2095 GroupStep looks for irrelevant barrier steps
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
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
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
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
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
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
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
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,