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/09/08 12:58:53 UTC

[tinkerpop] branch master updated (6d33090 -> eb0813e)

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

spmallette pushed a change to branch master
in repository https://gitbox.apache.org/repos/asf/tinkerpop.git.


    from 6d33090  Merge branch '3.4-dev'
     add 2cea7b2  [TINKERPOP-2396] add TraverserSet supplier option for AbstractStep and ExpandableStepIterator
     add d8106f7  TINKERPOP-2396 Added Traversal.getTraverserSetSupplier()
     new eb0813e  Merge branch '3.4-dev'

The 1 revisions listed above as "new" are entirely new to this
repository and will be described in separate emails.  The revisions
listed as "add" were already present in the repository and have only
been added to this reference.


Summary of changes:
 CHANGELOG.asciidoc                                 |  3 +-
 docs/src/upgrade/release-3.4.x.asciidoc            | 15 +++++-
 .../gremlin/process/traversal/Traversal.java       | 11 +++++
 .../traversal/step/filter/RangeGlobalStep.java     |  2 +-
 .../traversal/step/filter/SampleGlobalStep.java    |  2 +-
 .../traversal/step/filter/TailGlobalStep.java      |  2 +-
 .../process/traversal/step/map/MatchStep.java      |  7 +--
 .../traversal/step/map/NoOpBarrierStep.java        |  7 +--
 .../step/sideEffect/AggregateGlobalStep.java       |  7 +--
 .../process/traversal/step/util/AbstractStep.java  | 12 +++--
 .../traversal/step/util/CollectingBarrierStep.java |  7 +--
 .../step/util/ExpandableStepIterator.java          |  7 ++-
 .../process/traversal/util/DefaultTraversal.java   |  4 +-
 ...kSetSupplier.java => TraverserSetSupplier.java} | 17 +++----
 .../traversal/step/map/AddVertexStepTest.java      |  4 ++
 .../util/function/TraverserSetSupplierTest.java    | 55 ++++++++++++++++++++++
 16 files changed, 130 insertions(+), 32 deletions(-)
 copy gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/util/function/{BulkSetSupplier.java => TraverserSetSupplier.java} (68%)
 create mode 100644 gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/util/function/TraverserSetSupplierTest.java


[tinkerpop] 01/01: Merge branch '3.4-dev'

Posted by sp...@apache.org.
This is an automated email from the ASF dual-hosted git repository.

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

commit eb0813e007e5c3218742e19f955cb3db8026c29b
Merge: 6d33090 d8106f7
Author: Stephen Mallette <st...@amazon.com>
AuthorDate: Tue Sep 8 08:58:36 2020 -0400

    Merge branch '3.4-dev'

 CHANGELOG.asciidoc                                 |  3 +-
 docs/src/upgrade/release-3.4.x.asciidoc            | 15 +++++-
 .../gremlin/process/traversal/Traversal.java       | 11 +++++
 .../traversal/step/filter/RangeGlobalStep.java     |  2 +-
 .../traversal/step/filter/SampleGlobalStep.java    |  2 +-
 .../traversal/step/filter/TailGlobalStep.java      |  2 +-
 .../process/traversal/step/map/MatchStep.java      |  7 +--
 .../traversal/step/map/NoOpBarrierStep.java        |  7 +--
 .../step/sideEffect/AggregateGlobalStep.java       |  7 +--
 .../process/traversal/step/util/AbstractStep.java  | 12 +++--
 .../traversal/step/util/CollectingBarrierStep.java |  7 +--
 .../step/util/ExpandableStepIterator.java          |  7 ++-
 .../process/traversal/util/DefaultTraversal.java   |  4 +-
 .../util/function/TraverserSetSupplier.java        | 44 +++++++++++++++++
 .../traversal/step/map/AddVertexStepTest.java      |  4 ++
 .../util/function/TraverserSetSupplierTest.java    | 55 ++++++++++++++++++++++
 16 files changed, 165 insertions(+), 24 deletions(-)

diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateGlobalStep.java
index 2419132,0000000..0f75963
mode 100644,000000..100644
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateGlobalStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/sideEffect/AggregateGlobalStep.java
@@@ -1,167 -1,0 +1,168 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one
 + * or more contributor license agreements.  See the NOTICE file
 + * distributed with this work for additional information
 + * regarding copyright ownership.  The ASF licenses this file
 + * to you under the Apache License, Version 2.0 (the
 + * "License"); you may not use this file except in compliance
 + * with the License.  You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing,
 + * software distributed under the License is distributed on an
 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + * KIND, either express or implied.  See the License for the
 + * specific language governing permissions and limitations
 + * under the License.
 + */
 +package org.apache.tinkerpop.gremlin.process.traversal.step.sideEffect;
 +
 +import org.apache.tinkerpop.gremlin.process.traversal.Operator;
 +import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 +import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
 +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.SideEffectCapable;
 +import org.apache.tinkerpop.gremlin.process.traversal.step.TraversalParent;
 +import org.apache.tinkerpop.gremlin.process.traversal.step.util.AbstractStep;
 +import org.apache.tinkerpop.gremlin.process.traversal.step.util.BulkSet;
 +import org.apache.tinkerpop.gremlin.process.traversal.traverser.TraverserRequirement;
 +import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
 +import org.apache.tinkerpop.gremlin.process.traversal.util.FastNoSuchElementException;
 +import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalUtil;
 +import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
 +import org.apache.tinkerpop.gremlin.util.function.BulkSetSupplier;
 +
 +import java.util.Collection;
 +import java.util.Collections;
 +import java.util.List;
 +import java.util.NoSuchElementException;
 +import java.util.Set;
 +import java.util.function.Supplier;
 +
 +/**
 + * @author Marko A. Rodriguez (http://markorodriguez.com)
 + */
 +public final class AggregateGlobalStep<S> extends AbstractStep<S, S> implements SideEffectCapable<Collection, Collection>, TraversalParent, ByModulating, LocalBarrier<S> {
 +
 +    private Traversal.Admin<S, Object> aggregateTraversal = null;
 +    private String sideEffectKey;
-     private TraverserSet<S> barrier = new TraverserSet<>();
++    private TraverserSet<S> barrier;
 +
 +    public AggregateGlobalStep(final Traversal.Admin traversal, final String sideEffectKey) {
 +        super(traversal);
 +        this.sideEffectKey = sideEffectKey;
++        this.barrier = (TraverserSet<S>) this.traversal.getTraverserSetSupplier().get();
 +        this.getTraversal().getSideEffects().registerIfAbsent(this.sideEffectKey, (Supplier) BulkSetSupplier.instance(), Operator.addAll);
 +    }
 +
 +    @Override
 +    public String getSideEffectKey() {
 +        return this.sideEffectKey;
 +    }
 +
 +    @Override
 +    public String toString() {
 +        return StringFactory.stepString(this, this.sideEffectKey, this.aggregateTraversal);
 +    }
 +
 +    @Override
 +    public void modulateBy(final Traversal.Admin<?, ?> aggregateTraversal) {
 +        this.aggregateTraversal = this.integrateChild(aggregateTraversal);
 +    }
 +
 +    @Override
 +    public void replaceLocalChild(final Traversal.Admin<?, ?> oldTraversal, final Traversal.Admin<?, ?> newTraversal) {
 +        if (null != this.aggregateTraversal && this.aggregateTraversal.equals(oldTraversal))
 +            this.aggregateTraversal = this.integrateChild(newTraversal);
 +    }
 +
 +    @Override
 +    public List<Traversal.Admin<S, Object>> getLocalChildren() {
 +        return null == this.aggregateTraversal ? Collections.emptyList() : Collections.singletonList(this.aggregateTraversal);
 +    }
 +
 +    @Override
 +    public Set<TraverserRequirement> getRequirements() {
 +        return this.getSelfAndChildRequirements(TraverserRequirement.BULK, TraverserRequirement.SIDE_EFFECTS);
 +    }
 +
 +    @Override
 +    public AggregateGlobalStep<S> clone() {
 +        final AggregateGlobalStep<S> clone = (AggregateGlobalStep<S>) super.clone();
-         clone.barrier = new TraverserSet<>();
++        clone.barrier = (TraverserSet<S>) this.traversal.getTraverserSetSupplier().get();
 +        if (null != this.aggregateTraversal)
 +            clone.aggregateTraversal = this.aggregateTraversal.clone();
 +        return clone;
 +    }
 +
 +    @Override
 +    public void setTraversal(final Traversal.Admin<?, ?> parentTraversal) {
 +        super.setTraversal(parentTraversal);
 +        this.integrateChild(this.aggregateTraversal);
 +    }
 +
 +    @Override
 +    public int hashCode() {
 +        int result = super.hashCode() ^ this.sideEffectKey.hashCode();
 +        if (this.aggregateTraversal != null)
 +            result ^= this.aggregateTraversal.hashCode();
 +        return result;
 +    }
 +
 +    @Override
 +    protected Traverser.Admin<S> processNextStart() {
 +        if (this.barrier.isEmpty()) {
 +            this.processAllStarts();
 +        }
 +        return this.barrier.remove();
 +    }
 +
 +    @Override
 +    public void processAllStarts() {
 +        if (this.starts.hasNext()) {
 +            final BulkSet<Object> bulkSet = new BulkSet<>();
 +            while (this.starts.hasNext()) {
 +                final Traverser.Admin<S> traverser = this.starts.next();
 +                bulkSet.add(TraversalUtil.applyNullable(traverser, this.aggregateTraversal), traverser.bulk());
 +                traverser.setStepId(this.getNextStep().getId()); // when barrier is reloaded, the traversers should be at the next step
 +                this.barrier.add(traverser);
 +            }
 +            this.getTraversal().getSideEffects().add(this.sideEffectKey, bulkSet);
 +        }
 +    }
 +
 +    @Override
 +    public boolean hasNextBarrier() {
 +        if (this.barrier.isEmpty()) {
 +            this.processAllStarts();
 +        }
 +        return !this.barrier.isEmpty();
 +    }
 +
 +    @Override
 +    public TraverserSet<S> nextBarrier() throws NoSuchElementException {
 +        if (this.barrier.isEmpty()) {
 +            this.processAllStarts();
 +        }
 +        if (this.barrier.isEmpty())
 +            throw FastNoSuchElementException.instance();
 +        else {
 +            final TraverserSet<S> temp = this.barrier;
-             this.barrier = new TraverserSet<>();
++            this.barrier = (TraverserSet<S>) this.traversal.getTraverserSetSupplier().get();
 +            return temp;
 +        }
 +    }
 +
 +    @Override
 +    public void addBarrier(final TraverserSet<S> barrier) {
 +        this.barrier.addAll(barrier);
 +    }
 +
 +    @Override
 +    public void reset() {
 +        super.reset();
 +        this.barrier.clear();
 +    }
 +}
