[ https://issues.apache.org/jira/browse/TINKERPOP-3080?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=17849632#comment-17849632 ]
ASF GitHub Bot commented on TINKERPOP-3080: ------------------------------------------- saikiranboga commented on code in PR #2616: URL: https://github.com/apache/tinkerpop/pull/2616#discussion_r1615528311 ########## gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateLocalStep.java: ########## @@ -52,9 +53,20 @@ public AggregateLocalStep(final Traversal.Admin traversal, final String sideEffe @Override protected void sideEffect(final Traverser.Admin<S> traverser) { + final TraversalSideEffects sideEffects = this.getTraversal().getSideEffects(); + // Pre-defined Operator such as addAll and assign will reduce over the whole input set, rather than + // applying a single input one by one. + final boolean isOperatorForBulkSet = sideEffects.getReducer(sideEffectKey) == Operator.addAll || + sideEffects.getReducer(sideEffectKey) == Operator.assign; + Review Comment: Same suggestions here as changes from AggregateGlobalStep. ########## gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/ComputerVerificationStrategy.java: ########## @@ -80,6 +78,13 @@ public void apply(final Traversal.Admin<?, ?> traversal) { if (UNSUPPORTED_STEPS.stream().filter(c -> c.isAssignableFrom(step.getClass())).findFirst().isPresent()) throw new VerificationException("The following step is currently not supported on GraphComputer: " + step, traversal); + + if (step instanceof SideEffectCapable) { + final BinaryOperator<?> sideEffectOperator = traversal.getSideEffects().getReducer(((SideEffectCapable<?, ?>) step).getSideEffectKey()); + if (sideEffectOperator instanceof Operator && (!((Operator) sideEffectOperator).isCommutative())) { + throw new VerificationException("The following step has an SideEffect operator " + sideEffectOperator + " which is currently not supported on GraphComputer: " + step, traversal); + } + } Review Comment: Curious, what was the issue here? ########## gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateGlobalStep.java: ########## @@ -122,8 +121,16 @@ protected Traverser.Admin<S> processNextStart() { @Override public void processAllStarts() { + final TraversalSideEffects sideEffects = this.getTraversal().getSideEffects(); + + // Pre-defined Operator such as addAll and assign will reduce over the whole input set, rather than + // applying a single input one by one. Review Comment: Suggest to also add to comment here on how both these operators work to be clear on why we focus on reduction over the whole input set. Basically, `addAll` can only work when either inputs to it are Maps or instances of Collection interface. And `assign` works for any type of input. > AggregateStep can support all Operators predefined in TinkerPop > --------------------------------------------------------------- > > Key: TINKERPOP-3080 > URL: https://issues.apache.org/jira/browse/TINKERPOP-3080 > Project: TinkerPop > Issue Type: Improvement > Components: language, process > Reporter: Norio Akagi > Priority: Major > Fix For: 3.7.3 > > > Currently, {{AggreteGlobalStep}} and {{AggreteLocalStep}} only support addAll > and assign as Operator. This is because they use BulkSet to apply to > Operator. Only addAll and assign can work with BulkSet, so for other > operators it results in a type casting failure. > They can be more flexible to work with any operators depending on what is set > by {{{}withSideEffect(){}}}. -- This message was sent by Atlassian Jira (v8.20.10#820010)