Search in sources :

Example 1 with MultiQueriable

use of org.janusgraph.graphdb.tinkerpop.optimize.step.MultiQueriable in project janusgraph by JanusGraph.

the class JanusGraphMultiQueryStepTest method generateTestParameters.

private static Stream<Arguments> generateTestParameters() {
    Traversal.Admin mockedTraversal = mock(Traversal.Admin.class);
    when(mockedTraversal.getTraverserSetSupplier()).thenReturn(TraverserSet::new);
    MultiQueriable mqA = mock(MultiQueriable.class);
    MultiQueriable mqB = mock(MultiQueriable.class);
    List<MultiQueriable> emptyClientList = Collections.emptyList();
    List<MultiQueriable> singleClientList = Collections.singletonList(mqA);
    List<MultiQueriable> multiClientList = Arrays.asList(mqA, mqB);
    return Arrays.stream(new Arguments[] { arguments(mockedTraversal, true, emptyClientList), arguments(mockedTraversal, false, emptyClientList), arguments(mockedTraversal, true, singleClientList), arguments(mockedTraversal, false, singleClientList), arguments(mockedTraversal, true, multiClientList), arguments(mockedTraversal, false, multiClientList) });
}
Also used : MultiQueriable(org.janusgraph.graphdb.tinkerpop.optimize.step.MultiQueriable) Traversal(org.apache.tinkerpop.gremlin.process.traversal.Traversal) TraverserSet(org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet)

Example 2 with MultiQueriable

use of org.janusgraph.graphdb.tinkerpop.optimize.step.MultiQueriable in project janusgraph by JanusGraph.

the class JanusGraphMultiQueryStrategy method configureMultiQueriables.

/**
 * Looks for MultiQueriables in within the traversal and registers them as clients of their respective
 * JanusGraphMultiQuerySteps
 *
 * @param traversal The local traversal layer.
 */
private void configureMultiQueriables(final Admin<?, ?> traversal) {
    TraversalHelper.getStepsOfAssignableClass(MultiQueriable.class, traversal).forEach(multiQueriable -> {
        final List<Step> mqPositions = JanusGraphTraversalUtil.getAllMultiQueryPositionsForMultiQueriable(multiQueriable);
        // If one position is not legal, this means that the entire step can not use the multiQuery feature.
        for (Step mqPos : mqPositions) {
            if (!JanusGraphTraversalUtil.isLegalMultiQueryPosition(mqPos)) {
                return;
            }
        }
        // MultiQuery is applicable
        multiQueriable.setUseMultiQuery(true);
        for (Step mqPos : mqPositions) {
            final Optional<JanusGraphMultiQueryStep> multiQueryStep = JanusGraphTraversalUtil.getPreviousStepOfClass(JanusGraphMultiQueryStep.class, mqPos);
            multiQueryStep.ifPresent(mqs -> mqs.attachClient(multiQueriable));
        }
    });
}
Also used : MultiQueriable(org.janusgraph.graphdb.tinkerpop.optimize.step.MultiQueriable) JanusGraphMultiQueryStep(org.janusgraph.graphdb.tinkerpop.optimize.step.JanusGraphMultiQueryStep) NoOpBarrierStep(org.apache.tinkerpop.gremlin.process.traversal.step.map.NoOpBarrierStep) Step(org.apache.tinkerpop.gremlin.process.traversal.Step) JanusGraphMultiQueryStep(org.janusgraph.graphdb.tinkerpop.optimize.step.JanusGraphMultiQueryStep) DropStep(org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropStep)

Aggregations

MultiQueriable (org.janusgraph.graphdb.tinkerpop.optimize.step.MultiQueriable)2 Step (org.apache.tinkerpop.gremlin.process.traversal.Step)1 Traversal (org.apache.tinkerpop.gremlin.process.traversal.Traversal)1 DropStep (org.apache.tinkerpop.gremlin.process.traversal.step.filter.DropStep)1 NoOpBarrierStep (org.apache.tinkerpop.gremlin.process.traversal.step.map.NoOpBarrierStep)1 TraverserSet (org.apache.tinkerpop.gremlin.process.traversal.traverser.util.TraverserSet)1 JanusGraphMultiQueryStep (org.janusgraph.graphdb.tinkerpop.optimize.step.JanusGraphMultiQueryStep)1