Search in sources :

Example 6 with Scope

use of io.opentelemetry.context.Scope in project hbase by apache.

the class IntegrationTestSendTraceRequests method insertData.

private LinkedBlockingQueue<Long> insertData() throws IOException, InterruptedException {
    LinkedBlockingQueue<Long> rowKeys = new LinkedBlockingQueue<>(25000);
    BufferedMutator ht = util.getConnection().getBufferedMutator(this.tableName);
    byte[] value = new byte[300];
    for (int x = 0; x < 5000; x++) {
        Span span = TraceUtil.getGlobalTracer().spanBuilder("insertData").startSpan();
        try (Scope scope = span.makeCurrent()) {
            for (int i = 0; i < 5; i++) {
                long rk = random.nextLong();
                rowKeys.add(rk);
                Put p = new Put(Bytes.toBytes(rk));
                for (int y = 0; y < 10; y++) {
                    random.nextBytes(value);
                    p.addColumn(familyName, Bytes.toBytes(random.nextLong()), value);
                }
                ht.mutate(p);
            }
            if ((x % 1000) == 0) {
                admin.flush(tableName);
            }
        } finally {
            span.end();
        }
    }
    admin.flush(tableName);
    return rowKeys;
}
Also used : Scope(io.opentelemetry.context.Scope) BufferedMutator(org.apache.hadoop.hbase.client.BufferedMutator) LinkedBlockingQueue(java.util.concurrent.LinkedBlockingQueue) Span(io.opentelemetry.api.trace.Span) Put(org.apache.hadoop.hbase.client.Put)

Example 7 with Scope

use of io.opentelemetry.context.Scope in project hbase by apache.

the class RecoverableZooKeeper method setData.

/**
 * setData is NOT an idempotent operation. Retry may cause BadVersion Exception
 * Adding an identifier field into the data to check whether
 * badversion is caused by the result of previous correctly setData
 * @return Stat instance
 */
public Stat setData(String path, byte[] data, int version) throws KeeperException, InterruptedException {
    Span span = TraceUtil.getGlobalTracer().spanBuilder("RecoverableZookeeper.setData").startSpan();
    try (Scope scope = span.makeCurrent()) {
        RetryCounter retryCounter = retryCounterFactory.create();
        byte[] newData = ZKMetadata.appendMetaData(id, data);
        boolean isRetry = false;
        while (true) {
            try {
                return checkZk().setData(path, newData, version);
            } catch (KeeperException e) {
                switch(e.code()) {
                    case CONNECTIONLOSS:
                    case OPERATIONTIMEOUT:
                    case REQUESTTIMEOUT:
                        retryOrThrow(retryCounter, e, "setData");
                        break;
                    case BADVERSION:
                        if (isRetry) {
                            // try to verify whether the previous setData success or not
                            try {
                                Stat stat = new Stat();
                                byte[] revData = checkZk().getData(path, false, stat);
                                if (Bytes.compareTo(revData, newData) == 0) {
                                    // the bad version is caused by previous successful setData
                                    return stat;
                                }
                            } catch (KeeperException keeperException) {
                                // the ZK is not reliable at this moment. just throwing exception
                                throw keeperException;
                            }
                        }
                    // throw other exceptions and verified bad version exceptions
                    default:
                        throw e;
                }
            }
            retryCounter.sleepUntilNextRetry();
            isRetry = true;
        }
    } finally {
        span.end();
    }
}
Also used : Stat(org.apache.zookeeper.data.Stat) Scope(io.opentelemetry.context.Scope) RetryCounter(org.apache.hadoop.hbase.util.RetryCounter) Span(io.opentelemetry.api.trace.Span) KeeperException(org.apache.zookeeper.KeeperException)

Example 8 with Scope

use of io.opentelemetry.context.Scope in project hbase by apache.

the class TraceUtil method tracedFuture.

/**
 * Trace an asynchronous operation for a table.
 */
public static <T> CompletableFuture<T> tracedFuture(Supplier<CompletableFuture<T>> action, Supplier<Span> spanSupplier) {
    Span span = spanSupplier.get();
    try (Scope scope = span.makeCurrent()) {
        CompletableFuture<T> future = action.get();
        endSpan(future, span);
        return future;
    }
}
Also used : Scope(io.opentelemetry.context.Scope) Span(io.opentelemetry.api.trace.Span)

Example 9 with Scope

use of io.opentelemetry.context.Scope in project hbase by apache.

the class TraceUtil method trace.

public static <T> T trace(Supplier<T> action, String spanName) {
    Span span = createSpan(spanName);
    try (Scope scope = span.makeCurrent()) {
        T ret = action.get();
        span.setStatus(StatusCode.OK);
        return ret;
    } catch (Throwable e) {
        setError(span, e);
        throw e;
    } finally {
        span.end();
    }
}
Also used : Scope(io.opentelemetry.context.Scope) Span(io.opentelemetry.api.trace.Span)

Example 10 with Scope

use of io.opentelemetry.context.Scope in project hbase by apache.

the class TraceUtil method tracedFuture.

/**
 * Trace an asynchronous operation.
 */
public static <T> CompletableFuture<T> tracedFuture(Supplier<CompletableFuture<T>> action, String spanName) {
    Span span = createSpan(spanName);
    try (Scope scope = span.makeCurrent()) {
        CompletableFuture<T> future = action.get();
        endSpan(future, span);
        return future;
    }
}
Also used : Scope(io.opentelemetry.context.Scope) Span(io.opentelemetry.api.trace.Span)

Aggregations

Span (io.opentelemetry.api.trace.Span)21 Scope (io.opentelemetry.context.Scope)21 IOException (java.io.IOException)6 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 InetSocketAddress (java.net.InetSocketAddress)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 OpenTelemetry (io.opentelemetry.api.OpenTelemetry)1 StatusCode (io.opentelemetry.api.trace.StatusCode)1 Tracer (io.opentelemetry.api.trace.Tracer)1 TextMapGetter (io.opentelemetry.context.propagation.TextMapGetter)1 TextMapPropagator (io.opentelemetry.context.propagation.TextMapPropagator)1 ClosedChannelException (java.nio.channels.ClosedChannelException)1 Arrays (java.util.Arrays)1