Search in sources :

Example 16 with Scope

use of io.opentelemetry.context.Scope 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 17 with Scope

use of io.opentelemetry.context.Scope 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 18 with Scope

use of io.opentelemetry.context.Scope 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 19 with Scope

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

the class WALPerformanceEvaluation method run.

@Override
public int run(String[] args) throws Exception {
    Path rootRegionDir = null;
    int numThreads = 1;
    long numIterations = 1000000;
    int numFamilies = 1;
    int syncInterval = 0;
    boolean noSync = false;
    boolean verify = false;
    boolean verbose = false;
    boolean cleanup = true;
    boolean noclosefs = false;
    long roll = Long.MAX_VALUE;
    boolean compress = false;
    String cipher = null;
    int numRegions = 1;
    // Process command line args
    for (int i = 0; i < args.length; i++) {
        String cmd = args[i];
        try {
            if (cmd.equals("-threads")) {
                numThreads = Integer.parseInt(args[++i]);
            } else if (cmd.equals("-iterations")) {
                numIterations = Long.parseLong(args[++i]);
            } else if (cmd.equals("-path")) {
                rootRegionDir = new Path(args[++i]);
            } else if (cmd.equals("-families")) {
                numFamilies = Integer.parseInt(args[++i]);
            } else if (cmd.equals("-qualifiers")) {
                numQualifiers = Integer.parseInt(args[++i]);
            } else if (cmd.equals("-keySize")) {
                keySize = Integer.parseInt(args[++i]);
            } else if (cmd.equals("-valueSize")) {
                valueSize = Integer.parseInt(args[++i]);
            } else if (cmd.equals("-syncInterval")) {
                syncInterval = Integer.parseInt(args[++i]);
            } else if (cmd.equals("-nosync")) {
                noSync = true;
            } else if (cmd.equals("-verify")) {
                verify = true;
            } else if (cmd.equals("-verbose")) {
                verbose = true;
            } else if (cmd.equals("-nocleanup")) {
                cleanup = false;
            } else if (cmd.equals("-noclosefs")) {
                noclosefs = true;
            } else if (cmd.equals("-roll")) {
                roll = Long.parseLong(args[++i]);
            } else if (cmd.equals("-compress")) {
                compress = true;
            } else if (cmd.equals("-encryption")) {
                cipher = args[++i];
            } else if (cmd.equals("-regions")) {
                numRegions = Integer.parseInt(args[++i]);
            } else if (cmd.equals("-traceFreq")) {
                // keep it here for compatible
                System.err.println("-traceFreq is not supported any more");
            } else if (cmd.equals("-h")) {
                printUsageAndExit();
            } else if (cmd.equals("--help")) {
                printUsageAndExit();
            } else {
                System.err.println("UNEXPECTED: " + cmd);
                printUsageAndExit();
            }
        } catch (Exception e) {
            printUsageAndExit();
        }
    }
    if (compress) {
        Configuration conf = getConf();
        conf.setBoolean(HConstants.ENABLE_WAL_COMPRESSION, true);
    }
    if (cipher != null) {
        // Set up WAL for encryption
        Configuration conf = getConf();
        conf.set(HConstants.CRYPTO_KEYPROVIDER_CONF_KEY, KeyProviderForTesting.class.getName());
        conf.set(HConstants.CRYPTO_MASTERKEY_NAME_CONF_KEY, "hbase");
        conf.setClass("hbase.regionserver.hlog.reader.impl", SecureProtobufLogReader.class, WAL.Reader.class);
        conf.setClass("hbase.regionserver.hlog.writer.impl", SecureProtobufLogWriter.class, Writer.class);
        conf.setBoolean(HConstants.ENABLE_WAL_ENCRYPTION, true);
        conf.set(HConstants.CRYPTO_WAL_ALGORITHM_CONF_KEY, cipher);
    }
    if (numThreads < numRegions) {
        LOG.warn("Number of threads is less than the number of regions; some regions will sit idle.");
    }
    // Internal config. goes off number of threads; if more threads than handlers, stuff breaks.
    // In regionserver, number of handlers == number of threads.
    getConf().setInt(HConstants.REGION_SERVER_HANDLER_COUNT, numThreads);
    if (rootRegionDir == null) {
        TEST_UTIL = new HBaseTestingUtil(getConf());
        rootRegionDir = TEST_UTIL.getDataTestDirOnTestFS("WALPerformanceEvaluation");
    }
    // Run WAL Performance Evaluation
    // First set the fs from configs.  In case we are on hadoop1
    CommonFSUtils.setFsDefault(getConf(), CommonFSUtils.getRootDir(getConf()));
    FileSystem fs = FileSystem.get(getConf());
    LOG.info("FileSystem={}, rootDir={}", fs, rootRegionDir);
    Span span = TraceUtil.getGlobalTracer().spanBuilder("WALPerfEval").startSpan();
    try (Scope scope = span.makeCurrent()) {
        rootRegionDir = rootRegionDir.makeQualified(fs.getUri(), fs.getWorkingDirectory());
        cleanRegionRootDir(fs, rootRegionDir);
        CommonFSUtils.setRootDir(getConf(), rootRegionDir);
        final WALFactory wals = new WALFactory(getConf(), "wals");
        final HRegion[] regions = new HRegion[numRegions];
        final Runnable[] benchmarks = new Runnable[numRegions];
        final MockRegionServerServices mockServices = new MockRegionServerServices(getConf());
        final LogRoller roller = new LogRoller(mockServices);
        Threads.setDaemonThreadRunning(roller, "WALPerfEval.logRoller");
        try {
            for (int i = 0; i < numRegions; i++) {
                // Initialize Table Descriptor
                // a table per desired region means we can avoid carving up the key space
                final TableDescriptor htd = createHTableDescriptor(i, numFamilies);
                regions[i] = openRegion(fs, rootRegionDir, htd, wals, roll, roller);
                benchmarks[i] = new WALPutBenchmark(regions[i], htd, numIterations, noSync, syncInterval);
            }
            ConsoleReporter reporter = ConsoleReporter.forRegistry(metrics).outputTo(System.out).convertRatesTo(TimeUnit.SECONDS).filter(MetricFilter.ALL).build();
            reporter.start(30, TimeUnit.SECONDS);
            long putTime = runBenchmark(benchmarks, numThreads);
            logBenchmarkResult("Summary: threads=" + numThreads + ", iterations=" + numIterations + ", syncInterval=" + syncInterval, numIterations * numThreads, putTime);
            for (int i = 0; i < numRegions; i++) {
                if (regions[i] != null) {
                    closeRegion(regions[i]);
                    regions[i] = null;
                }
            }
            if (verify) {
                LOG.info("verifying written log entries.");
                Path dir = new Path(CommonFSUtils.getRootDir(getConf()), AbstractFSWALProvider.getWALDirectoryName("wals"));
                long editCount = 0;
                FileStatus[] fsss = fs.listStatus(dir);
                if (fsss.length == 0)
                    throw new IllegalStateException("No WAL found");
                for (FileStatus fss : fsss) {
                    Path p = fss.getPath();
                    if (!fs.exists(p))
                        throw new IllegalStateException(p.toString());
                    editCount += verify(wals, p, verbose);
                }
                long expected = numIterations * numThreads;
                if (editCount != expected) {
                    throw new IllegalStateException("Counted=" + editCount + ", expected=" + expected);
                }
            }
        } finally {
            mockServices.stop("test clean up.");
            for (int i = 0; i < numRegions; i++) {
                if (regions[i] != null) {
                    closeRegion(regions[i]);
                }
            }
            if (null != roller) {
                LOG.info("shutting down log roller.");
                roller.close();
            }
            wals.shutdown();
            // Remove the root dir for this test region
            if (cleanup)
                cleanRegionRootDir(fs, rootRegionDir);
        }
    } finally {
        span.end();
        // We may be called inside a test that wants to keep on using the fs.
        if (!noclosefs) {
            fs.close();
        }
    }
    return 0;
}
Also used : FileStatus(org.apache.hadoop.fs.FileStatus) Configuration(org.apache.hadoop.conf.Configuration) HBaseConfiguration(org.apache.hadoop.hbase.HBaseConfiguration) ConsoleReporter(com.codahale.metrics.ConsoleReporter) Span(io.opentelemetry.api.trace.Span) FileSystem(org.apache.hadoop.fs.FileSystem) Path(org.apache.hadoop.fs.Path) MockRegionServerServices(org.apache.hadoop.hbase.MockRegionServerServices) HBaseTestingUtil(org.apache.hadoop.hbase.HBaseTestingUtil) KeyProviderForTesting(org.apache.hadoop.hbase.io.crypto.KeyProviderForTesting) IOException(java.io.IOException) TableDescriptor(org.apache.hadoop.hbase.client.TableDescriptor) HRegion(org.apache.hadoop.hbase.regionserver.HRegion) Scope(io.opentelemetry.context.Scope) LogRoller(org.apache.hadoop.hbase.regionserver.LogRoller)

