Search in sources :

Example 26 with SpanId

use of io.opencensus.trace.SpanId in project ignite by apache.

the class OpenCensusSqlNativeTracingTest method testSelectQueryUserThreadSpanNotAffected.

/**
 * Tests that tracing of multiple SELECT queries produces separate span tree for each query and does not affect
 * user thread {@link MTC#span()} value during execution and after it.
 */
@Test
public void testSelectQueryUserThreadSpanNotAffected() throws Exception {
    String prsnTable = createTableAndPopulate(Person.class, PARTITIONED, 1);
    String orgTable = createTableAndPopulate(Organization.class, PARTITIONED, 1);
    try (FieldsQueryCursor<List<?>> prsnQryCursor = reducer().context().query().querySqlFields(new SqlFieldsQuery("SELECT * FROM " + prsnTable), false);
        FieldsQueryCursor<List<?>> orgQryCursor = reducer().context().query().querySqlFields(new SqlFieldsQuery("SELECT * FROM " + orgTable), false)) {
        Iterator<List<?>> prsnQryIter = prsnQryCursor.iterator();
        Iterator<List<?>> orgQryIter = orgQryCursor.iterator();
        while (prsnQryIter.hasNext() && orgQryIter.hasNext()) {
            assertEquals(NoopSpan.INSTANCE, MTC.span());
            prsnQryIter.next();
            assertEquals(NoopSpan.INSTANCE, MTC.span());
            orgQryIter.next();
            assertEquals(NoopSpan.INSTANCE, MTC.span());
        }
    }
    assertEquals(NoopSpan.INSTANCE, MTC.span());
    handler().flush();
    checkDroppedSpans();
    List<SpanId> rootSpans = findRootSpans(SQL_QRY);
    assertEquals(2, rootSpans.size());
    for (SpanId rootSpan : rootSpans) checkBasicSelectQuerySpanTree(rootSpan, TEST_TABLE_POPULATION);
}
Also used : List(java.util.List) SqlFieldsQuery(org.apache.ignite.cache.query.SqlFieldsQuery) SpanId(io.opencensus.trace.SpanId) Test(org.junit.Test)

Example 27 with SpanId

use of io.opencensus.trace.SpanId in project instrumentation-java by census-instrumentation.

the class CloudTraceFormat method extract.

@Override
public <C> /*>>> extends @NonNull Object*/
SpanContext extract(C carrier, Getter<C> getter) throws SpanContextParseException {
    checkNotNull(carrier, "carrier");
    checkNotNull(getter, "getter");
    try {
        String headerStr = getter.get(carrier, HEADER_NAME);
        if (headerStr == null || headerStr.length() < MIN_HEADER_SIZE) {
            throw new SpanContextParseException("Missing or too short header: " + HEADER_NAME);
        }
        checkArgument(headerStr.charAt(TRACE_ID_SIZE) == SPAN_ID_DELIMITER, "Invalid TRACE_ID size");
        TraceId traceId = TraceId.fromLowerBase16(headerStr.subSequence(0, TRACE_ID_SIZE));
        int traceOptionsPos = headerStr.indexOf(TRACE_OPTION_DELIMITER, TRACE_ID_SIZE);
        CharSequence spanIdStr = headerStr.subSequence(SPAN_ID_START_POS, traceOptionsPos < 0 ? headerStr.length() : traceOptionsPos);
        SpanId spanId = longToSpanId(UnsignedLongs.parseUnsignedLong(spanIdStr.toString(), 10));
        TraceOptions traceOptions = OPTIONS_NOT_SAMPLED;
        if (traceOptionsPos > 0) {
            String traceOptionsStr = headerStr.substring(traceOptionsPos + TRACE_OPTION_DELIMITER_SIZE);
            if ((UnsignedInts.parseUnsignedInt(traceOptionsStr, 10) & CLOUD_TRACE_IS_SAMPLED) != 0) {
                traceOptions = OPTIONS_SAMPLED;
            }
        }
        return SpanContext.create(traceId, spanId, traceOptions, TRACESTATE_DEFAULT);
    } catch (IllegalArgumentException e) {
        throw new SpanContextParseException("Invalid input", e);
    }
}
Also used : SpanContextParseException(io.opencensus.trace.propagation.SpanContextParseException) TraceId(io.opencensus.trace.TraceId) TraceOptions(io.opencensus.trace.TraceOptions) SpanId(io.opencensus.trace.SpanId)

