Search in sources :

Example 21 with Span

use of io.opentelemetry.api.trace.Span in project hbase by apache.

the class IntegrationTestSendTraceRequests method doScans.

private void doScans(ExecutorService service, final LinkedBlockingQueue<Long> rks) {
    for (int i = 0; i < 100; i++) {
        Runnable runnable = new Runnable() {

            private final LinkedBlockingQueue<Long> rowKeyQueue = rks;

            @Override
            public void run() {
                ResultScanner rs = null;
                Span span = TraceUtil.getGlobalTracer().spanBuilder("Scan").startSpan();
                try (Scope scope = span.makeCurrent()) {
                    Table ht = util.getConnection().getTable(tableName);
                    Scan s = new Scan();
                    s.withStartRow(Bytes.toBytes(rowKeyQueue.take()));
                    s.setBatch(7);
                    rs = ht.getScanner(s);
                    // Something to keep the jvm from removing the loop.
                    long accum = 0;
                    for (int x = 0; x < 1000; x++) {
                        Result r = rs.next();
                        accum |= Bytes.toLong(r.getRow());
                    }
                    span.addEvent("Accum result = " + accum);
                    ht.close();
                    ht = null;
                } catch (IOException e) {
                    e.printStackTrace();
                    span.addEvent("exception", Attributes.of(AttributeKey.stringKey("exception"), e.getClass().getSimpleName()));
                } catch (Exception e) {
                } finally {
                    span.end();
                    if (rs != null) {
                        rs.close();
                    }
                }
            }
        };
        service.submit(runnable);
    }
}
Also used : ResultScanner(org.apache.hadoop.hbase.client.ResultScanner) Table(org.apache.hadoop.hbase.client.Table) Scope(io.opentelemetry.context.Scope) Scan(org.apache.hadoop.hbase.client.Scan) IOException(java.io.IOException) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Span(io.opentelemetry.api.trace.Span) IOException(java.io.IOException) Result(org.apache.hadoop.hbase.client.Result)

Example 22 with Span

use of io.opentelemetry.api.trace.Span in project hbase by apache.

the class FSHLog method closeWriter.

private void closeWriter(Writer writer, Path path, boolean syncCloseCall) throws IOException {
    Span span = Span.current();
    try {
        span.addEvent("closing writer");
        writer.close();
        span.addEvent("writer closed");
    } catch (IOException ioe) {
        int errors = closeErrorCount.incrementAndGet();
        boolean hasUnflushedEntries = isUnflushedEntries();
        if (syncCloseCall && (hasUnflushedEntries || (errors > this.closeErrorsTolerated))) {
            LOG.error("Close of WAL " + path + " failed. Cause=\"" + ioe.getMessage() + "\", errors=" + errors + ", hasUnflushedEntries=" + hasUnflushedEntries);
            throw ioe;
        }
        LOG.warn("Riding over failed WAL close of " + path + "; THIS FILE WAS NOT CLOSED BUT ALL EDITS SYNCED SO SHOULD BE OK", ioe);
    } finally {
        inflightWALClosures.remove(path.getName());
    }
}
Also used : IOException(java.io.IOException) Span(io.opentelemetry.api.trace.Span)

Example 23 with Span

use of io.opentelemetry.api.trace.Span in project druid by druid-io.

the class OpenTelemetryEmitter method emitQueryTimeEvent.

