You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@tinkerpop.apache.org by sp...@apache.org on 2020/05/07 14:54:21 UTC

[tinkerpop] 05/14: Made sure that the barrier step and the reducing operator are reevaluated when the value traversal is being replaced.

This is an automated email from the ASF dual-hosted git repository.

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

commit 379544359d5536d94851ce9bb08ce8465d7fcfe3
Author: Daniel Kuppitz <da...@hotmail.com>
AuthorDate: Fri Jun 23 23:43:13 2017 +0200

    Made sure that the barrier step and the reducing operator are reevaluated when the value traversal is being replaced.
---
 .../gremlin/process/traversal/step/map/GroupStep.java  | 12 ++++++++----
 .../traversal/step/sideEffect/GroupSideEffectStep.java | 18 +++++++++++-------
 2 files changed, 19 insertions(+), 11 deletions(-)

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 66c9653..d538195 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
@@ -103,15 +103,19 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
         resetBarrierForProfiling = barrierStep != null;
     }
 
+    private void setValueTraversal(final Traversal.Admin<?, ?> kvTraversal) {
+        this.valueTraversal = this.integrateChild(convertValueTraversal(kvTraversal));
+        this.barrierStep = determineBarrierStep(this.valueTraversal);
+        this.setReducingBiOperator(new GroupBiOperator<>(null == this.barrierStep ? Operator.assign : this.barrierStep.getMemoryComputeKey().getReducer()));
+    }
+
     @Override
     public void modulateBy(final Traversal.Admin<?, ?> kvTraversal) {
         if ('k' == this.state) {
             this.keyTraversal = this.integrateChild(kvTraversal);
             this.state = 'v';
         } else if ('v' == this.state) {
-            this.valueTraversal = this.integrateChild(convertValueTraversal(kvTraversal));
-            this.barrierStep = determineBarrierStep(this.valueTraversal);
-            this.setReducingBiOperator(new GroupBiOperator<>(null == this.barrierStep ? Operator.assign : this.barrierStep.getMemoryComputeKey().getReducer()));
+            this.setValueTraversal(kvTraversal);
             this.state = 'x';
         } else {
             throw new IllegalStateException("The key and value traversals for group()-step have already been set: " + this);
@@ -123,7 +127,7 @@ public final class GroupStep<S, K, V> extends ReducingBarrierStep<S, Map<K, V>>
         if (null != this.keyTraversal && this.keyTraversal.equals(oldTraversal))
             this.keyTraversal = this.integrateChild(newTraversal);
         else if (null != this.valueTraversal && this.valueTraversal.equals(oldTraversal))
-            this.valueTraversal = this.integrateChild(newTraversal);
+            this.setValueTraversal(newTraversal);
     }
 
     @Override
diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
index 7eb6659..f278349 100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/GroupSideEffectStep.java
@@ -74,18 +74,22 @@ public final class GroupSideEffectStep<S, K, V> extends SideEffectStep<S> implem
         resetBarrierForProfiling = barrierStep != null;
     }
 
+    private void setValueTraversal(final Traversal.Admin<?, ?> valueTraversal) {
+        this.valueTraversal = this.integrateChild(GroupStep.convertValueTraversal(kvTraversal));
+        this.barrierStep = GroupStep.determineBarrierStep(this.valueTraversal);
+        this.getTraversal().getSideEffects().register(this.sideEffectKey, null,
+                new GroupStep.GroupBiOperator<>(null == this.barrierStep ?
+                        Operator.assign :
+                        this.barrierStep.getMemoryComputeKey().getReducer()));
+    }
+
     @Override
     public void modulateBy(final Traversal.Admin<?, ?> kvTraversal) {
         if ('k' == this.state) {
             this.keyTraversal = this.integrateChild(kvTraversal);
             this.state = 'v';
         } else if ('v' == this.state) {
-            this.valueTraversal = this.integrateChild(GroupStep.convertValueTraversal(kvTraversal));
-            this.barrierStep = GroupStep.determineBarrierStep(this.valueTraversal);
-            this.getTraversal().getSideEffects().register(this.sideEffectKey, null,
-                    new GroupStep.GroupBiOperator<>(null == this.barrierStep ?
-                            Operator.assign :
-                            this.barrierStep.getMemoryComputeKey().getReducer()));
+            this.setValueTraversal(kvTraversal);
             this.state = 'x';
         } else {
             throw new IllegalStateException("The key and value traversals for group()-step have already been set: " + this);
@@ -97,7 +101,7 @@ public final class GroupSideEffectStep<S, K, V> extends SideEffectStep<S> implem
         if (null != this.keyTraversal && this.keyTraversal.equals(oldTraversal))
             this.keyTraversal = this.integrateChild(newTraversal);
         else if (null != this.valueTraversal && this.valueTraversal.equals(oldTraversal))
-            this.valueTraversal = this.integrateChild(newTraversal);
+            this.setValueTraversal(newTraversal);
     }
 
     @Override