This is an automated email from the ASF dual-hosted git repository. spmallette pushed a commit to branch TINKERPOP-2311 in repository https://gitbox.apache.org/repos/asf/tinkerpop.git
commit 1e06e3067f3abb01f10bab124bdf92e4de33a759 Author: stephen <[email protected]> AuthorDate: Wed Nov 6 19:27:48 2019 -0500 TINKERPOP-2311 Implemented Iterable on TraversalStrategies Minor refactoring to polish up toList() usage a bit in favor of foreach and Iterator usage where sensible. --- CHANGELOG.asciidoc | 1 + .../computer/traversal/TraversalVertexProgram.java | 2 +- .../traversal/step/map/TraversalVertexProgramStep.java | 2 +- .../strategy/decoration/VertexProgramStrategy.java | 4 ++-- .../gremlin/process/traversal/TraversalStrategies.java | 17 +++++++++++------ .../strategy/decoration/RequirementsStrategy.java | 2 +- .../strategy/decoration/SideEffectStrategy.java | 2 +- .../verification/StandardVerificationStrategy.java | 4 ++-- .../process/traversal/util/DefaultTraversal.java | 2 +- .../traversal/util/DefaultTraversalStrategies.java | 2 +- .../traversal/util/EmptyTraversalStrategies.java | 2 +- .../process/traversal/util/TraversalExplanation.java | 2 +- .../gremlin/process/traversal/util/TraversalHelper.java | 2 +- .../gremlin/process/TraversalStrategiesTest.java | 17 +++++++++-------- .../gremlin/process/traversal/step/map/ProfileTest.java | 11 +++++------ .../optimization/EarlyLimitStrategyProcessTest.java | 2 +- .../interceptor/SparkStarBarrierInterceptor.java | 2 +- .../optimization/SparkInterceptorStrategyTest.java | 8 ++++---- .../optimization/SparkSingleIterationStrategyTest.java | 12 ++++++------ 19 files changed, 51 insertions(+), 45 deletions(-) diff --git a/CHANGELOG.asciidoc b/CHANGELOG.asciidoc index 50fa442..11a097b 100644 --- a/CHANGELOG.asciidoc +++ b/CHANGELOG.asciidoc @@ -30,6 +30,7 @@ This release also includes changes from <<release-3-4-3, 3.4.3>>. * Renamed `StoreStep` to `AggregateLocalStep`. * Renamed `AggregateStep` to `AggregateGlobalStep`. * Renamed `SERVER_ERROR_SCRIPT_EVALUATION` to `SERVER_ERROR_EVALUATION` given that this response code applies to remote traversals as well as scripts. +* Refactored `TraversalStrategies` to implement `Iterable`. * Configured GraphBinary as the default binary serialization format for the Java Driver. * Configured GraphSON 3.0 as the default text serialization format when no serializer can be determined. * Upgraded to Neo4j 3.4.11. diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java index 4cc7238..a5f9dfe 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/TraversalVertexProgram.java @@ -178,7 +178,7 @@ public final class TraversalVertexProgram implements VertexProgram<TraverserSet< this.traversal.get().getParent().asStep().getNextStep().getNextStep() instanceof ComputerResultStep)); // determine how to store halted traversers - final Iterator<?> itty = IteratorUtils.filter(this.traversal.get().getStrategies().toList(), strategy -> strategy instanceof HaltedTraverserStrategy).iterator(); + final Iterator<?> itty = IteratorUtils.filter(this.traversal.get().getStrategies(), strategy -> strategy instanceof HaltedTraverserStrategy).iterator(); this.haltedTraverserStrategy = itty.hasNext() ? (HaltedTraverserStrategy) itty.next() : HaltedTraverserStrategy.reference(); // register traversal side-effects in memory diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java index 30cfee5..3fa36a9 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/step/map/TraversalVertexProgramStep.java @@ -74,7 +74,7 @@ public final class TraversalVertexProgramStep extends VertexProgramStep implemen final Traversal.Admin<?, ?> computerSpecificTraversal = this.computerTraversal.getPure(); final TraversalStrategies computerSpecificStrategies = this.getTraversal().getStrategies().clone(); - IteratorUtils.filter(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()).toList(), + IteratorUtils.filter(TraversalStrategies.GlobalCache.getStrategies(graph.getClass()), s -> s instanceof TraversalStrategy.ProviderOptimizationStrategy).forEach(computerSpecificStrategies::addStrategies); computerSpecificTraversal.setStrategies(computerSpecificStrategies); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java index 2d63510..8c2e28a 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/computer/traversal/strategy/decoration/VertexProgramStrategy.java @@ -162,8 +162,8 @@ public final class VertexProgramStrategy extends AbstractTraversalStrategy<Trave } public static Optional<Computer> getComputer(final TraversalStrategies strategies) { - final Optional<TraversalStrategy<?>> optional = strategies.toList().stream().filter(strategy -> strategy instanceof VertexProgramStrategy).findAny(); - return optional.isPresent() ? Optional.of(((VertexProgramStrategy) optional.get()).computer) : Optional.empty(); + final Optional<VertexProgramStrategy> optional = strategies.getStrategy(VertexProgramStrategy.class); + return optional.isPresent() ? Optional.of(optional.get().computer) : Optional.empty(); } public void addGraphComputerStrategies(final TraversalSource traversalSource) { diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java index 0689bc8..f336908 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/TraversalStrategies.java @@ -41,6 +41,7 @@ import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.Stan import org.apache.tinkerpop.gremlin.process.traversal.util.DefaultTraversalStrategies; import org.apache.tinkerpop.gremlin.structure.Graph; import org.apache.tinkerpop.gremlin.structure.util.empty.EmptyGraph; +import org.apache.tinkerpop.gremlin.util.iterator.IteratorUtils; import org.apache.tinkerpop.gremlin.util.tools.MultiMap; import java.io.Serializable; @@ -65,19 +66,22 @@ import java.util.stream.Collectors; * @author Marko A. Rodriguez (http://markorodriguez.com) * @author Matthias Broecheler ([email protected]) */ -public interface TraversalStrategies extends Serializable, Cloneable { +public interface TraversalStrategies extends Serializable, Cloneable, Iterable<TraversalStrategy<?>> { static List<Class<? extends TraversalStrategy>> STRATEGY_CATEGORIES = Collections.unmodifiableList(Arrays.asList(TraversalStrategy.DecorationStrategy.class, TraversalStrategy.OptimizationStrategy.class, TraversalStrategy.ProviderOptimizationStrategy.class, TraversalStrategy.FinalizationStrategy.class, TraversalStrategy.VerificationStrategy.class)); /** - * Return all the {@link TraversalStrategy} instances associated with this {@link TraversalStrategies}. + * Return an immutable list of the {@link TraversalStrategy} instances. */ - public List<TraversalStrategy<?>> toList(); + public default List<TraversalStrategy<?>> toList() { + return Collections.unmodifiableList(IteratorUtils.list(iterator())); + } /** - * Return all the {@link TraversalStrategy} instances associated with this {@link TraversalStrategies}. + * Return an {@code Iterator} of the {@link TraversalStrategy} instances. */ - public Iterator<TraversalStrategy<?>> toIterator(); + @Override + public Iterator<TraversalStrategy<?>> iterator(); /** * Return the {@link TraversalStrategy} instance associated with the provided class. @@ -87,7 +91,8 @@ public interface TraversalStrategies extends Serializable, Cloneable { * @return an optional containing the strategy instance or not */ public default <T extends TraversalStrategy> Optional<T> getStrategy(final Class<T> traversalStrategyClass) { - return (Optional) toList().stream().filter(s -> traversalStrategyClass.isAssignableFrom(s.getClass())).findAny(); + return (Optional<T>) IteratorUtils.stream(iterator()). + filter(s -> traversalStrategyClass.isAssignableFrom(s.getClass())).findAny(); } /** diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java index 09d1806..cd9d663 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/RequirementsStrategy.java @@ -49,7 +49,7 @@ public final class RequirementsStrategy extends AbstractTraversalStrategy<Traver } public static void addRequirements(final TraversalStrategies traversalStrategies, final TraverserRequirement... requirements) { - RequirementsStrategy strategy = (RequirementsStrategy) traversalStrategies.toList().stream().filter(s -> s instanceof RequirementsStrategy).findAny().orElse(null); + RequirementsStrategy strategy = (RequirementsStrategy) traversalStrategies.getStrategy(RequirementsStrategy.class).orElse(null); if (null == strategy) { strategy = new RequirementsStrategy(); traversalStrategies.addStrategies(strategy); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java index f3f5d4b..6be1cb4 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/decoration/SideEffectStrategy.java @@ -50,7 +50,7 @@ public final class SideEffectStrategy extends AbstractTraversalStrategy<Traversa } public static <A> void addSideEffect(final TraversalStrategies traversalStrategies, final String key, final A value, final BinaryOperator<A> reducer) { - SideEffectStrategy strategy = (SideEffectStrategy) traversalStrategies.toList().stream().filter(s -> s instanceof SideEffectStrategy).findAny().orElse(null); + SideEffectStrategy strategy = traversalStrategies.getStrategy(SideEffectStrategy.class).orElse(null); if (null == strategy) { strategy = new SideEffectStrategy(); traversalStrategies.addStrategies(strategy); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java index fc33c69..5a41c92 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/verification/StandardVerificationStrategy.java @@ -51,8 +51,8 @@ public final class StandardVerificationStrategy extends AbstractTraversalStrateg @Override public void apply(final Traversal.Admin<?, ?> traversal) { - if (!traversal.getStrategies().toList().contains(ComputerFinalizationStrategy.instance()) && - !traversal.getStrategies().toList().contains(ComputerVerificationStrategy.instance())) { + if (!traversal.getStrategies().getStrategy(ComputerFinalizationStrategy.class).isPresent() && + !traversal.getStrategies().getStrategy(ComputerVerificationStrategy.class).isPresent()) { if (!TraversalHelper.getStepsOfAssignableClass(VertexComputing.class, traversal).isEmpty()) throw new VerificationException("VertexComputing steps must be executed with a GraphComputer: " + TraversalHelper.getStepsOfAssignableClass(VertexComputing.class, traversal), traversal); } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java index 592f46c..78b49eb 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversal.java @@ -138,7 +138,7 @@ public class DefaultTraversal<S, E> implements Traversal.Admin<S, E> { // moving side-effect setting after actual recursive strategy application we save a loop and by // consequence also fix a problem where strategies might reset something in sideeffects which seems to // happen in TranslationStrategy. - final Iterator<TraversalStrategy<?>> strategyIterator = this.strategies.toIterator(); + final Iterator<TraversalStrategy<?>> strategyIterator = this.strategies.iterator(); while (strategyIterator.hasNext()) { final TraversalStrategy<?> strategy = strategyIterator.next(); TraversalHelper.applyTraversalRecursively(strategy::apply, this); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java index e41762a..3e39d1b 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/DefaultTraversalStrategies.java @@ -70,7 +70,7 @@ public class DefaultTraversalStrategies implements TraversalStrategies { } @Override - public Iterator<TraversalStrategy<?>> toIterator() { + public Iterator<TraversalStrategy<?>> iterator() { return this.traversalStrategies.iterator(); } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java index f9e1e62..f99d4bc 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/EmptyTraversalStrategies.java @@ -42,7 +42,7 @@ public final class EmptyTraversalStrategies implements TraversalStrategies { @Override - public Iterator<TraversalStrategy<?>> toIterator() { + public Iterator<TraversalStrategy<?>> iterator() { return toList().iterator(); } diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalExplanation.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalExplanation.java index 1ef5e97..c793a95 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalExplanation.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalExplanation.java @@ -52,7 +52,7 @@ public class TraversalExplanation extends AbstractExplanation implements Seriali public TraversalExplanation(final Traversal.Admin<?, ?> traversal) { this.traversal = traversal.clone(); final TraversalStrategies mutatingStrategies = new DefaultTraversalStrategies(); - for (final TraversalStrategy strategy : this.traversal.getStrategies().toList()) { + for (final TraversalStrategy strategy : this.traversal.getStrategies()) { final Traversal.Admin<?, ?> mutatingTraversal = this.traversal.clone(); mutatingStrategies.addStrategies(strategy); mutatingTraversal.setStrategies(mutatingStrategies); diff --git a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java index c406ee8..120b2ec 100644 --- a/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java +++ b/gremlin-core/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/util/TraversalHelper.java @@ -687,7 +687,7 @@ public final class TraversalHelper { childTraversal.setStrategies(parentTraversal.getStrategies()); childTraversal.setSideEffects(parentTraversal.getSideEffects()); parentTraversal.getGraph().ifPresent(childTraversal::setGraph); - for (final TraversalStrategy<?> strategy : parentTraversal.getStrategies().toList()) { + for (final TraversalStrategy<?> strategy : parentTraversal.getStrategies()) { strategy.apply(childTraversal); if (null != stopAfterStrategy && stopAfterStrategy.isInstance(strategy)) break; diff --git a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java index e2d625c..1247986 100644 --- a/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java +++ b/gremlin-core/src/test/java/org/apache/tinkerpop/gremlin/process/TraversalStrategiesTest.java @@ -66,10 +66,11 @@ public class TraversalStrategiesTest { TestGraph graph = new TestGraph(); TraversalStrategies strategies = graph.traversal().getStrategies(); assertFalse(TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList().isEmpty()); - for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList()) { + assertTrue(TraversalStrategies.GlobalCache.getStrategies(Graph.class).iterator().hasNext()); + for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(Graph.class)) { assertTrue(strategies.getStrategy(strategy.getClass()).isPresent()); } - for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class).toList()) { + for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class)) { assertFalse(strategies.getStrategy(strategy.getClass()).isPresent()); } assertTrue(strategies.getStrategy(StrategyA.class).isPresent()); @@ -83,10 +84,10 @@ public class TraversalStrategiesTest { /// graph = new TestGraph(); strategies = graph.traversal().getStrategies(); - for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(Graph.class).toList()) { + for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(Graph.class)) { assertTrue(strategies.getStrategy(strategy.getClass()).isPresent()); } - for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class).toList()) { + for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class)) { assertFalse(strategies.getStrategy(strategy.getClass()).isPresent()); } assertFalse(strategies.getStrategy(StrategyA.class).isPresent()); @@ -98,10 +99,10 @@ public class TraversalStrategiesTest { ////////////////////// strategies = TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class); assertFalse(TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class).toList().isEmpty()); - for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class).toList()) { + for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class)) { assertTrue(strategies.getStrategy(strategy.getClass()).isPresent()); } - for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraph.class).toList()) { + for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraph.class)) { assertFalse(strategies.getStrategy(strategy.getClass()).isPresent()); } assertFalse(strategies.getStrategy(StrategyA.class).isPresent()); @@ -112,10 +113,10 @@ public class TraversalStrategiesTest { // strategies = TraversalStrategies.GlobalCache.getStrategies(TestGraphComputer.class); assertFalse(TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class).toList().isEmpty()); - for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class).toList()) { + for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(GraphComputer.class)) { assertTrue(strategies.getStrategy(strategy.getClass()).isPresent()); } - for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraph.class).toList()) { + for (final TraversalStrategy strategy : TraversalStrategies.GlobalCache.getStrategies(TestGraph.class)) { assertFalse(strategies.getStrategy(strategy.getClass()).isPresent()); } assertFalse(strategies.getStrategy(StrategyA.class).isPresent()); diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProfileTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProfileTest.java index ae8df07..839b47d 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProfileTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/step/map/ProfileTest.java @@ -55,7 +55,6 @@ import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.GRATEFUL; import static org.apache.tinkerpop.gremlin.LoadGraphWith.GraphData.MODERN; import static org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__.both; import static org.hamcrest.core.IsEqual.equalTo; -import static org.hamcrest.core.IsInstanceOf.instanceOf; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertNotEquals; @@ -258,8 +257,8 @@ public abstract class ProfileTest extends AbstractGremlinProcessTest { final TraversalMetrics traversalMetrics = traversal.next(); validate_g_V_repeat_both_modern_profile(traversalMetrics, - traversal.asAdmin().getStrategies().toList().contains(RepeatUnrollStrategy.instance()) && - !traversal.asAdmin().getStrategies().toList().contains(ComputerVerificationStrategy.instance())); + traversal.asAdmin().getStrategies().getStrategy(RepeatUnrollStrategy.class).isPresent() && + !traversal.asAdmin().getStrategies().getStrategy(ComputerVerificationStrategy.class).isPresent()); } @Test @@ -270,8 +269,8 @@ public abstract class ProfileTest extends AbstractGremlinProcessTest { traversal.iterate(); final TraversalMetrics traversalMetrics = traversal.asAdmin().getSideEffects().get(METRICS_KEY); validate_g_V_repeat_both_modern_profile(traversalMetrics, - traversal.asAdmin().getStrategies().toList().contains(RepeatUnrollStrategy.instance()) && - !traversal.asAdmin().getStrategies().toList().contains(ComputerVerificationStrategy.instance())); + traversal.asAdmin().getStrategies().getStrategy(RepeatUnrollStrategy.class).isPresent() && + !traversal.asAdmin().getStrategies().getStrategy(ComputerVerificationStrategy.class).isPresent()); } private void validate_g_V_repeat_both_modern_profile(final TraversalMetrics traversalMetrics, final boolean withRepeatUnrollStrategy) { @@ -326,7 +325,7 @@ public abstract class ProfileTest extends AbstractGremlinProcessTest { assertEquals(1, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue()); assertEquals(1, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue()); - if (traversal.asAdmin().getStrategies().toList().stream().anyMatch(s -> s instanceof CountStrategy)) { + if (traversal.asAdmin().getStrategies().getStrategy(CountStrategy.class).isPresent()) { assertEquals("Metrics 1 should have 4 nested metrics.", 4, metrics.getNested().size()); } else { assertEquals("Metrics 1 should have 3 nested metrics.", 3, metrics.getNested().size()); diff --git a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyProcessTest.java b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyProcessTest.java index 8a640e2..33d18c1 100644 --- a/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyProcessTest.java +++ b/gremlin-test/src/main/java/org/apache/tinkerpop/gremlin/process/traversal/strategy/optimization/EarlyLimitStrategyProcessTest.java @@ -90,7 +90,7 @@ public class EarlyLimitStrategyProcessTest extends AbstractGremlinProcessTest { assumeTrue("The following assertions apply to TinkerGraph only as provider strategies can alter the " + "steps to not comply with expectations", graph.getClass().getSimpleName().equals("TinkerGraph")); - if (t.asAdmin().getStrategies().toList().stream().anyMatch(s -> s instanceof EarlyLimitStrategy)) { + if (t.asAdmin().getStrategies().getStrategy(EarlyLimitStrategy.class).isPresent()) { assertEquals(10, metrics.getMetrics().size()); assertTrue(metrics.getMetrics(5).getName().endsWith("@[d]")); assertEquals("RangeGlobalStep(0,1)", metrics.getMetrics(6).getName()); diff --git a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/interceptor/SparkStarBarrierInterceptor.java b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/interceptor/SparkStarBarrierInterceptor.java index de42525..7eb12d4 100644 --- a/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/interceptor/SparkStarBarrierInterceptor.java +++ b/spark-gremlin/src/main/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/interceptor/SparkStarBarrierInterceptor.java @@ -163,7 +163,7 @@ public final class SparkStarBarrierInterceptor implements SparkVertexProgramInte final Step<?, ?> startStep = traversal.getStartStep(); final Step<?, ?> endStep = traversal.getEndStep(); // right now this is not supported because of how the SparkStarBarrierInterceptor mutates the traversal prior to local evaluation - if (traversal.getStrategies().toList().stream().filter(strategy -> strategy instanceof SubgraphStrategy).findAny().isPresent()) + if (traversal.getStrategies().getStrategy(SubgraphStrategy.class).isPresent()) return false; if (!startStep.getClass().equals(GraphStep.class) || ((GraphStep) startStep).returnsEdge()) return false; diff --git a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkInterceptorStrategyTest.java b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkInterceptorStrategyTest.java index 302c8f9..b1d58a6 100644 --- a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkInterceptorStrategyTest.java +++ b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkInterceptorStrategyTest.java @@ -69,9 +69,9 @@ public class SparkInterceptorStrategyTest extends AbstractSparkTest { /// Graph graph = GraphFactory.open(configuration); GraphTraversalSource g = graph.traversal().withComputer().withoutStrategies(SparkSingleIterationStrategy.class); - assertFalse(g.getStrategies().toList().contains(SparkSingleIterationStrategy.instance())); + assertFalse(g.getStrategies().getStrategy(SparkSingleIterationStrategy.class).isPresent()); assertFalse(g.V().count().explain().toString().contains(SparkSingleIterationStrategy.class.getSimpleName())); - assertTrue(g.getStrategies().toList().contains(SparkInterceptorStrategy.instance())); + assertTrue(g.getStrategies().getStrategy(SparkInterceptorStrategy.class).isPresent()); assertTrue(g.V().count().explain().toString().contains(SparkInterceptorStrategy.class.getSimpleName())); /// groupCount(m)-test Traversal.Admin<Vertex, Long> traversal = g.V().groupCount("m").by(T.label).count().asAdmin(); @@ -97,9 +97,9 @@ public class SparkInterceptorStrategyTest extends AbstractSparkTest { /// Graph graph = GraphFactory.open(configuration); GraphTraversalSource g = graph.traversal().withComputer().withoutStrategies(SparkSingleIterationStrategy.class); - assertFalse(g.getStrategies().toList().contains(SparkSingleIterationStrategy.instance())); + assertFalse(g.getStrategies().getStrategy(SparkSingleIterationStrategy.class).isPresent()); assertFalse(g.V().count().explain().toString().contains(SparkSingleIterationStrategy.class.getSimpleName())); - assertTrue(g.getStrategies().toList().contains(SparkInterceptorStrategy.instance())); + assertTrue(g.getStrategies().getStrategy(SparkInterceptorStrategy.class).isPresent()); assertTrue(g.V().count().explain().toString().contains(SparkInterceptorStrategy.class.getSimpleName())); /// SparkCountInterceptor matches test(SparkStarBarrierInterceptor.class, 6l, g.V().count()); diff --git a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkSingleIterationStrategyTest.java b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkSingleIterationStrategyTest.java index df15a19..6202f33 100644 --- a/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkSingleIterationStrategyTest.java +++ b/spark-gremlin/src/test/java/org/apache/tinkerpop/gremlin/spark/process/computer/traversal/strategy/optimization/SparkSingleIterationStrategyTest.java @@ -88,11 +88,11 @@ public class SparkSingleIterationStrategyTest extends AbstractSparkTest { Graph graph = GraphFactory.open(configuration); GraphTraversalSource g = graph.traversal().withComputer().withoutStrategies(SparkInterceptorStrategy.class, MessagePassingReductionStrategy.class); - assertFalse(g.getStrategies().toList().contains(SparkInterceptorStrategy.instance())); + assertFalse(g.getStrategies().getStrategy(SparkInterceptorStrategy.class).isPresent()); assertFalse(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof SparkInterceptorStrategy).findAny().isPresent()); - assertFalse(g.getStrategies().toList().contains(MessagePassingReductionStrategy.instance())); + assertFalse(g.getStrategies().getStrategy(MessagePassingReductionStrategy.class).isPresent()); assertFalse(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof MessagePassingReductionStrategy).findAny().isPresent()); - assertTrue(g.getStrategies().toList().contains(SparkSingleIterationStrategy.instance())); + assertTrue(g.getStrategies().getStrategy(SparkSingleIterationStrategy.class).isPresent()); assertTrue(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof SparkSingleIterationStrategy).findAny().isPresent()); test(true, g.V().limit(10)); @@ -116,11 +116,11 @@ public class SparkSingleIterationStrategyTest extends AbstractSparkTest { graph = GraphFactory.open(configuration); g = graph.traversal().withComputer().withoutStrategies(SparkInterceptorStrategy.class).withStrategies(MessagePassingReductionStrategy.instance()); - assertFalse(g.getStrategies().toList().contains(SparkInterceptorStrategy.instance())); + assertFalse(g.getStrategies().getStrategy(SparkInterceptorStrategy.class).isPresent()); assertFalse(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof SparkInterceptorStrategy).findAny().isPresent()); - assertTrue(g.getStrategies().toList().contains(MessagePassingReductionStrategy.instance())); + assertTrue(g.getStrategies().getStrategy(MessagePassingReductionStrategy.class).isPresent()); assertTrue(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof MessagePassingReductionStrategy).findAny().isPresent()); - assertTrue(g.getStrategies().toList().contains(SparkSingleIterationStrategy.instance())); + assertTrue(g.getStrategies().getStrategy(SparkSingleIterationStrategy.class).isPresent()); assertTrue(g.V().count().explain().getStrategyTraversals().stream().filter(pair -> pair.getValue0() instanceof SparkSingleIterationStrategy).findAny().isPresent()); test(true, g.V().limit(10));
