blob: 9747fc0c36582b79dbc2f25c22a6d73c2a19686f [file] [log] [blame]
/*
* 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.commons.lang3.exception.ExceptionUtils;
import org.apache.tinkerpop.gremlin.LoadGraphWith;
import org.apache.tinkerpop.gremlin.process.AbstractGremlinProcessTest;
import org.apache.tinkerpop.gremlin.process.GremlinProcessRunner;
import org.apache.tinkerpop.gremlin.process.IgnoreEngine;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.PageRank;
import org.apache.tinkerpop.gremlin.process.computer.traversal.step.map.TraversalVertexProgramStep;
import org.apache.tinkerpop.gremlin.process.traversal.P;
import org.apache.tinkerpop.gremlin.process.traversal.Step;
import org.apache.tinkerpop.gremlin.process.traversal.Traversal;
import org.apache.tinkerpop.gremlin.process.traversal.TraversalEngine;
import org.apache.tinkerpop.gremlin.process.traversal.Traverser;
import org.apache.tinkerpop.gremlin.process.traversal.dsl.graph.__;
import org.apache.tinkerpop.gremlin.process.traversal.step.Profiling;
import org.apache.tinkerpop.gremlin.process.traversal.step.util.ProfileStep;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.CountStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.LazyBarrierStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.optimization.RepeatUnrollStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.ComputerVerificationStrategy;
import org.apache.tinkerpop.gremlin.process.traversal.strategy.verification.VerificationException;
import org.apache.tinkerpop.gremlin.process.traversal.util.Metrics;
import org.apache.tinkerpop.gremlin.process.traversal.util.MutableMetrics;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalHelper;
import org.apache.tinkerpop.gremlin.process.traversal.util.TraversalMetrics;
import org.apache.tinkerpop.gremlin.structure.Graph;
import org.apache.tinkerpop.gremlin.structure.Vertex;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.concurrent.TimeUnit;
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.junit.Assert.assertEquals;
import static org.junit.Assert.assertFalse;
import static org.junit.Assert.assertNotEquals;
import static org.junit.Assert.assertTrue;
import static org.junit.Assert.fail;
import static org.junit.Assume.assumeThat;
/**
* @author Bob Briody (http://bobbriody.com)
* @author Marko A. Rodriguez (http://markorodriguez.com)
*/
@RunWith(GremlinProcessRunner.class)
public abstract class ProfileTest extends AbstractGremlinProcessTest {
private static final String METRICS_KEY = "metrics";
public abstract Traversal<Vertex, TraversalMetrics> get_g_V_out_out_profile();
public abstract Traversal<Vertex, TraversalMetrics> get_g_V_repeatXbothX_timesX3X_profile();
public abstract Traversal<Vertex, TraversalMetrics> get_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profile();
public abstract Traversal<Vertex, TraversalMetrics> get_g_V_whereXinXcreatedX_count_isX1XX_name_profile();
public abstract Traversal<Vertex, TraversalMetrics> get_g_V_matchXa_created_b__b_in_count_isXeqX1XXX_selectXa_bX_profile();
public abstract Traversal<Vertex, Vertex> get_g_V_out_out_profileXmetricsX();
public abstract Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_profileXmetricsX();
public abstract Traversal<Vertex, Vertex> get_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profileXmetricsX();
public abstract Traversal<Vertex, String> get_g_V_whereXinXcreatedX_count_isX1XX_name_profileXmetricsX();
public abstract Traversal<Vertex, Map<String, String>> get_g_V_matchXa_created_b__b_in_count_isXeqX1XXX_selectXa_bX_profileXmetricsX();
public abstract Traversal<Vertex, TraversalMetrics> get_g_V_hasLabelXpersonX_pageRank_withXpropertyName_rankX_withXedges_bothEX_rank_profile();
public abstract Traversal<Vertex, TraversalMetrics> get_g_V_groupXmX_profile();
@Override
protected void afterLoadGraphWith(final Graph graph) throws Exception {
// profile() does some explicit counting which goes off with LazyBarrierStrategy in place.
g = g.withoutStrategies(LazyBarrierStrategy.class);
}
@Test
@LoadGraphWith(MODERN)
public void modern_V_out_out_profile() {
final Traversal<Vertex, TraversalMetrics> traversal = get_g_V_out_out_profile();
printTraversalForm(traversal);
validate_g_V_out_out_profile_modern(traversal, traversal.next());
}
@Test
@LoadGraphWith(MODERN)
public void modern_V_out_out_profileXmetricsX() {
final Traversal<Vertex, Vertex> traversal = get_g_V_out_out_profileXmetricsX();
printTraversalForm(traversal);
traversal.iterate();
validate_g_V_out_out_profile_modern(traversal, traversal.asAdmin().getSideEffects().get(METRICS_KEY));
}
private void validate_g_V_out_out_profile_modern(final Traversal traversal, final TraversalMetrics traversalMetrics) {
traversalMetrics.toString(); // ensure no exceptions are thrown
assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations",
graph.getClass().getSimpleName(), equalTo("TinkerGraph"));
Metrics metrics = traversalMetrics.getMetrics(0);
assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
metrics = traversalMetrics.getMetrics(1);
assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
metrics = traversalMetrics.getMetrics(2);
assertEquals(2, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
if (!onGraphComputer(traversal.asAdmin())) {
// Every other step should be a Profile step
List<Step> steps = traversal.asAdmin().getSteps();
for (int ii = 1; ii <= 6; ii += 2) {
assertEquals("Every other Step should be a ProfileStep.", ProfileStep.class, steps.get(ii).getClass());
}
}
}
////////////////////
@Test
@LoadGraphWith(GRATEFUL)
public void grateful_V_out_out_profile() {
final Traversal<Vertex, TraversalMetrics> traversal = get_g_V_out_out_profile();
printTraversalForm(traversal);
final TraversalMetrics traversalMetrics = traversal.next();
validate_g_V_out_out_profile_grateful(traversalMetrics);
}
@Test
@LoadGraphWith(GRATEFUL)
public void grateful_V_out_out_profileXmetricsX() {
final Traversal<Vertex, Vertex> traversal = get_g_V_out_out_profileXmetricsX();
printTraversalForm(traversal);
traversal.iterate();
final TraversalMetrics traversalMetrics = traversal.asAdmin().getSideEffects().get(METRICS_KEY);
validate_g_V_out_out_profile_grateful(traversalMetrics);
}
private void validate_g_V_out_out_profile_grateful(final TraversalMetrics traversalMetrics) {
traversalMetrics.toString(); // ensure no exceptions are thrown
assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations",
graph.getClass().getSimpleName(), equalTo("TinkerGraph"));
Metrics metrics = traversalMetrics.getMetrics(0);
assertEquals(808, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertEquals(808, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0);
assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0);
metrics = traversalMetrics.getMetrics(1);
assertEquals(8049, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0);
assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0);
metrics = traversalMetrics.getMetrics(2);
assertEquals(327370, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0);
assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0);
double totalPercentDuration = 0;
for (Metrics m : traversalMetrics.getMetrics()) {
totalPercentDuration += (Double) m.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY);
}
assertEquals(100, totalPercentDuration, 0.000001);
}
///////////////////
@Test
@LoadGraphWith(MODERN)
@IgnoreEngine(TraversalEngine.Type.COMPUTER)
public void g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profile() {
final Traversal<Vertex, TraversalMetrics> traversal = get_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profile();
printTraversalForm(traversal);
// This assertion is really only meant for tinkergraph
if (graph.getClass().getSimpleName().equals("TinkerGraph"))
assertEquals("There should be 8 steps in this traversal (counting injected profile steps).", 8, traversal.asAdmin().getSteps().size());
final TraversalMetrics traversalMetrics = traversal.next();
validate_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profile(traversalMetrics);
}
@Test
@LoadGraphWith(MODERN)
@IgnoreEngine(TraversalEngine.Type.COMPUTER)
public void g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profileXmetricsX() {
final Traversal<Vertex, Vertex> traversal = get_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profileXmetricsX();
printTraversalForm(traversal);
traversal.iterate();
// This assertion is really only meant for tinkergraph
if (graph.getClass().getSimpleName().equals("TinkerGraph"))
assertEquals("There should be 7 steps in this traversal (counting injected profile steps).", 7, traversal.asAdmin().getSteps().size());
final TraversalMetrics traversalMetrics = traversal.asAdmin().getSideEffects().get(METRICS_KEY);
validate_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profile(traversalMetrics);
}
private void validate_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profile(final TraversalMetrics traversalMetrics) {
traversalMetrics.toString(); // ensure no exceptions are thrown
assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations",
graph.getClass().getSimpleName(), equalTo("TinkerGraph"));
// Grab the second (sideEffect{sleep}) step and check the times.
Metrics metrics = traversalMetrics.getMetrics(1);
// 6 elements w/ a 10ms sleep each = 60ms with 10ms for other computation.
assertTrue("Duration should be at least the length of the sleep (59ms): " + metrics.getDuration(TimeUnit.MILLISECONDS),
metrics.getDuration(TimeUnit.MILLISECONDS) >= 59);
// 6 elements w/ a 5ms sleep each = 30ms plus 20ms for other computation
metrics = traversalMetrics.getMetrics(2);
assertTrue("Duration should be at least the length of the sleep (29ms): " + metrics.getDuration(TimeUnit.MILLISECONDS),
metrics.getDuration(TimeUnit.MILLISECONDS) >= 29);
double totalPercentDuration = 0;
for (Metrics m : traversalMetrics.getMetrics()) {
totalPercentDuration += (Double) m.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY);
}
assertEquals(100, totalPercentDuration, 0.000001);
}
///////////////////
@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().getStrategy(RepeatUnrollStrategy.class).isPresent() &&
!traversal.asAdmin().getStrategies().getStrategy(ComputerVerificationStrategy.class).isPresent());
}
@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().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) {
traversalMetrics.toString(); // ensure no exceptions are thrown
assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations",
graph.getClass().getSimpleName(), equalTo("TinkerGraph"));
Metrics metrics = traversalMetrics.getMetrics(0);
assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
metrics = traversalMetrics.getMetrics(1);
assertEquals(withRepeatUnrollStrategy ? 12 : 72, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
assertNotEquals(0, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
if (!withRepeatUnrollStrategy)
assertTrue("Count should be greater than traversers.", metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertTrue("Percent duration should be positive.", (Double) metrics.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY) >= 0);
assertTrue("Times should be positive.", metrics.getDuration(TimeUnit.MICROSECONDS) >= 0);
// Test the nested global metrics of the repeat step
if (!withRepeatUnrollStrategy) {
final Metrics vertexStepNestedInRepeat = (Metrics) metrics.getNested().toArray()[0];
assertEquals(114, vertexStepNestedInRepeat.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
assertNotEquals(0, vertexStepNestedInRepeat.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertTrue("Count should be greater than traversers.", vertexStepNestedInRepeat.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > vertexStepNestedInRepeat.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertTrue("Times should be positive.", vertexStepNestedInRepeat.getDuration(TimeUnit.MICROSECONDS) >= 0);
}
double totalPercentDuration = 0;
for (Metrics m : traversalMetrics.getMetrics()) {
totalPercentDuration += (Double) m.getAnnotation(TraversalMetrics.PERCENT_DURATION_KEY);
}
assertEquals(100, totalPercentDuration, 0.000001);
}
/////////////
private void validate_g_V_whereXinXcreatedX_count_isX1XX_name_profile(final Traversal traversal, final TraversalMetrics traversalMetrics) {
traversalMetrics.toString(); // ensure no exceptions are thrown
assumeThat("The following assertions apply to TinkerGraph only as provider strategies can alter the steps to not comply with expectations",
graph.getClass().getSimpleName(), equalTo("TinkerGraph"));
assertEquals("There should be 3 top-level metrics.", 3, traversalMetrics.getMetrics().size());
Metrics metrics = traversalMetrics.getMetrics(0);
assertEquals(6, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertEquals(6, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
metrics = traversalMetrics.getMetrics(1);
assertEquals(1, metrics.getCount(TraversalMetrics.TRAVERSER_COUNT_ID).longValue());
assertEquals(1, metrics.getCount(TraversalMetrics.ELEMENT_COUNT_ID).longValue());
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());
}
}
@Test
@LoadGraphWith(MODERN)
public void g_V_whereXinXcreatedX_count_isX1XX_name_profile() {
final Traversal<Vertex, TraversalMetrics> traversal = get_g_V_whereXinXcreatedX_count_isX1XX_name_profile();
printTraversalForm(traversal);
final TraversalMetrics traversalMetrics = traversal.next();
validate_g_V_whereXinXcreatedX_count_isX1XX_name_profile(traversal, traversalMetrics);
}
@Test
@LoadGraphWith(MODERN)
public void g_V_whereXinXcreatedX_count_isX1XX_name_profileXmetricsX() {
final Traversal<Vertex, String> traversal = get_g_V_whereXinXcreatedX_count_isX1XX_name_profileXmetricsX();
printTraversalForm(traversal);
traversal.iterate();
final TraversalMetrics traversalMetrics = traversal.asAdmin().getSideEffects().get(METRICS_KEY);
validate_g_V_whereXinXcreatedX_count_isX1XX_name_profile(traversal, traversalMetrics);
}
/**
* ProfileStrategy callback test. Goal: ensure that a step that implements Profileable gets a callback to setMetrics
*/
// Setup a "mock" step to test the strategy
static public class MockStep extends FlatMapStep<Vertex, Vertex> implements Profiling {
public static boolean callbackCalled = false;
public MockStep(final Traversal.Admin traversal) {
super(traversal);
}
@Override
protected Iterator<Vertex> flatMap(final Traverser.Admin<Vertex> traverser) {
List<Vertex> l = new ArrayList<>();
l.add(traverser.get());
return l.iterator();
}
@Override
public void setMetrics(final MutableMetrics parentMetrics) {
if (parentMetrics != null) {
callbackCalled = true;
parentMetrics.setCount("bogusCount", 100);
}
}
}
@Test
@LoadGraphWith(MODERN)
public void testProfileStrategyCallback() {
final Traversal<Vertex, TraversalMetrics> t = get_g_V_out_out_profile();
MockStep mockStep = new MockStep(t.asAdmin());
t.asAdmin().addStep(3, mockStep);
TraversalMetrics traversalMetrics = t.next();
assertTrue(mockStep.callbackCalled);
if (!onGraphComputer(t.asAdmin())) {
assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue());
}
}
@Test
@LoadGraphWith(MODERN)
public void testProfileStrategyCallbackSideEffect() {
final Traversal<Vertex, Vertex> t = get_g_V_out_out_profileXmetricsX();
MockStep mockStep = new MockStep(t.asAdmin());
t.asAdmin().addStep(3, mockStep);
t.iterate();
assertTrue(mockStep.callbackCalled);
if (!onGraphComputer(t.asAdmin())) {
final TraversalMetrics traversalMetrics = t.asAdmin().getSideEffects().get(METRICS_KEY);
assertEquals(100, traversalMetrics.getMetrics(3).getCount("bogusCount").longValue());
}
}
@Test
@LoadGraphWith(MODERN)
public void g_V_matchXa_created_b__b_in_count_isXeqX1XXX_selectXa_bX_profile() {
final Traversal<Vertex, TraversalMetrics> traversal = get_g_V_matchXa_created_b__b_in_count_isXeqX1XXX_selectXa_bX_profile();
printTraversalForm(traversal);
traversal.iterate();
}
@Test
@LoadGraphWith(MODERN)
public void g_V_matchXa_created_b__b_in_count_isXeqX1XXX_selectXa_bX_profileXmetricsX() {
final Traversal<Vertex, Map<String, String>> traversal = get_g_V_matchXa_created_b__b_in_count_isXeqX1XXX_selectXa_bX_profileXmetricsX();
printTraversalForm(traversal);
traversal.iterate();
}
@Test
@LoadGraphWith(MODERN)
@IgnoreEngine(TraversalEngine.Type.STANDARD)
public void g_V_hasLabelXpersonX_pageRank_withXpropertyName_rankX_withXedges_bothEX_rank_profile() {
final Traversal<Vertex, TraversalMetrics> traversal = get_g_V_hasLabelXpersonX_pageRank_withXpropertyName_rankX_withXedges_bothEX_rank_profile();
//printTraversalForm(traversal);
try {
traversal.iterate();
fail("Should have tossed an exception because multi-OLAP is unsolvable");
} catch (Exception ex) {
assertTrue(ex instanceof VerificationException || ExceptionUtils.getRootCause(ex) instanceof VerificationException);
}
}
@Test
@LoadGraphWith(MODERN)
public void g_V_groupXmX_profile() {
final Traversal<Vertex, TraversalMetrics> traversal = get_g_V_groupXmX_profile();
printTraversalForm(traversal);
traversal.next();
assertFalse(traversal.hasNext());
}
private static boolean onGraphComputer(final Traversal.Admin<?, ?> traversal) {
return !TraversalHelper.getStepsOfClass(TraversalVertexProgramStep.class, TraversalHelper.getRootTraversal(traversal)).isEmpty();
}
/**
* Traversals
*/
public static class Traversals extends ProfileTest {
@Override
public Traversal<Vertex, TraversalMetrics> get_g_V_out_out_profile() {
return g.V().out().out().profile();
}
@Override
public Traversal<Vertex, TraversalMetrics> get_g_V_repeatXbothX_timesX3X_profile() {
return g.V().repeat(both()).times(3).profile();
}
@Override
public Traversal<Vertex, TraversalMetrics> get_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profile() {
return g.V().sideEffect(v -> {
try {
Thread.sleep(10);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}).sideEffect(v -> {
try {
Thread.sleep(5);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}).profile();
}
@Override
public Traversal<Vertex, TraversalMetrics> get_g_V_whereXinXcreatedX_count_isX1XX_name_profile() {
return g.V().where(__.in("created").count().is(1l)).<String>values("name").profile();
}
@Override
public Traversal<Vertex, TraversalMetrics> get_g_V_matchXa_created_b__b_in_count_isXeqX1XXX_selectXa_bX_profile() {
return g.V().match(__.as("a").out("created").as("b"), __.as("b").in().count().is(P.eq(1))).<String>select("a", "b").profile();
}
@Override
public Traversal<Vertex, Vertex> get_g_V_out_out_profileXmetricsX() {
return g.V().out().out().profile(METRICS_KEY);
}
@Override
public Traversal<Vertex, Vertex> get_g_V_repeatXbothX_timesX3X_profileXmetricsX() {
return g.V().repeat(both()).times(3).profile(METRICS_KEY);
}
@Override
public Traversal<Vertex, Vertex> get_g_V_sideEffectXThread_sleepX10XX_sideEffectXThread_sleepX5XX_profileXmetricsX() {
return g.V().sideEffect(v -> {
try {
Thread.sleep(10);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}).sideEffect(v -> {
try {
Thread.sleep(5);
} catch (final InterruptedException e) {
e.printStackTrace();
}
}).profile(METRICS_KEY);
}
@Override
public Traversal<Vertex, String> get_g_V_whereXinXcreatedX_count_isX1XX_name_profileXmetricsX() {
return g.V().where(__.in("created").count().is(1l)).<String>values("name").profile(METRICS_KEY);
}
@Override
public Traversal<Vertex, Map<String, String>> get_g_V_matchXa_created_b__b_in_count_isXeqX1XXX_selectXa_bX_profileXmetricsX() {
return g.V().match(__.as("a").out("created").as("b"), __.as("b").in().count().is(P.eq(1))).<String>select("a", "b").profile(METRICS_KEY);
}
@Override
public Traversal<Vertex, TraversalMetrics> get_g_V_hasLabelXpersonX_pageRank_withXpropertyName_rankX_withXedges_bothEX_rank_profile() {
return g.V().hasLabel("person").pageRank().with(PageRank.propertyName, "rank").with(PageRank.edges, __.bothE()).values("rank").profile();
}
@Override
public Traversal<Vertex, TraversalMetrics> get_g_V_groupXmX_profile() {
return g.V().group("m").profile();
}
}
}