diff --cc gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
index b3bfdf5,32d77e8..7903721
--- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
+++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/util/AbstractStep.java
@@@ -21,7 -21,7 +21,8 @@@ package org.apache.tinkerpop.gremlin.pr
  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.traverser.util.EmptyTraverser;
+ import org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet;
  import org.apache.tinkerpop.gremlin.process.traversal.util.EmptyTraversal;
  import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalInterruptedException;
  import org.apache.tinkerpop.gremlin.structure.util.StringFactory;
@@@ -175,10 -176,10 +177,10 @@@ public abstract class AbstractStep<S, E
      public AbstractStep<S, E> clone() {
          try {
              final AbstractStep<S, E> clone = (AbstractStep<S, E>) super.clone();
-             clone.starts = new ExpandableStepIterator<>(clone);
+             clone.starts = new ExpandableStepIterator<>(clone, (TraverserSet<S>) traversal.getTraverserSetSupplier().get());
              clone.previousStep = EmptyStep.instance();
              clone.nextStep = EmptyStep.instance();
 -            clone.nextEnd = null;
 +            clone.nextEnd = EmptyTraverser.instance();
              clone.traversal = EmptyTraversal.instance();
              clone.labels = new LinkedHashSet<>(this.labels);
              clone.reset();
diff --cc gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepTest.java
index 7022bc8,0000000..d5ae0ec
mode 100644,000000..100644
--- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepTest.java
+++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/AddVertexStepTest.java
@@@ -1,48 -1,0 +1,52 @@@
 +/*
 + * Licensed to the Apache Software Foundation (ASF) under one
 + * or more contributor license agreements.  See the NOTICE file
 + * distributed with this work for additional information
 + * regarding copyright ownership.  The ASF licenses this file
 + * to you under the Apache License, Version 2.0 (the
 + * "License"); you may not use this file except in compliance
 + * with the License.  You may obtain a copy of the License at
 + *
 + * http://www.apache.org/licenses/LICENSE-2.0
 + *
 + * Unless required by applicable law or agreed to in writing,
 + * software distributed under the License is distributed on an
 + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
 + * KIND, either express or implied.  See the License for the
 + * specific language governing permissions and limitations
 + * under the License.
 + */
 +package org.apache.tinkerpop.gremlin.process.traversal.step.map;
 +
 +import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
 +import org.apache.tinkerpop.gremlin.structure.T;
 +import org.apache.tinkerpop.gremlin.structure.Vertex;
++import org.apache.tinkerpop.gremlin.util.function.TraverserSetSupplier;
 +import org.junit.Test;
 +
 +import static org.junit.Assert.assertEquals;
 +import static org.mockito.Mockito.mock;
++import static org.mockito.Mockito.when;
 +
 +public class AddVertexStepTest {
 +
 +    @Test
 +    public void shouldDefaultTheLabelIfNullString() {
 +        final Traversal.Admin t = mock(Traversal.Admin.class);
++        when(t.getTraverserSetSupplier()).thenReturn(TraverserSetSupplier.instance());
 +        final AddVertexStartStep starStep = new AddVertexStartStep(t, (String) null);
 +        assertEquals(Vertex.DEFAULT_LABEL, starStep.getParameters().getRaw().get(T.label).get(0));
 +        final AddVertexStep step = new AddVertexStep(t, (String) null);
 +        assertEquals(Vertex.DEFAULT_LABEL, starStep.getParameters().getRaw().get(T.label).get(0));
 +    }
 +
 +    @Test
 +    public void shouldDefaultTheLabelIfNullTraversal() {
 +        final Traversal.Admin t = mock(Traversal.Admin.class);
++        when(t.getTraverserSetSupplier()).thenReturn(TraverserSetSupplier.instance());
 +        final AddVertexStartStep starStep = new AddVertexStartStep(t, (Traversal<?,String>) null);
 +        assertEquals(Vertex.DEFAULT_LABEL, starStep.getParameters().getRaw().get(T.label).get(0));
 +        final AddVertexStep step = new AddVertexStep(t, (String) null);
 +        assertEquals(Vertex.DEFAULT_LABEL, starStep.getParameters().getRaw().get(T.label).get(0));
 +    }
 +}