Example 20 with Scope

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

the class RecoverableZooKeeper method multi.

/**
 * Run multiple operations in a transactional manner. Retry before throwing exception
 */
public List<OpResult> multi(Iterable<Op> ops) throws KeeperException, InterruptedException {
    Span span = TraceUtil.getGlobalTracer().spanBuilder("RecoverableZookeeper.multi").startSpan();
    try (Scope scope = span.makeCurrent()) {
        RetryCounter retryCounter = retryCounterFactory.create();
        Iterable<Op> multiOps = prepareZKMulti(ops);
        while (true) {
            try {
                return checkZk().multi(multiOps);
            } catch (KeeperException e) {
                switch(e.code()) {
                    case CONNECTIONLOSS:
                    case OPERATIONTIMEOUT:
                    case REQUESTTIMEOUT:
                        retryOrThrow(retryCounter, e, "multi");
                        break;
                    default:
                        throw e;
                }
            }
            retryCounter.sleepUntilNextRetry();
        }
    } finally {
        span.end();
    }
}
Also used : Op(org.apache.zookeeper.Op) Scope(io.opentelemetry.context.Scope) RetryCounter(org.apache.hadoop.hbase.util.RetryCounter) Span(io.opentelemetry.api.trace.Span) KeeperException(org.apache.zookeeper.KeeperException)

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