Example 28 with SpanId

use of io.opencensus.trace.SpanId in project instrumentation-java by census-instrumentation.

the class CloudTraceFormatTest method parseWithShortSpanIdAndSamplingShouldSucceed.

@Test
public void parseWithShortSpanIdAndSamplingShouldSucceed() throws SpanContextParseException {
    final String spanId = "1";
    ByteBuffer buffer = ByteBuffer.allocate(SpanId.SIZE);
    buffer.putLong(Long.parseLong(spanId));
    SpanId expectedSpanId = SpanId.fromBytes(buffer.array());
    parseSuccess(constructHeader(TRACE_ID_BASE16, spanId, SAMPLED), SpanContext.create(TRACE_ID, expectedSpanId, TRACE_OPTIONS_SAMPLED));
}
Also used : ByteBuffer(java.nio.ByteBuffer) SpanId(io.opencensus.trace.SpanId) Test(org.junit.Test)

Example 29 with SpanId

use of io.opencensus.trace.SpanId in project instrumentation-java by census-instrumentation.

the class SpanBuilderImpl method startSpanInternal.

private Span startSpanInternal(@Nullable SpanContext parentContext, @Nullable Boolean hasRemoteParent, String name, @Nullable Sampler sampler, List<Span> parentLinks, @Nullable Boolean recordEvents, @Nullable Kind kind, @Nullable Span parentSpan) {
    TraceParams activeTraceParams = options.traceConfig.getActiveTraceParams();
    Random random = options.randomHandler.current();
    TraceId traceId;
    SpanId spanId = SpanId.generateRandomId(random);
    SpanId parentSpanId = null;
    // TODO(bdrutu): Handle tracestate correctly not just propagate.
    Tracestate tracestate = TRACESTATE_DEFAULT;
    if (parentContext == null || !parentContext.isValid()) {
        // New root span.
        traceId = TraceId.generateRandomId(random);
        // This is a root span so no remote or local parent.
        hasRemoteParent = null;
    } else {
        // New child span.
        traceId = parentContext.getTraceId();
        parentSpanId = parentContext.getSpanId();
        tracestate = parentContext.getTracestate();
    }
    TraceOptions traceOptions = makeSamplingDecision(parentContext, hasRemoteParent, name, sampler, parentLinks, traceId, spanId, activeTraceParams) ? SAMPLED_TRACE_OPTIONS : NOT_SAMPLED_TRACE_OPTIONS;
    if (traceOptions.isSampled() || Boolean.TRUE.equals(recordEvents)) {
        // Pass the timestamp converter from the parent to ensure that the recorded events are in
        // the right order. Implementation uses System.nanoTime() which is monotonically increasing.
        TimestampConverter timestampConverter = null;
        if (parentSpan instanceof RecordEventsSpanImpl) {
            RecordEventsSpanImpl parentRecordEventsSpan = (RecordEventsSpanImpl) parentSpan;
            timestampConverter = parentRecordEventsSpan.getTimestampConverter();
            parentRecordEventsSpan.addChild();
        }
        Span span = RecordEventsSpanImpl.startSpan(SpanContext.create(traceId, spanId, traceOptions, tracestate), name, kind, parentSpanId, hasRemoteParent, activeTraceParams, options.startEndHandler, timestampConverter, options.clock);
        linkSpans(span, parentLinks);
        return span;
    } else {
        return NoRecordEventsSpanImpl.create(SpanContext.create(traceId, spanId, traceOptions, tracestate));
    }
}
Also used : Random(java.util.Random) TimestampConverter(io.opencensus.implcore.internal.TimestampConverter) TraceId(io.opencensus.trace.TraceId) TraceOptions(io.opencensus.trace.TraceOptions) TraceParams(io.opencensus.trace.config.TraceParams) Tracestate(io.opencensus.trace.Tracestate) Span(io.opencensus.trace.Span) SpanId(io.opencensus.trace.SpanId)