private void emitQueryTimeEvent(ServiceMetricEvent event) {
    Context opentelemetryContext = propagator.extract(Context.current(), event, DRUID_CONTEXT_TEXT_MAP_GETTER);
    try (Scope scope = opentelemetryContext.makeCurrent()) {
        DateTime endTime = event.getCreatedTime();
        DateTime startTime = endTime.minusMillis(event.getValue().intValue());
        Span span = tracer.spanBuilder(event.getService()).setStartTimestamp(startTime.getMillis(), TimeUnit.MILLISECONDS).startSpan();
        getContext(event).entrySet().stream().filter(entry -> entry.getValue() != null).filter(entry -> !TRACEPARENT_PROPAGATION_FIELDS.contains(entry.getKey())).forEach(entry -> span.setAttribute(entry.getKey(), entry.getValue().toString()));
        Object status = event.getUserDims().get("success");
        if (status == null) {
            span.setStatus(StatusCode.UNSET);
        } else if (status.toString().equals("true")) {
            span.setStatus(StatusCode.OK);
        } else {
            span.setStatus(StatusCode.ERROR);
        }
        span.end(endTime.getMillis(), TimeUnit.MILLISECONDS);
    }
}
Also used : Context(io.opentelemetry.context.Context) Logger(org.apache.druid.java.util.common.logger.Logger) Context(io.opentelemetry.context.Context) Arrays(java.util.Arrays) Span(io.opentelemetry.api.trace.Span) StatusCode(io.opentelemetry.api.trace.StatusCode) Scope(io.opentelemetry.context.Scope) Emitter(org.apache.druid.java.util.emitter.core.Emitter) OpenTelemetry(io.opentelemetry.api.OpenTelemetry) ServiceMetricEvent(org.apache.druid.java.util.emitter.service.ServiceMetricEvent) DateTime(org.joda.time.DateTime) Tracer(io.opentelemetry.api.trace.Tracer) HashSet(java.util.HashSet) TimeUnit(java.util.concurrent.TimeUnit) TextMapPropagator(io.opentelemetry.context.propagation.TextMapPropagator) Event(org.apache.druid.java.util.emitter.core.Event) Map(java.util.Map) Collections(java.util.Collections) Scope(io.opentelemetry.context.Scope) Span(io.opentelemetry.api.trace.Span) DateTime(org.joda.time.DateTime)

Example 24 with Span

use of io.opentelemetry.api.trace.Span in project hbase by apache.

the class AsyncRegionLocator method tracedLocationFuture.

private <T> CompletableFuture<T> tracedLocationFuture(Supplier<CompletableFuture<T>> action, Function<T, List<String>> getRegionNames, Supplier<Span> spanSupplier) {
    final Span span = spanSupplier.get();
    try (Scope scope = span.makeCurrent()) {
        CompletableFuture<T> future = action.get();
        FutureUtils.addListener(future, (resp, error) -> {
            if (error != null) {
                TraceUtil.setError(span, error);
            } else {
                List<String> regionNames = getRegionNames.apply(resp);
                if (!regionNames.isEmpty()) {
                    span.setAttribute(REGION_NAMES_KEY, regionNames);
                }
                span.setStatus(StatusCode.OK);
            }
            span.end();
        });
        return future;
    }
}
Also used : Scope(io.opentelemetry.context.Scope) Span(io.opentelemetry.api.trace.Span)

Example 25 with Span

use of io.opentelemetry.api.trace.Span in project hbase by apache.

the class AsyncRegionLocator method clearCache.

void clearCache() {
    Supplier<Span> supplier = new ConnectionSpanBuilder(conn).setName("AsyncRegionLocator.clearCache");
    TraceUtil.trace(() -> {
        metaRegionLocator.clearCache();
        nonMetaRegionLocator.clearCache();
    }, supplier);
}
Also used : ConnectionSpanBuilder(org.apache.hadoop.hbase.client.trace.ConnectionSpanBuilder) Span(io.opentelemetry.api.trace.Span)

Aggregations

Span (io.opentelemetry.api.trace.Span)28 Scope (io.opentelemetry.context.Scope)21 IOException (java.io.IOException)7 LinkedBlockingQueue (java.util.concurrent.LinkedBlockingQueue)3 RetryCounter (org.apache.hadoop.hbase.util.RetryCounter)3 KeeperException (org.apache.zookeeper.KeeperException)3 Context (io.opentelemetry.context.Context)2 TextMapGetter (io.opentelemetry.context.propagation.TextMapGetter)2 InetSocketAddress (java.net.InetSocketAddress)2 CompletableFuture (java.util.concurrent.CompletableFuture)2 GET (javax.ws.rs.GET)2 CellScanner (org.apache.hadoop.hbase.CellScanner)2 Result (org.apache.hadoop.hbase.client.Result)2 Table (org.apache.hadoop.hbase.client.Table)2 Message (org.apache.hbase.thirdparty.com.google.protobuf.Message)2 ConsoleReporter (com.codahale.metrics.ConsoleReporter)1 ObjectMapper (com.fasterxml.jackson.databind.ObjectMapper)1 OpenTelemetry (io.opentelemetry.api.OpenTelemetry)1 SpanBuilder (io.opentelemetry.api.trace.SpanBuilder)1 StatusCode (io.opentelemetry.api.trace.StatusCode)1