@Override public void setResultSize(long size) { metrics.incrementCount(TraversalMetrics.ELEMENT_COUNT_ID,size); } }
@Override public void startTimer() { metrics.start(); }
@Override public void stopTimer() { metrics.stop(); }
private static void verifyMetrics(Metrics metric, boolean fromCache, boolean multiQuery) { assertTrue(metric.getDuration(TimeUnit.MICROSECONDS) > 0); assertTrue(metric.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > 0); String hasMultiQuery = (String) metric.getAnnotation(QueryProfiler.MULTIQUERY_ANNOTATION); assertTrue(multiQuery?hasMultiQuery.equalsIgnoreCase("true"):hasMultiQuery==null); for (Metrics submetric : metric.getNested()) { assertTrue(submetric.getDuration(TimeUnit.MICROSECONDS) > 0); switch (submetric.getName()) { case "optimization": assertNull(submetric.getCount(TraversalMetrics.ELEMENT_COUNT_ID)); break; case "backend-query": if (fromCache) assertFalse("Should not execute backend-queries when cached",true); assertTrue(submetric.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > 0); break; default: assertFalse("Unrecognized nested query: " + submetric.getName(),true); } } }
private static void unfoldLocalTraversal(final Traversal.Admin<?, ?> traversal, LocalStep<?,?> localStep, Traversal.Admin localTraversal, MultiQueriable vstep, boolean useMultiQuery) { assert localTraversal.asAdmin().getSteps().size() > 0; if (localTraversal.asAdmin().getSteps().size() == 1) { //Can replace the entire localStep by the vertex step in the outer traversal assert localTraversal.getStartStep() == vstep; vstep.setTraversal(traversal); TraversalHelper.replaceStep(localStep, vstep, traversal); if (useMultiQuery) { vstep.setUseMultiQuery(true); } } }
@Override public QueryProfiler addNested(String groupName) { //Flatten out AND/OR nesting if (groupName.equals(AND_QUERY) || groupName.equals(OR_QUERY)) return this; int nextId = (subMetricCounter++); MutableMetrics nested = new MutableMetrics(metrics.getId()+"."+groupName+"_"+nextId,groupName); metrics.addNested(nested); return new TP3ProfileWrapper(nested); }
static boolean validJanusGraphHas(HasContainer has) { if (has.getPredicate() instanceof ConnectiveP) { final List<? extends P<?>> predicates = ((ConnectiveP<?>) has.getPredicate()).getPredicates(); return predicates.stream().allMatch(p-> validJanusGraphHas(new HasContainer(has.getKey(), p))); } else { return JanusGraphPredicate.Converter.supports(has.getBiPredicate()); } }
static List<HasContainer> splitAndP(final List<HasContainer> hasContainers, final Iterable<HasContainer> has) { has.forEach(hasContainer -> { if (hasContainer.getPredicate() instanceof AndP) { for (final P<?> predicate : ((AndP<?>) hasContainer.getPredicate()).getPredicates()) { hasContainers.add(new HasContainer(hasContainer.getKey(), predicate)); } } else hasContainers.add(hasContainer); }); return hasContainers; }
private <V> V executeRead(Callable<V> exe) throws JanusGraphException { try { return BackendOperation.execute(exe, maxReadTime); } catch (JanusGraphException e) { // support traversal interruption // TODO: Refactor to allow direct propagation of underlying interrupt exception if (Thread.interrupted()) throw new TraversalInterruptedException(); throw e; } }
public static TitanTransaction getTx(Traversal.Admin<?, ?> traversal) { TitanTransaction tx = null; Optional<Graph> optGraph = TraversalHelper.getRootTraversal(traversal.asAdmin()).getGraph(); if (traversal instanceof FulgoraElementTraversal) { tx = (TitanTransaction) optGraph.get(); } else { if (!optGraph.isPresent()) throw new IllegalArgumentException("Traversal is not bound to a graph: " + traversal); Graph graph = optGraph.get(); if (graph instanceof TitanTransaction) tx = (TitanTransaction) graph; else if (graph instanceof TitanBlueprintsGraph) tx = ((TitanBlueprintsGraph) graph).getCurrentThreadTx(); else throw new IllegalArgumentException("Traversal is not bound to a Titan Graph, but: " + graph); } if (tx == null) throw new IllegalArgumentException("Not a valid start step for a Titan traversal: " + traversal); if (tx.isOpen()) return tx; else return ((StandardTitanTx) tx).getNextTx(); }
@Override public QueryProfiler setAnnotation(String key, Object value) { Preconditions.checkArgument(key != null && value != null, "Key and value must be not null"); if (!(value instanceof String) && !(value instanceof Number)) value = value.toString(); metrics.setAnnotation(key,value); return this; }
private static void verifyMetrics(Metrics metric, boolean fromCache, boolean multiQuery) { assertTrue(metric.getDuration(TimeUnit.MICROSECONDS) > 0); assertTrue(metric.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > 0); String hasMultiQuery = (String) metric.getAnnotation(QueryProfiler.MULTIQUERY_ANNOTATION); assertTrue(multiQuery ? hasMultiQuery.equalsIgnoreCase("true") : hasMultiQuery == null); for (Metrics subMetric : metric.getNested()) { assertTrue(subMetric.getDuration(TimeUnit.MICROSECONDS) > 0); switch (subMetric.getName()) { case "optimization": assertNull(subMetric.getCount(TraversalMetrics.ELEMENT_COUNT_ID)); break; case "backend-query": if (fromCache) assertFalse("Should not execute backend-queries when cached", true); assertTrue(subMetric.getCount(TraversalMetrics.ELEMENT_COUNT_ID) > 0); break; default: assertFalse("Unrecognized nested query: " + subMetric.getName(), true); } } }
private static void unfoldLocalTraversal(final Traversal.Admin<?, ?> traversal, LocalStep<?,?> localStep, Traversal.Admin localTraversal, MultiQueriable vertexStep, boolean useMultiQuery) { assert localTraversal.asAdmin().getSteps().size() > 0; if (localTraversal.asAdmin().getSteps().size() == 1) { //Can replace the entire localStep by the vertex step in the outer traversal assert localTraversal.getStartStep() == vertexStep; vertexStep.setTraversal(traversal); TraversalHelper.replaceStep(localStep, vertexStep, traversal); if (useMultiQuery && !(isChildOf(vertexStep, MULTIQUERY_INCOMPATIBLE_STEPS))) { vertexStep.setUseMultiQuery(true); } } }
@Override public QueryProfiler addNested(String groupName) { //Flatten out AND/OR nesting if (groupName.equals(AND_QUERY) || groupName.equals(OR_QUERY)) return this; int nextId = (subMetricCounter++); MutableMetrics nested = new MutableMetrics(metrics.getId()+"."+groupName+"_"+nextId,groupName); metrics.addNested(nested); return new TP3ProfileWrapper(nested); }
public static List<Object> convert(final ConnectiveP<?> predicate, final ConnectiveJanusPredicate connectivePredicate) { final List<Object> toReturn = new ArrayList<>(); for (final P<?> p : predicate.getPredicates()){ if (p instanceof ConnectiveP) { final ConnectiveJanusPredicate subPredicate = instanceConnectiveJanusPredicate(p); toReturn.add(convert((ConnectiveP<?>)p, subPredicate)); connectivePredicate.add(subPredicate); } else { connectivePredicate.add(Converter.convert(p.getBiPredicate())); toReturn.add(p.getValue()); } } return toReturn; } }
@Override public void setResultSize(long size) { metrics.incrementCount(TraversalMetrics.ELEMENT_COUNT_ID,size); } }
@Override public void startTimer() { metrics.start(); }
@Override public void stopTimer() { metrics.stop(); }
@Override public QueryProfiler setAnnotation(String key, Object value) { Preconditions.checkArgument(key != null && value != null, "Key and value must be not null"); if (!(value instanceof String) && !(value instanceof Number)) value = value.toString(); metrics.setAnnotation(key,value); return this; }
@Override public void write(Kryo kryo, Output output, P p) { output.writeString( p instanceof ConnectiveP ? (p instanceof AndP ? "and" : "or") : p.getBiPredicate().toString()); if (p instanceof ConnectiveP || p.getValue() instanceof Collection) { output.writeByte((byte) 0); final Collection<?> coll = p instanceof ConnectiveP ? ((ConnectiveP<?>) p).getPredicates() : (Collection) p.getValue(); output.writeInt(coll.size()); coll.forEach(v -> kryo.writeClassAndObject(output, v)); } else { output.writeByte((byte) 1); kryo.writeClassAndObject(output, p.getValue()); } }