Example 30 with SpanId

use of io.opencensus.trace.SpanId in project instrumentation-java by census-instrumentation.

the class B3Format method extract.

@Override
public <C> /*>>> extends @NonNull Object*/
SpanContext extract(C carrier, Getter<C> getter) throws SpanContextParseException {
    checkNotNull(carrier, "carrier");
    checkNotNull(getter, "getter");
    try {
        TraceId traceId;
        String traceIdStr = getter.get(carrier, X_B3_TRACE_ID);
        if (traceIdStr != null) {
            if (traceIdStr.length() == TraceId.SIZE) {
                // This is an 8-byte traceID.
                traceIdStr = UPPER_TRACE_ID + traceIdStr;
            }
            traceId = TraceId.fromLowerBase16(traceIdStr);
        } else {
            throw new SpanContextParseException("Missing X_B3_TRACE_ID.");
        }
        SpanId spanId;
        String spanIdStr = getter.get(carrier, X_B3_SPAN_ID);
        if (spanIdStr != null) {
            spanId = SpanId.fromLowerBase16(spanIdStr);
        } else {
            throw new SpanContextParseException("Missing X_B3_SPAN_ID.");
        }
        TraceOptions traceOptions = TraceOptions.DEFAULT;
        if (SAMPLED_VALUE.equals(getter.get(carrier, X_B3_SAMPLED)) || FLAGS_VALUE.equals(getter.get(carrier, X_B3_FLAGS))) {
            traceOptions = TraceOptions.builder().setIsSampled(true).build();
        }
        return SpanContext.create(traceId, spanId, traceOptions, TRACESTATE_DEFAULT);
    } catch (IllegalArgumentException e) {
        throw new SpanContextParseException("Invalid input.", e);
    }
}
Also used : SpanContextParseException(io.opencensus.trace.propagation.SpanContextParseException) TraceId(io.opencensus.trace.TraceId) TraceOptions(io.opencensus.trace.TraceOptions) SpanId(io.opencensus.trace.SpanId)

Aggregations

SpanId (io.opencensus.trace.SpanId)31 Test (org.junit.Test)21 IgniteEx (org.apache.ignite.internal.IgniteEx)14 Transaction (org.apache.ignite.transactions.Transaction)10 TraceId (io.opencensus.trace.TraceId)6 TracingConfigurationParameters (org.apache.ignite.spi.tracing.TracingConfigurationParameters)6 TraceOptions (io.opencensus.trace.TraceOptions)5 TracingConfigurationCoordinates (org.apache.ignite.spi.tracing.TracingConfigurationCoordinates)5 SAMPLING_RATE_ALWAYS (org.apache.ignite.spi.tracing.TracingConfigurationParameters.SAMPLING_RATE_ALWAYS)5 SpanData (io.opencensus.trace.export.SpanData)4 SpanContextParseException (io.opencensus.trace.propagation.SpanContextParseException)4 Arrays (java.util.Arrays)4 List (java.util.List)4 Set (java.util.Set)4 Collectors (java.util.stream.Collectors)4 SpanType (org.apache.ignite.internal.processors.tracing.SpanType)4 TracingSpi (org.apache.ignite.spi.tracing.TracingSpi)4 OpenCensusTracingSpi (org.apache.ignite.spi.tracing.opencensus.OpenCensusTracingSpi)4 Timestamp (io.opencensus.common.Timestamp)3 SpanContext (io.opencensus.trace.SpanContext)3