@Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final Step step : traversal.getSteps()) { if (step instanceof Mutating) throw new VerificationException("The provided traversal has a mutating step and thus is not read only: " + step, traversal); } }
private GraphTraversalSource create() { return graphProvider.traversal(graph, ReadOnlyStrategy.instance()); }
@Test public void shouldTraverseE() { assertTraversal(create().E(), false); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { if (!traversal.getStrategies().toList().contains(ComputerFinalizationStrategy.instance()) && !traversal.getStrategies().toList().contains(ComputerVerificationStrategy.instance())) { if (!TraversalHelper.getStepsOfAssignableClass(VertexComputing.class, traversal).isEmpty()) throw new VerificationException("VertexComputing steps must be executed with a GraphComputer: " + TraversalHelper.getStepsOfAssignableClass(VertexComputing.class, traversal), traversal); throw new VerificationException("The parent of a reducing barrier can not be repeat()-step: " + step, traversal); (endStep instanceof RequirementsStep && endStep.getPreviousStep() instanceof SideEffectCapStep && endStep.getPreviousStep().getPreviousStep() instanceof ProfileSideEffectStep) || (endStep instanceof RequirementsStep && endStep.getPreviousStep() instanceof NoneStep && endStep.getPreviousStep().getPreviousStep() instanceof SideEffectCapStep && endStep.getPreviousStep().getPreviousStep().getPreviousStep() instanceof ProfileSideEffectStep))) { throw new VerificationException("When specified, the profile()-Step must be the last step or followed only by the cap()-step.", traversal); throw new VerificationException("The profile()-Step cannot be specified multiple times.", traversal);
@Test @LoadGraphWith(MODERN) public void g_V_repeat_both_profile() { final Traversal<Vertex, TraversalMetrics> traversal = get_g_V_repeatXbothX_timesX3X_profile(); printTraversalForm(traversal); 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())); }
@Test public void shouldTraverseV() { assertTraversal(create().V(), false); }
@Benchmark public GraphTraversal.Admin<Vertex,Vertex> testTranslationWithStrategy() { return translator.translate(g.withStrategies(ReadOnlyStrategy.instance()) .withStrategies(SubgraphStrategy.build().vertices(hasLabel("person")).create()) .V().out().in("link").out().in("link").asAdmin().getBytecode()); } }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { for (final Step<?, ?> step : traversal.getSteps()) { if ((step instanceof LambdaHolder || step instanceof ComparatorHolder) && step.toString().contains("lambda")) throw new VerificationException("The provided traversal contains a lambda step: " + step, traversal); } }
@Test @LoadGraphWith(MODERN) public void g_V_repeat_both_profileXmetricsX() { final Traversal<Vertex, Vertex> traversal = get_g_V_repeatXbothX_timesX3X_profileXmetricsX(); printTraversalForm(traversal); 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())); }
@Test public void shouldTraverseV_out() { assertTraversal(create().V().out(), false); }
@Override public void apply(final Traversal.Admin<?, ?> traversal) { // since hadoopgraph can't be modified we can't try to use the existing IoStep for standard processing // without graphcomputer if (traversal.getStartStep() instanceof IoStep) throw new VerificationException("HadoopGraph requires a GraphComputer for io() step", traversal); // VertexProgramStrategy should wrap up the IoStep in a TraversalVertexProgramStep. use that to grab the // GraphComputer that was injected in there and push that in to the HadoopIoStep. this step pattern match // is fairly specific and since you really can't chain together steps after io() this approach should work if (traversal.getStartStep() instanceof TraversalVertexProgramStep) { final TraversalVertexProgramStep tvp = (TraversalVertexProgramStep) traversal.getStartStep(); if (tvp.computerTraversal.get().getStartStep() instanceof ReadWriting) { final ReadWriting readWriting = (ReadWriting) tvp.computerTraversal.get().getStartStep(); final HadoopIoStep hadoopIoStep = new HadoopIoStep(traversal, readWriting.getFile()); hadoopIoStep.setMode(readWriting.getMode()); hadoopIoStep.setComputer(tvp.getComputer()); readWriting.getParameters().getRaw().forEach((key, value) -> value.forEach(v -> hadoopIoStep.configure(key, v))); TraversalHelper.replaceStep(tvp, hadoopIoStep, traversal); } } }
public Builder traversal(Traversal.Admin<?, ?> traversal) { // this is necessary if the job was submitted via TraversalVertexProgram.build() instead of TraversalVertexProgramStep. if (!(traversal.getParent() instanceof TraversalVertexProgramStep)) { final MemoryTraversalSideEffects memoryTraversalSideEffects = new MemoryTraversalSideEffects(traversal.getSideEffects()); final Traversal.Admin<?, ?> parentTraversal = new DefaultTraversal<>(); traversal.getGraph().ifPresent(parentTraversal::setGraph); final TraversalStrategies strategies = traversal.getStrategies().clone(); strategies.addStrategies(ComputerFinalizationStrategy.instance(), ComputerVerificationStrategy.instance(), new VertexProgramStrategy(Computer.compute())); parentTraversal.setStrategies(strategies); traversal.setStrategies(strategies); parentTraversal.setSideEffects(memoryTraversalSideEffects); parentTraversal.addStep(new TraversalVertexProgramStep(parentTraversal, traversal)); traversal = ((TraversalVertexProgramStep) parentTraversal.getStartStep()).getGlobalChildren().get(0); traversal.setSideEffects(memoryTraversalSideEffects); } PureTraversal.storeState(this.configuration, TRAVERSAL, traversal); return this; } }
@Test public void shouldTraverseV_in() { assertTraversal(create().V().in(), false); }
@Test public void shouldTraverseV_in_in() { assertTraversal(create().V().in(), false); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_In_addEXOUTX() { assertTraversal(create().V().as("a").in().addE("test").to("a"), true); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_In_addOutE() { assertTraversal(create().V().as("a").in().addE("test").to("a"), true); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_out_addInE() { assertTraversal(create().V().as("a").out().addE("test").from("a"), true); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_In_addEXINX() { assertTraversal(create().V().as("a").in().addE("test").from("a"), true); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_out_addOutE() { assertTraversal(create().V().as("a").out().addE("test").to("a"), true); }
@Test @FeatureRequirement(featureClass = Graph.Features.EdgeFeatures.class, feature = Graph.Features.EdgeFeatures.FEATURE_ADD_EDGES) public void shouldNotTraverseV_In_addInE() { assertTraversal(create().V().as("a").in().addE("test").from("a"), true); }