@SuppressWarnings("deprecation") private static Span createContinuedSpan(Span span, /*@Nullable*/ Span saved) { if (saved == null && span.getSavedSpan() != null) { saved = span.getSavedSpan(); } return new Span(span, saved); }
@Override @javax.annotation.Nullable public Span detach(/*@Nullable*/ Span span) { if (span == null) { return null; } Span current = OpenCensusSleuthSpanContextHolder.getCurrentSpan(); if (current == null) { if (log.isTraceEnabled()) { log.trace( "Span in the context is null so something has already detached the span. " + "Won't do anything about it"); } return null; } if (!span.equals(current)) { ExceptionUtils.warn( "Tried to detach trace span but " + "it is not the current span: " + span + ". You may have forgotten to close or detach " + current); } else { OpenCensusSleuthSpanContextHolder.removeCurrentSpan(); } return span.getSavedSpan(); }
if(span.getSavedSpan()!=null && span.getSavedSpan().tags()!=null){ for (Entry<String, String> stringStringEntry : span.getSavedSpan().tags().entrySet()) { setHeader(request, stringStringEntry.getKey(), stringStringEntry.getValue());
private static void assertCurrentSpanIs(Span span) { assertThat(tracer.getCurrentSpan()).isEqualTo(span); assertThat(tracer.getCurrentSpan().getSavedSpan()).isEqualTo(span.getSavedSpan()); assertThat(OpenCensusSleuthSpanContextHolder.getCurrentSpan()).isEqualTo(span); assertThat(OpenCensusSleuthSpanContextHolder.getCurrentSpan().getSavedSpan()) .isEqualTo(span.getSavedSpan()); }
protected void attachTraceInfo(Tracer tracer, Span span, final Request request) { if (span == null) { setHeader(request, Span.SAMPLED_NAME, Span.SPAN_NOT_SAMPLED); return; } setHeader(request, TraceRequestAttributes.HANDLED_SPAN_REQUEST_ATTR, "true"); setHeader(request, Span.SPAN_ID_NAME, Span.idToHex(span.getSpanId())); setHeader(request, Span.TRACE_ID_NAME, span.traceIdString()); setHeader(request, Span.SPAN_NAME_NAME, span.getName()); setHeader(request, Span.SAMPLED_NAME, span.isExportable() ? Span.SPAN_SAMPLED : Span.SPAN_NOT_SAMPLED); setHeader(request, Span.PARENT_ID_NAME,Span.idToHex(getParentId(span))); setHeader(request, Span.PROCESS_ID_NAME, span.getProcessId()); if(span.getSavedSpan()!=null && span.getSavedSpan().tags()!=null){ for (Entry<String, String> stringStringEntry : span.getSavedSpan().tags().entrySet()) { setHeader(request, stringStringEntry.getKey(), stringStringEntry.getValue()); } } /*spanInjector.inject(span,null); tracer.inject(span.context(), Format.Builtin.TEXT_MAP, new TextMap() { @Override public void put(String key, String value) { request.setAttachment(key, value); } @Override public Iterator<Entry<String, String>> iterator() { throw new UnsupportedOperationException("TextMapInjectAdapter should only be used with Tracer.inject()"); } });*/ }
@Test public void testSpanStackAndCreateAndContinue() { createSpansAndAssertCurrent(3); Span original = tracer.getCurrentSpan(); tracer.detach(original); Span root = tracer.createSpan("root"); assertCurrentSpanIs(root); Span continued = tracer.continueSpan(original); assertCurrentSpanIs(continued); assertThat(continued.getSavedSpan()).isEqualTo(root); assertThat(continued).isEqualTo(original); assertThat(continued.getSavedSpan()).isNotEqualTo(original.getSavedSpan()); tracer.detach(continued); }
@Test public void testRootSpanAndClose() { Span root = tracer.createSpan("root"); assertCurrentSpanIs(root); assertThat(root.getSavedSpan()).isNull(); Span parent = tracer.close(root); assertThat(parent).isNull(); }
@Test public void testRootSpanAndDetach() { Span root = tracer.createSpan("root"); assertCurrentSpanIs(root); assertThat(root.getSavedSpan()).isNull(); Span parent = tracer.detach(root); assertThat(parent).isNull(); }
@Test public void testSpanStackAndClose() { Span[] spans = createSpansAndAssertCurrent(3); // pop the stack for (int i = spans.length - 1; i >= 0; i--) { assertCurrentSpanIs(spans[i]); Span parent = tracer.close(spans[i]); assertThat(parent).isEqualTo(spans[i].getSavedSpan()); } }
return null; final Span savedSpan = span.getSavedSpan(); Span current = OpenCensusSleuthSpanContextHolder.getCurrentSpan(); if (current == null || !span.equals(current)) {
@Test public void testSpanStackAndContinue() { Span[] spans = createSpansAndAssertCurrent(3); Span original = tracer.getCurrentSpan(); assertThat(original).isEqualTo(spans[spans.length - 1]); Span parent = tracer.detach(original); assertThat(parent).isEqualTo(spans[spans.length - 2]); assertThat(tracer.getCurrentSpan()).isNull(); Span continued = tracer.continueSpan(original); assertCurrentSpanIs(continued); assertThat(continued.getSavedSpan()).isEqualTo(parent); assertThat(continued).isEqualTo(original); tracer.detach(continued); }
if (span != null) { if (span.hasSavedSpan()) { Span parent = span.getSavedSpan(); if (parent.isRemote()) { parent.logEvent(Span.SERVER_SEND);