diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java index 95a2ba02d..b648dce4a 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java @@ -45,12 +45,32 @@ public class MilliSpan implements Span { private final String processId; @Singular private final List logs = new ArrayList<>(); + private final Span savedSpan; public static MilliSpan.MilliSpanBuilder builder() { return new MilliSpan().toBuilder(); } + public MilliSpan(Span current, Span savedSpan) { + this.begin = current.getBegin(); + this.end = current.getEnd(); + this.name = current.getName(); + this.traceId = current.getTraceId(); + this.parents = current.getParents(); + this.spanId = current.getSpanId(); + this.remote = current.isRemote(); + this.exportable = current.isExportable(); + this.processId = current.getProcessId(); + this.tags.putAll(current.tags()); + this.logs.addAll(current.logs()); + this.savedSpan = savedSpan; + } + public MilliSpan(long begin, long end, String name, long traceId, List parents, long spanId, boolean remote, boolean exportable, String processId) { + this(begin, end, name, traceId, parents, spanId, remote, exportable, processId, null); + } + + public MilliSpan(long begin, long end, String name, long traceId, List parents, long spanId, boolean remote, boolean exportable, String processId, Span savedSpan) { this.begin = begin<=0 ? System.currentTimeMillis() : begin; this.end = end; this.name = name; @@ -60,6 +80,7 @@ public class MilliSpan implements Span { this.remote = remote; this.exportable = exportable; this.processId = processId; + this.savedSpan = savedSpan; } //for serialization @@ -70,6 +91,7 @@ public class MilliSpan implements Span { this.spanId = 0; this.processId = null; this.parents = new ArrayList<>(); + this.savedSpan = null; } @Override @@ -120,4 +142,9 @@ public class MilliSpan implements Span { return Collections.unmodifiableList(this.logs); } + @Override + public boolean hasSavedSpan() { + return savedSpan != null; + } + } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Span.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Span.java index 42aefcbb3..f24b23dd1 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Span.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Span.java @@ -19,6 +19,7 @@ package org.springframework.cloud.sleuth; import org.springframework.util.Assert; import java.math.BigInteger; +import java.util.Arrays; import java.util.List; import java.util.Map; @@ -31,6 +32,16 @@ import java.util.Map; */ public interface Span { + String NOT_SAMPLED_NAME = "X-Not-Sampled"; + String PROCESS_ID_NAME = "X-Process-Id"; + String PARENT_ID_NAME = "X-Parent-Id"; + String TRACE_ID_NAME = "X-Trace-Id"; + String SPAN_NAME_NAME = "X-Span-Name"; + String SPAN_ID_NAME = "X-Span-Id"; + List HEADERS = Arrays.asList(SPAN_ID_NAME, TRACE_ID_NAME, + SPAN_NAME_NAME, PARENT_ID_NAME, PROCESS_ID_NAME, NOT_SAMPLED_NAME); + String SPAN_EXPORT_NAME = "X-Span-Export"; + /** * A human-readable name assigned to this span instance. *

@@ -152,4 +163,15 @@ public interface Span { return new BigInteger(hexString, 16).longValue(); } } + + /** + * The span that was "current" before this span was entered + */ + Span getSavedSpan(); + + /** + * + * @return true if there was a "current" span before this span was entered + */ + boolean hasSavedSpan(); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Trace.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Trace.java deleted file mode 100644 index 7d7eaa24f..000000000 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Trace.java +++ /dev/null @@ -1,71 +0,0 @@ -/* - * Copyright 2013-2015 the original author or authors. - * - * Licensed under the Apache License, Version 2.0 (the "License"); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an "AS IS" BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -package org.springframework.cloud.sleuth; - -import java.util.Arrays; -import java.util.List; - -import lombok.Value; -import lombok.experimental.NonFinal; - -/** - * A wrapper around the current span with context for a possible hierarchy or stack of - * spans being monitored. - * - * @author Spencer Gibb - */ -@Value -@NonFinal -public class Trace { - - public static final String NOT_SAMPLED_NAME = "X-Not-Sampled"; - - public static final String PROCESS_ID_NAME = "X-Process-Id"; - - public static final String PARENT_ID_NAME = "X-Parent-Id"; - - public static final String TRACE_ID_NAME = "X-Trace-Id"; - - public static final String SPAN_NAME_NAME = "X-Span-Name"; - - public static final String SPAN_ID_NAME = "X-Span-Id"; - - public static final String SPAN_EXPORT_NAME = "X-Span-Export"; - - public static final List HEADERS = Arrays.asList(SPAN_ID_NAME, TRACE_ID_NAME, - SPAN_NAME_NAME, PARENT_ID_NAME, PROCESS_ID_NAME, NOT_SAMPLED_NAME); - - /** - * the span for this trace - */ - private final Span span; - - /** - * the trace that was "current" before this trace was entered - */ - private final Trace saved; - - public Trace(Trace saved, Span span) { - this.saved = saved; - this.span = span; - } - - public Trace(Span span) { - this(null, span); - } - -} diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Tracer.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Tracer.java index 7e353b316..bee98b49f 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Tracer.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Tracer.java @@ -61,7 +61,7 @@ public interface Tracer extends TraceAccessor { * * @param name The name field for the new span to create. */ - Trace startTrace(String name); + Span startTrace(String name); /** * Creates a new trace scope with a specific parent. The parent might be in another @@ -73,7 +73,7 @@ public interface Tracer extends TraceAccessor { * * @param name The name field for the new span to create. */ - Trace joinTrace(String name, Span parent); + Span joinTrace(String name, Span parent); /** * Start a new span if the sampler allows it or if we are already tracing in this @@ -81,12 +81,12 @@ public interface Tracer extends TraceAccessor { * @param name the name of the span * @param sampler a sampler to decide whether to create the span or not */ - Trace startTrace(String name, Sampler sampler); + Span startTrace(String name, Sampler sampler); /** * Pick up an existing span from another thread. */ - Trace continueSpan(Span s); + Span continueSpan(Span s); /** * Adds a tag to the current span if tracing is currently on. @@ -100,7 +100,7 @@ public interface Tracer extends TraceAccessor { * * @return the saved trace if there was one before the trace started (null otherwise) */ - Trace detach(Trace trace); + Span detach(Span trace); /** * Remove this span from the current thread, stop it and send it for collection. @@ -108,7 +108,7 @@ public interface Tracer extends TraceAccessor { * @param trace the trace to close * @return the saved trace if there was one before the trace started (null otherwise) */ - Trace close(Trace trace); + Span close(Span trace); Callable wrap(Callable callable); diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/bootstrap/TraceBootstrapEnvironmentPostProcessor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/bootstrap/TraceBootstrapEnvironmentPostProcessor.java index d1dedea3b..86243ba02 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/bootstrap/TraceBootstrapEnvironmentPostProcessor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/bootstrap/TraceBootstrapEnvironmentPostProcessor.java @@ -21,7 +21,7 @@ import java.util.Map; import org.springframework.boot.SpringApplication; import org.springframework.boot.env.EnvironmentPostProcessor; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.core.env.ConfigurableEnvironment; import org.springframework.core.env.MapPropertySource; import org.springframework.core.env.MutablePropertySources; @@ -35,9 +35,9 @@ import org.springframework.util.ClassUtils; public class TraceBootstrapEnvironmentPostProcessor implements EnvironmentPostProcessor { private static final String PROPERTY_SOURCE_NAME = "defaultProperties"; - private static String[] headers = new String[] { Trace.SPAN_ID_NAME, - Trace.TRACE_ID_NAME, Trace.PARENT_ID_NAME, Trace.PROCESS_ID_NAME, - Trace.NOT_SAMPLED_NAME, Trace.SPAN_NAME_NAME }; + private static String[] headers = new String[] { Span.SPAN_ID_NAME, + Span.TRACE_ID_NAME, Span.PARENT_ID_NAME, Span.PROCESS_ID_NAME, + Span.NOT_SAMPLED_NAME, Span.SPAN_NAME_NAME }; @Override public void postProcessEnvironment(ConfigurableEnvironment environment, diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceCallable.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceCallable.java index 1b31abb37..5a9b028bf 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceCallable.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceCallable.java @@ -18,7 +18,7 @@ package org.springframework.cloud.sleuth.instrument; import java.util.concurrent.Callable; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import lombok.EqualsAndHashCode; @@ -43,7 +43,7 @@ public class TraceCallable extends TraceDelegate> implements Call @Override public V call() throws Exception { ensureThatThreadIsNotPollutedByPreviousTraces(); - Trace trace = startSpan(); + Span trace = startSpan(); try { return this.getDelegate().call(); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceDelegate.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceDelegate.java index 4c9bc2faf..28a1548c9 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceDelegate.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceDelegate.java @@ -16,12 +16,10 @@ package org.springframework.cloud.sleuth.instrument; -import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; -import org.springframework.cloud.sleuth.Tracer; - import lombok.Getter; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.Span; +import org.springframework.cloud.sleuth.Tracer; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; /** * @author Spencer Gibb @@ -45,18 +43,18 @@ public abstract class TraceDelegate { this.parent = tracer.getCurrentSpan(); } - protected void close(Trace trace) { + protected void close(Span trace) { this.tracer.close(trace); } - protected void closeAll(Trace trace) { + protected void closeAll(Span trace) { trace = this.tracer.close(trace); while (trace != null) { trace = this.tracer.detach(trace); } } - protected Trace startSpan() { + protected Span startSpan() { return this.tracer.joinTrace(getSpanName(), this.parent); } @@ -65,6 +63,6 @@ public abstract class TraceDelegate { } protected void ensureThatThreadIsNotPollutedByPreviousTraces() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceRunnable.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceRunnable.java index 982491494..0baf6c843 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceRunnable.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/TraceRunnable.java @@ -16,7 +16,7 @@ package org.springframework.cloud.sleuth.instrument; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import lombok.EqualsAndHashCode; @@ -40,7 +40,7 @@ public class TraceRunnable extends TraceDelegate implements Runnable { @Override public void run() { ensureThatThreadIsNotPollutedByPreviousTraces(); - Trace trace = startSpan(); + Span trace = startSpan(); try { this.getDelegate().run(); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommand.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommand.java index 455ade803..b520d584a 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommand.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommand.java @@ -20,9 +20,8 @@ import com.netflix.hystrix.HystrixCommand; import com.netflix.hystrix.HystrixCommandGroupKey; import com.netflix.hystrix.HystrixThreadPoolKey; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; /** * Abstraction over {@code HystrixCommand} that wraps command execution with Trace setting @@ -72,7 +71,7 @@ public abstract class TraceCommand extends HystrixCommand { @Override protected R run() throws Exception { enforceThatHystrixThreadIsNotPollutedByPreviousTraces(); - Trace trace = this.tracer.joinTrace(getCommandKey().name(), parentSpan); + Span trace = this.tracer.joinTrace(getCommandKey().name(), parentSpan); try { return doRun(); } finally { @@ -82,7 +81,7 @@ public abstract class TraceCommand extends HystrixCommand { // TODO: Do more analysis why this is not removed properly private void enforceThatHystrixThreadIsNotPollutedByPreviousTraces() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } public abstract R doRun() throws Exception; diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceContextPropagationChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceContextPropagationChannelInterceptor.java index d96e6509d..3a51492e8 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceContextPropagationChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceContextPropagationChannelInterceptor.java @@ -18,7 +18,6 @@ package org.springframework.cloud.sleuth.instrument.integration; import org.springframework.aop.support.AopUtils; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.integration.channel.DirectChannel; import org.springframework.messaging.Message; @@ -50,7 +49,7 @@ public class TraceContextPropagationChannelInterceptor extends ChannelIntercepto private final Tracer tracer; - private final static ThreadLocal ORIGINAL_CONTEXT = new ThreadLocal<>(); + private final static ThreadLocal ORIGINAL_CONTEXT = new ThreadLocal<>(); public TraceContextPropagationChannelInterceptor(Tracer tracer) { this.tracer = tracer; @@ -101,12 +100,12 @@ public class TraceContextPropagationChannelInterceptor extends ChannelIntercepto protected void populatePropagatedContext(Span span, Message message, MessageChannel channel) { if (span != null) { - ORIGINAL_CONTEXT.set(this.tracer.continueSpan(span).getSaved()); + ORIGINAL_CONTEXT.set(this.tracer.continueSpan(span).getSavedSpan()); } } protected void resetPropagatedContext() { - Trace originalContext = ORIGINAL_CONTEXT.get(); + Span originalContext = ORIGINAL_CONTEXT.get(); this.tracer.detach(originalContext); ORIGINAL_CONTEXT.remove(); } @@ -128,16 +127,16 @@ public class TraceContextPropagationChannelInterceptor extends ChannelIntercepto Map headers = new HashMap<>(); headers.putAll(message.getHeaders()); - setHeader(headers, Trace.SPAN_ID_NAME, this.span.getSpanId()); - setHeader(headers, Trace.TRACE_ID_NAME, this.span.getTraceId()); - setHeader(headers, Trace.SPAN_NAME_NAME, this.span.getName()); + setHeader(headers, Span.SPAN_ID_NAME, this.span.getSpanId()); + setHeader(headers, Span.TRACE_ID_NAME, this.span.getTraceId()); + setHeader(headers, Span.SPAN_NAME_NAME, this.span.getName()); Long parentId = getParentId(span); if (parentId != null) { - setHeader(headers, Trace.PARENT_ID_NAME, parentId); + setHeader(headers, Span.PARENT_ID_NAME, parentId); } String processId = span.getProcessId(); if (StringUtils.hasText(processId)) { - setHeader(headers, Trace.PROCESS_ID_NAME, processId); + setHeader(headers, Span.PROCESS_ID_NAME, processId); } this.messageHeaders = new MessageHeaders(headers); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAspect.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAspect.java index ec51cfd4d..0f2707558 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAspect.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/scheduling/TraceSchedulingAspect.java @@ -19,7 +19,7 @@ package org.springframework.cloud.sleuth.instrument.scheduling; import org.aspectj.lang.ProceedingJoinPoint; import org.aspectj.lang.annotation.Around; import org.aspectj.lang.annotation.Aspect; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.scheduling.annotation.Scheduled; @@ -46,7 +46,7 @@ public class TraceSchedulingAspect { @Around("execution (@org.springframework.scheduling.annotation.Scheduled * *.*(..))") public Object traceBackgroundThread(final ProceedingJoinPoint pjp) throws Throwable { - Trace trace = this.tracer.startTrace(pjp.toShortString()); + Span trace = this.tracer.startTrace(pjp.toShortString()); try { return pjp.proceed(); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java index f33a6930c..a98865d3b 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceFilter.java @@ -32,13 +32,12 @@ import javax.servlet.http.HttpServletResponse; import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.MilliSpan.MilliSpanBuilder; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.event.ServerReceivedEvent; import org.springframework.cloud.sleuth.event.ServerSentEvent; import org.springframework.cloud.sleuth.instrument.TraceKeys; import org.springframework.cloud.sleuth.sampler.IsTracingSampler; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEventPublisher; import org.springframework.context.ApplicationEventPublisherAware; @@ -49,15 +48,15 @@ import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.util.UrlPathHelper; /** - * Filter that takes the value of the {@link Trace#SPAN_ID_NAME} and - * {@link Trace#TRACE_ID_NAME} header from either request or response and uses them to + * Filter that takes the value of the {@link Span#SPAN_ID_NAME} and + * {@link Span#TRACE_ID_NAME} header from either request or response and uses them to * create a new span. * *

In order to keep the size of spans manageable, this only add tags defined in {@link TraceKeys}. * If you need to add additional tags, such as headers subtype this and override * {@link #addRequestTags} or {@link #addResponseTags}. * - * @see TraceManager + * @see Tracer * @see TraceKeys * @see TraceWebAutoConfiguration#traceWebFilter(TraceFilter) * @@ -106,32 +105,32 @@ public class TraceFilter extends OncePerRequestFilter protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); String uri = this.urlPathHelper.getPathWithinApplication(request); boolean skip = this.skipPattern.matcher(uri).matches() - || getHeader(request, response, Trace.NOT_SAMPLED_NAME) != null; + || getHeader(request, response, Span.NOT_SAMPLED_NAME) != null; - Trace trace = (Trace) request.getAttribute(TRACE_REQUEST_ATTR); + Span trace = (Span) request.getAttribute(TRACE_REQUEST_ATTR); if (trace != null) { - this.tracer.continueSpan(trace.getSpan()); + this.tracer.continueSpan(trace); } else if (skip) { - addToResponseIfNotPresent(response, Trace.NOT_SAMPLED_NAME, ""); + addToResponseIfNotPresent(response, Span.NOT_SAMPLED_NAME, ""); } String name = "http" + uri; - if (hasHeader(request, response, Trace.TRACE_ID_NAME)) { - long traceId = Span.IdConverter.fromHex(getHeader(request, response, Trace.TRACE_ID_NAME)); - long spanId = hasHeader(request, response, Trace.SPAN_ID_NAME) ? - Span.IdConverter.fromHex(getHeader(request, response, Trace.SPAN_ID_NAME)) : this.random.nextLong(); + if (hasHeader(request, response, Span.TRACE_ID_NAME)) { + long traceId = Span.IdConverter.fromHex(getHeader(request, response, Span.TRACE_ID_NAME)); + long spanId = hasHeader(request, response, Span.SPAN_ID_NAME) ? + Span.IdConverter.fromHex(getHeader(request, response, Span.SPAN_ID_NAME)) : this.random.nextLong(); MilliSpanBuilder span = MilliSpan.builder().traceId(traceId).spanId(spanId); if (skip) { span.exportable(false); } - String processId = getHeader(request, response, Trace.PROCESS_ID_NAME); - String parentName = getHeader(request, response, Trace.SPAN_NAME_NAME); + String processId = getHeader(request, response, Span.PROCESS_ID_NAME); + String parentName = getHeader(request, response, Span.SPAN_NAME_NAME); if (StringUtils.hasText(parentName)) { span.name(parentName); } else { @@ -140,14 +139,14 @@ public class TraceFilter extends OncePerRequestFilter if (StringUtils.hasText(processId)) { span.processId(processId); } - if (hasHeader(request, response, Trace.PARENT_ID_NAME)) { - span.parent(Span.IdConverter.fromHex(getHeader(request, response, Trace.PARENT_ID_NAME))); + if (hasHeader(request, response, Span.PARENT_ID_NAME)) { + span.parent(Span.IdConverter.fromHex(getHeader(request, response, Span.PARENT_ID_NAME))); } span.remote(true); Span parent = span.build(); trace = this.tracer.joinTrace(name, parent); - publish(new ServerReceivedEvent(this, parent, trace.getSpan())); + publish(new ServerReceivedEvent(this, parent, trace)); request.setAttribute(TRACE_REQUEST_ATTR, trace); } @@ -179,14 +178,14 @@ public class TraceFilter extends OncePerRequestFilter return; } if (skip) { - addToResponseIfNotPresent(response, Trace.NOT_SAMPLED_NAME, ""); + addToResponseIfNotPresent(response, Span.NOT_SAMPLED_NAME, ""); } if (trace != null) { addResponseTags(response, exception); - addResponseHeaders(response, trace.getSpan()); - if (trace.getSaved() != null) { - publish(new ServerSentEvent(this, trace.getSaved().getSpan(), - trace.getSpan())); + addResponseHeaders(response, trace); + if (trace.hasSavedSpan()) { + publish(new ServerSentEvent(this, trace.getSavedSpan(), + trace)); } // Double close to clean up the parent (remote span as well) this.tracer.close(this.tracer.close(trace)); @@ -196,8 +195,8 @@ public class TraceFilter extends OncePerRequestFilter private void addResponseHeaders(HttpServletResponse response, Span span) { if (span != null) { - response.addHeader(Trace.SPAN_ID_NAME, Span.IdConverter.toHex(span.getSpanId())); - response.addHeader(Trace.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); + response.addHeader(Span.SPAN_ID_NAME, Span.IdConverter.toHex(span.getSpanId())); + response.addHeader(Span.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceHandlerInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceHandlerInterceptor.java index ae17295b6..9f807c784 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceHandlerInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/TraceHandlerInterceptor.java @@ -16,14 +16,14 @@ package org.springframework.cloud.sleuth.instrument.web; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; - -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.web.servlet.HandlerInterceptor; import org.springframework.web.servlet.ModelAndView; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; + /** * @author Spencer Gibb */ @@ -42,8 +42,8 @@ public class TraceHandlerInterceptor implements HandlerInterceptor { Object handler) throws Exception { // TODO: get trace data from request? // TODO: what is the description? - Trace trace = this.tracer.startTrace("traceHandlerInterceptor"); - request.setAttribute(ATTR_NAME, trace); + Span span = this.tracer.startTrace("traceHandlerInterceptor"); + request.setAttribute(ATTR_NAME, span); return true; } @@ -56,7 +56,7 @@ public class TraceHandlerInterceptor implements HandlerInterceptor { @Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { - Trace trace = Trace.class.cast(request.getAttribute(ATTR_NAME)); - this.tracer.close(trace); + Span span = Span.class.cast(request.getAttribute(ATTR_NAME)); + this.tracer.close(span); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceFeignClientAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceFeignClientAutoConfiguration.java index 8a1dbfff2..cbcae4f76 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceFeignClientAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceFeignClientAutoConfiguration.java @@ -36,7 +36,6 @@ import org.springframework.cloud.netflix.feign.FeignAutoConfiguration; import org.springframework.cloud.netflix.feign.support.ResponseEntityDecoder; import org.springframework.cloud.netflix.feign.support.SpringDecoder; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.TraceAccessor; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.event.ClientReceivedEvent; @@ -123,14 +122,14 @@ public class TraceFeignClientAutoConfiguration { public void apply(RequestTemplate template) { Span span = getCurrentSpan(); if (span == null) { - setHeader(template, Trace.NOT_SAMPLED_NAME, ""); + setHeader(template, Span.NOT_SAMPLED_NAME, ""); return; } - template.header(Trace.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); - setHeader(template, Trace.SPAN_NAME_NAME, span.getName()); - setHeader(template, Trace.SPAN_ID_NAME, span.getSpanId()); - setHeader(template, Trace.PARENT_ID_NAME, getParentId(span)); - setHeader(template, Trace.PROCESS_ID_NAME, span.getProcessId()); + template.header(Span.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); + setHeader(template, Span.SPAN_NAME_NAME, span.getName()); + setHeader(template, Span.SPAN_ID_NAME, span.getSpanId()); + setHeader(template, Span.PARENT_ID_NAME, getParentId(span)); + setHeader(template, Span.PROCESS_ID_NAME, span.getProcessId()); publish(new ClientSentEvent(this, span)); } }; @@ -166,12 +165,12 @@ public class TraceFeignClientAutoConfiguration { newHeaders.putAll(headers); Span span = getCurrentSpan(); if (span == null) { - setHeader(newHeaders, Trace.NOT_SAMPLED_NAME, ""); + setHeader(newHeaders, Span.NOT_SAMPLED_NAME, ""); return newHeaders; } - setHeader(newHeaders, Trace.TRACE_ID_NAME, span.getTraceId()); - setHeader(newHeaders, Trace.SPAN_ID_NAME, span.getSpanId()); - setHeader(newHeaders, Trace.PARENT_ID_NAME, getParentId(span)); + setHeader(newHeaders, Span.TRACE_ID_NAME, span.getTraceId()); + setHeader(newHeaders, Span.SPAN_ID_NAME, span.getSpanId()); + setHeader(newHeaders, Span.PARENT_ID_NAME, getParentId(span)); return newHeaders; } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptor.java index e036cd1af..750839e93 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptor.java @@ -16,7 +16,6 @@ package org.springframework.cloud.sleuth.instrument.web.client; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.TraceAccessor; import org.springframework.cloud.sleuth.event.ClientReceivedEvent; import org.springframework.cloud.sleuth.event.ClientSentEvent; @@ -62,14 +61,14 @@ ApplicationEventPublisherAware { ClientHttpRequestExecution execution) throws IOException { Span span = getCurrentSpan(); if (span == null) { - setHeader(request, Trace.NOT_SAMPLED_NAME, ""); + setHeader(request, Span.NOT_SAMPLED_NAME, ""); return execution.execute(request, body); } - setHeader(request, Trace.TRACE_ID_NAME, span.getTraceId()); - setHeader(request, Trace.SPAN_ID_NAME, span.getSpanId()); - setHeader(request, Trace.SPAN_NAME_NAME, span.getName()); - setHeader(request, Trace.PARENT_ID_NAME, getParentId(span)); - setHeader(request, Trace.PROCESS_ID_NAME, span.getProcessId()); + setHeader(request, Span.TRACE_ID_NAME, span.getTraceId()); + setHeader(request, Span.SPAN_ID_NAME, span.getSpanId()); + setHeader(request, Span.SPAN_NAME_NAME, span.getName()); + setHeader(request, Span.PARENT_ID_NAME, getParentId(span)); + setHeader(request, Span.PROCESS_ID_NAME, span.getProcessId()); publish(new ClientSentEvent(this, span)); return new TraceHttpResponse(this, execution.execute(request, body)); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/zuul/TracePreZuulFilter.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/zuul/TracePreZuulFilter.java index b0b3ca4ea..35bf98f8d 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/zuul/TracePreZuulFilter.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/zuul/TracePreZuulFilter.java @@ -19,7 +19,6 @@ package org.springframework.cloud.sleuth.instrument.zuul; import com.netflix.zuul.ZuulFilter; import com.netflix.zuul.context.RequestContext; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.TraceAccessor; import org.springframework.cloud.sleuth.event.ClientSentEvent; import org.springframework.context.ApplicationEvent; @@ -61,15 +60,15 @@ ApplicationEventPublisherAware { // N.B. this will only work with the simple host filter (not ribbon) unless you set hystrix.execution.isolation.strategy=SEMAPHORE Span span = getCurrentSpan(); if (span == null) { - setHeader(response, Trace.NOT_SAMPLED_NAME, ""); + setHeader(response, Span.NOT_SAMPLED_NAME, ""); return null; } try { - setHeader(response, Trace.SPAN_ID_NAME, span.getSpanId()); - setHeader(response, Trace.TRACE_ID_NAME, span.getTraceId()); - setHeader(response, Trace.SPAN_NAME_NAME, span.getName()); - setHeader(response, Trace.PARENT_ID_NAME, getParentId(span)); - setHeader(response, Trace.PROCESS_ID_NAME, span.getProcessId()); + setHeader(response, Span.SPAN_ID_NAME, span.getSpanId()); + setHeader(response, Span.TRACE_ID_NAME, span.getTraceId()); + setHeader(response, Span.SPAN_NAME_NAME, span.getName()); + setHeader(response, Span.PARENT_ID_NAME, getParentId(span)); + setHeader(response, Span.PROCESS_ID_NAME, span.getProcessId()); // TODO: the client sent event should come from the client not the filter! publish(new ClientSentEvent(this, span)); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/zuul/TraceRestClientRibbonCommandFactory.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/zuul/TraceRestClientRibbonCommandFactory.java index c08f0bfb1..5a4a39f46 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/zuul/TraceRestClientRibbonCommandFactory.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/zuul/TraceRestClientRibbonCommandFactory.java @@ -24,7 +24,6 @@ import org.springframework.cloud.netflix.zuul.filters.route.RestClientRibbonComm import org.springframework.cloud.netflix.zuul.filters.route.RestClientRibbonCommandFactory; import org.springframework.cloud.netflix.zuul.filters.route.RibbonCommandContext; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.TraceAccessor; import org.springframework.cloud.sleuth.event.ClientSentEvent; import org.springframework.context.ApplicationEvent; @@ -91,15 +90,15 @@ public class TraceRestClientRibbonCommandFactory extends RestClientRibbonCommand protected void customizeRequest(HttpRequest.Builder requestBuilder) { Span span = getCurrentSpan(); if (span == null) { - setHeader(requestBuilder, Trace.NOT_SAMPLED_NAME, ""); + setHeader(requestBuilder, Span.NOT_SAMPLED_NAME, ""); return; } - setHeader(requestBuilder, Trace.TRACE_ID_NAME, span.getTraceId()); - setHeader(requestBuilder, Trace.SPAN_ID_NAME, span.getSpanId()); - setHeader(requestBuilder, Trace.SPAN_NAME_NAME, span.getName()); - setHeader(requestBuilder, Trace.PARENT_ID_NAME, + setHeader(requestBuilder, Span.TRACE_ID_NAME, span.getTraceId()); + setHeader(requestBuilder, Span.SPAN_ID_NAME, span.getSpanId()); + setHeader(requestBuilder, Span.SPAN_NAME_NAME, span.getName()); + setHeader(requestBuilder, Span.PARENT_ID_NAME, getParentId(span)); - setHeader(requestBuilder, Trace.PROCESS_ID_NAME, + setHeader(requestBuilder, Span.PROCESS_ID_NAME, span.getProcessId()); publish(new ClientSentEvent(this, span)); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanListener.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanListener.java index 3cc9b4dbe..8b38512f4 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanListener.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/log/Slf4jSpanListener.java @@ -18,7 +18,6 @@ package org.springframework.cloud.sleuth.log; import org.slf4j.MDC; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.event.SpanAcquiredEvent; import org.springframework.cloud.sleuth.event.SpanContinuedEvent; import org.springframework.cloud.sleuth.event.SpanReleasedEvent; @@ -38,9 +37,9 @@ public class Slf4jSpanListener { @Order(Ordered.LOWEST_PRECEDENCE) public void start(SpanAcquiredEvent event) { Span span = event.getSpan(); - MDC.put(Trace.SPAN_ID_NAME, Span.IdConverter.toHex(span.getSpanId())); - MDC.put(Trace.SPAN_EXPORT_NAME, String.valueOf(span.isExportable())); - MDC.put(Trace.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); + MDC.put(Span.SPAN_ID_NAME, Span.IdConverter.toHex(span.getSpanId())); + MDC.put(Span.SPAN_EXPORT_NAME, String.valueOf(span.isExportable())); + MDC.put(Span.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); log.trace("Starting span: {}", span); if (event.getParent() != null) { log.trace("With parent: {}", event.getParent()); @@ -51,9 +50,9 @@ public class Slf4jSpanListener { @Order(Ordered.LOWEST_PRECEDENCE) public void continued(SpanContinuedEvent event) { Span span = event.getSpan(); - MDC.put(Trace.SPAN_ID_NAME, Span.IdConverter.toHex(span.getSpanId())); - MDC.put(Trace.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); - MDC.put(Trace.SPAN_EXPORT_NAME, String.valueOf(span.isExportable())); + MDC.put(Span.SPAN_ID_NAME, Span.IdConverter.toHex(span.getSpanId())); + MDC.put(Span.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); + MDC.put(Span.SPAN_EXPORT_NAME, String.valueOf(span.isExportable())); log.trace("Continued span: {}", event.getSpan()); } @@ -63,13 +62,13 @@ public class Slf4jSpanListener { log.trace("Stopped span: {}", event.getSpan()); if (event.getParent() != null) { log.trace("With parent: {}", event.getParent()); - MDC.put(Trace.SPAN_ID_NAME, Span.IdConverter.toHex(event.getParent().getSpanId())); - MDC.put(Trace.SPAN_EXPORT_NAME, String.valueOf(event.getParent().isExportable())); + MDC.put(Span.SPAN_ID_NAME, Span.IdConverter.toHex(event.getParent().getSpanId())); + MDC.put(Span.SPAN_EXPORT_NAME, String.valueOf(event.getParent().isExportable())); } else { - MDC.remove(Trace.SPAN_ID_NAME); - MDC.remove(Trace.SPAN_EXPORT_NAME); - MDC.remove(Trace.TRACE_ID_NAME); + MDC.remove(Span.SPAN_ID_NAME); + MDC.remove(Span.SPAN_EXPORT_NAME); + MDC.remove(Span.TRACE_ID_NAME); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/IsTracingSampler.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/IsTracingSampler.java index ac0cecbca..a28c937a6 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/IsTracingSampler.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/IsTracingSampler.java @@ -17,7 +17,7 @@ package org.springframework.cloud.sleuth.sampler; import org.springframework.cloud.sleuth.Sampler; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; /** * @author Spencer Gibb @@ -28,6 +28,6 @@ public class IsTracingSampler implements Sampler { @Override public boolean next() { - return TraceContextHolder.isTracing(); + return SpanContextHolder.isTracing(); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/template/TraceCallback.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/template/TraceCallback.java index e097577d8..4dca2f73f 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/template/TraceCallback.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/template/TraceCallback.java @@ -16,8 +16,8 @@ package org.springframework.cloud.sleuth.template; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; public interface TraceCallback { - T doInTrace(Trace trace); + T doInTrace(Span trace); } \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTracer.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTracer.java index 3bd0c4681..7cd0de715 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTracer.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/DefaultTracer.java @@ -24,7 +24,6 @@ import java.util.concurrent.Callable; import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Sampler; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.event.SpanAcquiredEvent; import org.springframework.cloud.sleuth.event.SpanContinuedEvent; @@ -53,7 +52,7 @@ public class DefaultTracer implements Tracer { } @Override - public Trace joinTrace(String name, Span parent) { + public Span joinTrace(String name, Span parent) { if (parent == null) { return startTrace(name); } @@ -67,12 +66,12 @@ public class DefaultTracer implements Tracer { } @Override - public Trace startTrace(String name) { + public Span startTrace(String name) { return this.startTrace(name, this.defaultSampler); } @Override - public Trace startTrace(String name, Sampler s) { + public Span startTrace(String name, Sampler s) { Span span = null; if (isTracing() || s.next()) { span = createChild(getCurrentSpan(), name); @@ -88,12 +87,11 @@ public class DefaultTracer implements Tracer { } @Override - public Trace detach(Trace trace) { - if (trace == null) { + public Span detach(Span span) { + if (span == null) { return null; } - Span cur = TraceContextHolder.getCurrentSpan(); - Span span = trace.getSpan(); + Span cur = SpanContextHolder.getCurrentSpan(); if (cur != span) { ExceptionUtils.warn("Tried to detach trace span but " + "it is not the current span for the '" @@ -101,24 +99,23 @@ public class DefaultTracer implements Tracer { + ". You have " + "probably forgotten to close or detach " + cur); } else { - if (trace.getSaved() != null) { - TraceContextHolder.setCurrentTrace(trace.getSaved()); + if (span.hasSavedSpan()) { + SpanContextHolder.setCurrentSpan(span.getSavedSpan()); } else { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } } - return trace.getSaved(); + return span.getSavedSpan(); } @Override - public Trace close(Trace trace) { - if (trace == null) { + public Span close(Span span) { + if (span == null) { return null; } - Span cur = TraceContextHolder.getCurrentSpan(); - Span span = trace.getSpan(); - Trace savedTrace = trace.getSaved(); + Span cur = SpanContextHolder.getCurrentSpan(); + Span savedSpan = span.getSavedSpan(); if (cur != span) { ExceptionUtils.warn("Tried to close trace span but " + "it is not the current span for the '" @@ -128,24 +125,24 @@ public class DefaultTracer implements Tracer { else { if (span != null) { span.stop(); - if (savedTrace != null - && span.getParents().contains(savedTrace.getSpan().getSpanId())) { + if (savedSpan != null + && span.getParents().contains(savedSpan.getSpanId())) { this.publisher.publishEvent( - new SpanReleasedEvent(this, savedTrace.getSpan(), span)); - TraceContextHolder.setCurrentTrace(savedTrace); + new SpanReleasedEvent(this, savedSpan, span)); + SpanContextHolder.setCurrentSpan(savedSpan); } else { if (!span.isRemote()) { this.publisher.publishEvent(new SpanReleasedEvent(this, span)); } - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } } else { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } } - return savedTrace; + return savedSpan; } protected Span createChild(Span parent, String name) { @@ -157,9 +154,9 @@ public class DefaultTracer implements Tracer { return span; } else { - if (TraceContextHolder.getCurrentTrace() == null) { - Trace trace = createTrace(null, parent); - TraceContextHolder.setCurrentTrace(trace); + if (SpanContextHolder.getCurrentSpan() == null) { + Span span = createSpan(null, parent); + SpanContextHolder.setCurrentSpan(span); } MilliSpan span = MilliSpan.builder().begin(System.currentTimeMillis()) .name(name).traceId(parent.getTraceId()).parent(parent.getSpanId()) @@ -174,27 +171,27 @@ public class DefaultTracer implements Tracer { } @Override - public Trace continueSpan(Span span) { + public Span continueSpan(Span span) { if (span != null) { this.publisher.publishEvent(new SpanContinuedEvent(this, span)); } - Trace trace = createTrace(TraceContextHolder.getCurrentTrace(), span); - TraceContextHolder.setCurrentTrace(trace); - return trace; + Span newSpan = createSpan(SpanContextHolder.getCurrentSpan(), span); + SpanContextHolder.setCurrentSpan(newSpan); + return newSpan; } - protected Trace createTrace(Trace trace, Span span) { - return new Trace(trace, span); + protected Span createSpan(Span saved, Span span) { + return new MilliSpan(span, saved); } @Override public Span getCurrentSpan() { - return TraceContextHolder.getCurrentSpan(); + return SpanContextHolder.getCurrentSpan(); } @Override public boolean isTracing() { - return TraceContextHolder.isTracing(); + return SpanContextHolder.isTracing(); } @Override diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/TraceContextHolder.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/SpanContextHolder.java similarity index 63% rename from spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/TraceContextHolder.java rename to spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/SpanContextHolder.java index e1ab25ec3..3a6d0b14b 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/TraceContextHolder.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/trace/SpanContextHolder.java @@ -16,45 +16,39 @@ package org.springframework.cloud.sleuth.trace; -import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; -import org.springframework.core.NamedThreadLocal; - import lombok.extern.apachecommons.CommonsLog; +import org.springframework.cloud.sleuth.Span; +import org.springframework.core.NamedThreadLocal; /** * @author Spencer Gibb */ @CommonsLog -public class TraceContextHolder { +public class SpanContextHolder { - private static final ThreadLocal currentTrace = new NamedThreadLocal<>("Trace Context"); - - public static Trace getCurrentTrace() { - return currentTrace.get(); - } + private static final ThreadLocal CURRENT_SPAN = new NamedThreadLocal<>("Trace Context"); public static Span getCurrentSpan() { - return isTracing() ? currentTrace.get().getSpan() : null; + return isTracing() ? CURRENT_SPAN.get() : null; } - public static void setCurrentTrace(Trace trace) { + public static void setCurrentSpan(Span span) { // backwards compatibility - if (trace == null) { - currentTrace.remove(); + if (span == null) { + CURRENT_SPAN.remove(); return; } if (log.isTraceEnabled()) { - log.trace("Setting current trace " + trace); + log.trace("Setting current span " + span); } - currentTrace.set(trace); + CURRENT_SPAN.set(span); } - public static void removeCurrentTrace() { - currentTrace.remove(); + public static void removeCurrentSpan() { + CURRENT_SPAN.remove(); } public static boolean isTracing() { - return currentTrace.get() != null; + return CURRENT_SPAN.get() != null; } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/DefaultTraceManagerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/DefaultTraceManagerTests.java index dac21a1a8..f3f4d537a 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/DefaultTraceManagerTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/DefaultTraceManagerTests.java @@ -25,7 +25,7 @@ import org.springframework.cloud.sleuth.event.SpanReleasedEvent; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.cloud.sleuth.sampler.IsTracingSampler; import org.springframework.cloud.sleuth.trace.DefaultTracer; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.ApplicationEvent; import org.springframework.context.ApplicationEventPublisher; @@ -53,12 +53,12 @@ public class DefaultTraceManagerTests { @Before public void setup() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @After public void clean() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @Test @@ -67,7 +67,7 @@ public class DefaultTraceManagerTests { DefaultTracer traceManager = new DefaultTracer(new IsTracingSampler(), new Random(), publisher); - Trace trace = traceManager.startTrace(CREATE_SIMPLE_TRACE, new AlwaysSampler()); + Span trace = traceManager.startTrace(CREATE_SIMPLE_TRACE, new AlwaysSampler()); try { importantWork1(traceManager); } @@ -122,7 +122,7 @@ public class DefaultTraceManagerTests { } private void importantWork1(Tracer tracer) { - Trace cur = tracer.startTrace(IMPORTANT_WORK_1); + Span cur = tracer.startTrace(IMPORTANT_WORK_1); try { Thread.sleep((long) (50 * Math.random())); importantWork2(tracer); @@ -136,7 +136,7 @@ public class DefaultTraceManagerTests { } private void importantWork2(Tracer tracer) { - Trace cur = tracer.startTrace(IMPORTANT_WORK_2); + Span cur = tracer.startTrace(IMPORTANT_WORK_2); try { Thread.sleep((long) (50 * Math.random())); } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/TraceCallableTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/TraceCallableTests.java index 69db7c008..5966d88cc 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/TraceCallableTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/TraceCallableTests.java @@ -5,11 +5,11 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mockito; import org.mockito.runners.MockitoJUnitRunner; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.cloud.sleuth.trace.DefaultTracer; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.ApplicationEventPublisher; import java.util.Random; @@ -28,21 +28,21 @@ public class TraceCallableTests { @After public void clean() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @Test public void should_not_see_same_trace_id_in_successive_tasks() throws Exception { - Trace firstTrace = givenCallableGetsSubmitted( + Span firstTrace = givenCallableGetsSubmitted( thatRetrievesTraceFromThreadLocal()); - Trace secondTrace = whenCallableGetsSubmitted( + Span secondTrace = whenCallableGetsSubmitted( thatRetrievesTraceFromThreadLocal()); - then(secondTrace.getSpan().getTraceId()) - .isNotEqualTo(firstTrace.getSpan().getTraceId()); - then(secondTrace.getSaved()).isNull(); + then(secondTrace.getTraceId()) + .isNotEqualTo(firstTrace.getTraceId()); + then(secondTrace.getSavedSpan()).isNull(); } @Test @@ -50,7 +50,7 @@ public class TraceCallableTests { throws Exception { givenCallableGetsSubmitted(thatRetrievesTraceFromThreadLocal()); - Trace secondTrace = whenNonTraceableCallableGetsSubmitted( + Span secondTrace = whenNonTraceableCallableGetsSubmitted( thatRetrievesTraceFromThreadLocal()); then(secondTrace).isNull(); @@ -59,42 +59,42 @@ public class TraceCallableTests { @Test public void should_remove_parent_span_from_thread_local_after_finishing_work() throws Exception { - Trace parent = givenSpanIsAlreadyActive(); - Trace child = givenCallableGetsSubmitted(thatRetrievesTraceFromThreadLocal()); + Span parent = givenSpanIsAlreadyActive(); + Span child = givenCallableGetsSubmitted(thatRetrievesTraceFromThreadLocal()); then(parent).as("parent").isNotNull(); - then(child.getSaved()).isEqualTo(parent); + then(child.getSavedSpan()).isEqualTo(parent); - Trace secondTrace = whenNonTraceableCallableGetsSubmitted( + Span secondTrace = whenNonTraceableCallableGetsSubmitted( thatRetrievesTraceFromThreadLocal()); then(secondTrace).isNull(); } - private Trace givenSpanIsAlreadyActive() { + private Span givenSpanIsAlreadyActive() { return this.tracer.startTrace("parent"); } - private Callable thatRetrievesTraceFromThreadLocal() { - return new Callable() { + private Callable thatRetrievesTraceFromThreadLocal() { + return new Callable() { @Override - public Trace call() throws Exception { - return TraceContextHolder.getCurrentTrace(); + public Span call() throws Exception { + return SpanContextHolder.getCurrentSpan(); } }; } - private Trace givenCallableGetsSubmitted(Callable callable) + private Span givenCallableGetsSubmitted(Callable callable) throws InterruptedException, java.util.concurrent.ExecutionException { return whenCallableGetsSubmitted(callable); } - private Trace whenCallableGetsSubmitted(Callable callable) + private Span whenCallableGetsSubmitted(Callable callable) throws InterruptedException, java.util.concurrent.ExecutionException { return this.executor.submit(new TraceCallable<>(this.tracer, callable)) .get(); } - private Trace whenNonTraceableCallableGetsSubmitted(Callable callable) + private Span whenNonTraceableCallableGetsSubmitted(Callable callable) throws InterruptedException, java.util.concurrent.ExecutionException { return this.executor.submit(callable).get(); } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/SpanPassingForHystrixViaAnnotationsIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/SpanPassingForHystrixViaAnnotationsIntegrationTests.java index 90639b814..b64ec3bb6 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/SpanPassingForHystrixViaAnnotationsIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/SpanPassingForHystrixViaAnnotationsIntegrationTests.java @@ -11,7 +11,7 @@ import org.springframework.cloud.netflix.hystrix.EnableHystrix; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.DefaultTestAutoConfiguration; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; @@ -39,7 +39,7 @@ public class SpanPassingForHystrixViaAnnotationsIntegrationTests { } private Span givenASpanInCurrentThread() { - Span span = tracer.startTrace("existing").getSpan(); + Span span = tracer.startTrace("existing"); tracer.continueSpan(span); return span; } @@ -61,7 +61,7 @@ public class SpanPassingForHystrixViaAnnotationsIntegrationTests { @After public void cleanTrace() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @DefaultTestAutoConfiguration @@ -81,7 +81,7 @@ public class SpanPassingForHystrixViaAnnotationsIntegrationTests { @HystrixCommand public void invokeLogicWrappedInHystrixCommand() { - spanCaughtFromHystrixThread = new AtomicReference<>(TraceContextHolder.getCurrentSpan()); + spanCaughtFromHystrixThread = new AtomicReference<>(SpanContextHolder.getCurrentSpan()); } public Long getTraceId() { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommandTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommandTests.java index 95972166e..6b3f4b6a3 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommandTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/hystrix/TraceCommandTests.java @@ -7,11 +7,11 @@ import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; import org.springframework.cloud.sleuth.MilliSpan; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.cloud.sleuth.trace.DefaultTracer; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.ApplicationEventPublisher; import java.util.Random; @@ -28,64 +28,64 @@ public class TraceCommandTests { @Before public void setup() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @After public void cleanup() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @Test public void should_remove_span_from_thread_local_after_finishing_work() throws Exception { - TraceContextHolder.removeCurrentTrace(); - Trace firstTraceFromHystrix = givenACommandWasExecuted(traceReturningCommand()); + SpanContextHolder.removeCurrentSpan(); + Span firstTraceFromHystrix = givenACommandWasExecuted(traceReturningCommand()); - Trace secondTraceFromHystrix = whenCommandIsExecuted(traceReturningCommand()); + Span secondTraceFromHystrix = whenCommandIsExecuted(traceReturningCommand()); - then(secondTraceFromHystrix.getSpan().getTraceId()).as("second trace id") - .isNotEqualTo(firstTraceFromHystrix.getSpan().getTraceId()).as("first trace id"); - then(secondTraceFromHystrix.getSaved()).as("saved trace as remnant of first trace") + then(secondTraceFromHystrix.getTraceId()).as("second trace id") + .isNotEqualTo(firstTraceFromHystrix.getTraceId()).as("first trace id"); + then(secondTraceFromHystrix.getSavedSpan()).as("saved trace as remnant of first trace") .isNull(); } @Test public void should_run_Hystrix_command_with_span_passed_from_parent_thread() { givenATraceIsPresentInTheCurrentThread(); - TraceCommand command = traceReturningCommand(); + TraceCommand command = traceReturningCommand(); - Trace traceFromCommand = whenCommandIsExecuted(command); + Span traceFromCommand = whenCommandIsExecuted(command); - then(traceFromCommand).as("Trace from the Hystrix Thread").isNotNull(); - then(traceFromCommand.getSpan().getTraceId()).isEqualTo(EXPECTED_TRACE_ID); + then(traceFromCommand).as("Span from the Hystrix Thread").isNotNull(); + then(traceFromCommand.getTraceId()).isEqualTo(EXPECTED_TRACE_ID); } @After public void cleanUpTrace() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } - private Trace givenATraceIsPresentInTheCurrentThread() { + private Span givenATraceIsPresentInTheCurrentThread() { return this.tracer.joinTrace("test", MilliSpan.builder().traceId(EXPECTED_TRACE_ID).build()); } - private TraceCommand traceReturningCommand() { - return new TraceCommand(this.tracer, withGroupKey(asKey("")) + private TraceCommand traceReturningCommand() { + return new TraceCommand(this.tracer, withGroupKey(asKey("")) .andCommandKey(HystrixCommandKey.Factory.asKey("")).andThreadPoolPropertiesDefaults( HystrixThreadPoolProperties.Setter().withMaxQueueSize(1).withCoreSize(1))) { @Override - public Trace doRun() throws Exception { - return TraceContextHolder.getCurrentTrace(); + public Span doRun() throws Exception { + return SpanContextHolder.getCurrentSpan(); } }; } - private Trace whenCommandIsExecuted(TraceCommand command) { + private Span whenCommandIsExecuted(TraceCommand command) { return command.execute(); } - private Trace givenACommandWasExecuted(TraceCommand command) { + private Span givenACommandWasExecuted(TraceCommand command) { return whenCommandIsExecuted(command); } } \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceChannelInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceChannelInterceptorTests.java index 8abd6e3be..4b078f428 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceChannelInterceptorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceChannelInterceptorTests.java @@ -26,12 +26,11 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.event.SpanReleasedEvent; import org.springframework.cloud.sleuth.instrument.integration.TraceChannelInterceptorTests.App; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.context.event.EventListener; @@ -79,7 +78,7 @@ public class TraceChannelInterceptorTests implements MessageHandler { @Override public void handleMessage(Message message) throws MessagingException { this.message = message; - this.span = TraceContextHolder.getCurrentSpan(); + this.span = SpanContextHolder.getCurrentSpan(); } @Before @@ -89,35 +88,35 @@ public class TraceChannelInterceptorTests implements MessageHandler { @After public void close() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); this.channel.unsubscribe(this); } @Test public void nonExportableSpanCreation() { - this.channel.send(MessageBuilder.withPayload("hi").setHeader(Trace.NOT_SAMPLED_NAME, "") + this.channel.send(MessageBuilder.withPayload("hi").setHeader(Span.NOT_SAMPLED_NAME, "") .build()); assertNotNull("message was null", this.message); - String spanId = this.message.getHeaders().get(Trace.SPAN_ID_NAME, String.class); + String spanId = this.message.getHeaders().get(Span.SPAN_ID_NAME, String.class); assertNotNull("spanId was null", spanId); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); assertFalse(this.span.isExportable()); } @Test public void parentSpanIncluded() { - this.channel.send(MessageBuilder.withPayload("hi").setHeader(Trace.TRACE_ID_NAME, 10L) - .setHeader(Trace.SPAN_ID_NAME, 20L) + this.channel.send(MessageBuilder.withPayload("hi").setHeader(Span.TRACE_ID_NAME, 10L) + .setHeader(Span.SPAN_ID_NAME, 20L) .build()); assertNotNull("message was null", this.message); - String spanId = this.message.getHeaders().get(Trace.SPAN_ID_NAME, String.class); + String spanId = this.message.getHeaders().get(Span.SPAN_ID_NAME, String.class); assertNotNull("spanId was null", spanId); - long traceId = Span.IdConverter.fromHex(this.message.getHeaders().get(Trace.TRACE_ID_NAME, String.class)); + long traceId = Span.IdConverter.fromHex(this.message.getHeaders().get(Span.TRACE_ID_NAME, String.class)); then(traceId).isEqualTo(10L); then(spanId).isNotEqualTo(20L); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); assertEquals(1, this.app.events.size()); } @@ -126,45 +125,45 @@ public class TraceChannelInterceptorTests implements MessageHandler { this.channel.send(MessageBuilder.withPayload("hi").build()); assertNotNull("message was null", this.message); - String spanId = this.message.getHeaders().get(Trace.SPAN_ID_NAME, String.class); + String spanId = this.message.getHeaders().get(Span.SPAN_ID_NAME, String.class); assertNotNull("spanId was null", spanId); - String traceId = this.message.getHeaders().get(Trace.TRACE_ID_NAME, String.class); + String traceId = this.message.getHeaders().get(Span.TRACE_ID_NAME, String.class); assertNotNull("traceId was null", traceId); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Test public void headerCreation() { - Trace trace = this.tracer.startTrace("testSendMessage", + Span trace = this.tracer.startTrace("testSendMessage", new AlwaysSampler()); this.channel.send(MessageBuilder.withPayload("hi").build()); this.tracer.close(trace); assertNotNull("message was null", this.message); - String spanId = this.message.getHeaders().get(Trace.SPAN_ID_NAME, String.class); + String spanId = this.message.getHeaders().get(Span.SPAN_ID_NAME, String.class); assertNotNull("spanId was null", spanId); - String traceId = this.message.getHeaders().get(Trace.TRACE_ID_NAME, String.class); + String traceId = this.message.getHeaders().get(Span.TRACE_ID_NAME, String.class); assertNotNull("traceId was null", traceId); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } // TODO: Refactor to parametrized test together with sending messages via channel @Test public void headerCreationViaMessagingTemplate() { - Trace trace = this.tracer.startTrace("testSendMessage", + Span trace = this.tracer.startTrace("testSendMessage", new AlwaysSampler()); this.messagingTemplate.send(MessageBuilder.withPayload("hi").build()); this.tracer.close(trace); assertNotNull("message was null", this.message); - String spanId = this.message.getHeaders().get(Trace.SPAN_ID_NAME, String.class); + String spanId = this.message.getHeaders().get(Span.SPAN_ID_NAME, String.class); assertNotNull("spanId was null", spanId); - String traceId = this.message.getHeaders().get(Trace.TRACE_ID_NAME, String.class); + String traceId = this.message.getHeaders().get(Span.TRACE_ID_NAME, String.class); assertNotNull("traceId was null", traceId); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Configuration diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceContextPropagationChannelInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceContextPropagationChannelInterceptorTests.java index ec1116391..631a1a621 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceContextPropagationChannelInterceptorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceContextPropagationChannelInterceptorTests.java @@ -25,11 +25,10 @@ import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.integration.TraceContextPropagationChannelInterceptorTests.App; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.integration.channel.QueueChannel; @@ -60,25 +59,25 @@ public class TraceContextPropagationChannelInterceptorTests { @After public void close() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @Test public void testSpanPropagation() { - Trace trace = this.tracer.startTrace("testSendMessage", new AlwaysSampler()); + Span trace = this.tracer.startTrace("testSendMessage", new AlwaysSampler()); this.channel.send(MessageBuilder.withPayload("hi").build()); - Long expectedSpanId = trace.getSpan().getSpanId(); + Long expectedSpanId = trace.getSpanId(); this.tracer.close(trace); Message message = this.channel.receive(0); assertNotNull("message was null", message); - Long spanId = Span.IdConverter.fromHex(message.getHeaders().get(Trace.SPAN_ID_NAME, String.class)); + Long spanId = Span.IdConverter.fromHex(message.getHeaders().get(Span.SPAN_ID_NAME, String.class)); assertEquals("spanId was wrong", expectedSpanId, spanId); - long traceId = Span.IdConverter.fromHex(message.getHeaders().get(Trace.TRACE_ID_NAME, String.class)); + long traceId = Span.IdConverter.fromHex(message.getHeaders().get(Span.TRACE_ID_NAME, String.class)); assertNotNull("traceId was null", traceId); } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptorTests.java index f5913c554..1383347b9 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptorTests.java @@ -6,10 +6,10 @@ import org.junit.Test; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.instrument.integration.TraceStompMessageChannelInterceptorTests.TestApplication; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.messaging.Message; @@ -44,12 +44,12 @@ public class TraceStompMessageChannelInterceptorTests extends AbstractTraceStomp thenSpanIdFromHeadersIsNotEmpty(); thenTraceIdFromHeadersIsNotEmpty(); - then(TraceContextHolder.getCurrentTrace()).isNull(); + then(SpanContextHolder.getCurrentSpan()).isNull(); } @Test public void should_propagate_headers_when_message_was_sent_during_local_span_starting() { - Trace trace = givenALocallyStartedSpan(); + Span trace = givenALocallyStartedSpan(); Message message = givenMessageToBeSampled(); whenTheMessageWasSent(message); @@ -57,17 +57,17 @@ public class TraceStompMessageChannelInterceptorTests extends AbstractTraceStomp Long spanId = thenSpanIdFromHeadersIsNotEmpty(); long traceId = thenTraceIdFromHeadersIsNotEmpty(); - then(traceId).isEqualTo(trace.getSpan().getTraceId()); - then(spanId).isEqualTo(trace.getSpan().getSpanId()); - then(TraceContextHolder.getCurrentTrace()).isNull(); + then(traceId).isEqualTo(trace.getTraceId()); + then(spanId).isEqualTo(trace.getSpanId()); + then(SpanContextHolder.getCurrentSpan()).isNull(); } private Message givenMessageNotToBeSampled() { - return StompMessageBuilder.fromMessage(new GenericMessage<>("Message2")).setHeader(Trace.NOT_SAMPLED_NAME, "").build(); + return StompMessageBuilder.fromMessage(new GenericMessage<>("Message2")).setHeader(Span.NOT_SAMPLED_NAME, "").build(); } private String thenSpanIdFromHeadersIsEmpty() { - String header = getValueFromHeaders(Trace.SPAN_ID_NAME, String.class); + String header = getValueFromHeaders(Span.SPAN_ID_NAME, String.class); then(header).as("Span id should be empty").isNullOrEmpty(); return header; } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptorTests.java index 1d771dafb..01e7f395f 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptorTests.java @@ -7,7 +7,7 @@ import org.junit.runner.RunWith; import org.springframework.boot.autoconfigure.EnableAutoConfiguration; import org.springframework.boot.test.IntegrationTest; import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.instrument.integration.TraceStompMessageContextPropagationChannelInterceptorTests.TestApplication; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.context.annotation.Bean; @@ -28,11 +28,11 @@ public class TraceStompMessageContextPropagationChannelInterceptorTests extends @Test public void should_propagate_span_information() { - Trace trace = givenALocallyStartedSpan(); + Span trace = givenALocallyStartedSpan(); Message m = givenMessageToBeSampled(); whenTheMessageWasSent(m); - Long expectedTraceId = trace.getSpan().getTraceId(); + Long expectedTraceId = trace.getTraceId(); this.tracer.close(trace); thenReceivedMessageIsNotNull(); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java index f9838eff5..c89cae849 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/scheduling/TracingOnScheduledTests.java @@ -9,7 +9,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.instrument.DefaultTestAutoConfiguration; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Scheduled; @@ -70,7 +70,7 @@ class TestBeanWithScheduledMethod { @Scheduled(fixedDelay = 1L) public void scheduledMethod() { - this.span = TraceContextHolder.getCurrentSpan(); + this.span = SpanContextHolder.getCurrentSpan(); } public Span getSpan() { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/RestTemplateTraceAspectIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/RestTemplateTraceAspectIntegrationTests.java index 40198c4be..230fad6b2 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/RestTemplateTraceAspectIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/RestTemplateTraceAspectIntegrationTests.java @@ -9,7 +9,7 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.instrument.DefaultTestAutoConfiguration; import org.springframework.cloud.sleuth.instrument.web.common.HttpMockServer; import org.springframework.cloud.sleuth.instrument.web.common.AbstractMvcWiremockIntegrationTest; @@ -71,7 +71,7 @@ public class RestTemplateTraceAspectIntegrationTests extends AbstractMvcWiremock } private void thenTraceIdHasBeenSetOnARequestHeader() { - this.wireMock.verifyThat(getRequestedFor(urlMatching(".*")).withHeader(Trace.TRACE_ID_NAME, matching("^(?!\\s*$).+"))); + this.wireMock.verifyThat(getRequestedFor(urlMatching(".*")).withHeader(Span.TRACE_ID_NAME, matching("^(?!\\s*$).+"))); } private void whenARequestIsSentToAnAsyncEndpoint(String url) throws Exception { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceAsyncIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceAsyncIntegrationTests.java index 8109731b7..584b431f4 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceAsyncIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceAsyncIntegrationTests.java @@ -10,7 +10,7 @@ import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.DefaultTestAutoConfiguration; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; import org.springframework.scheduling.annotation.Async; @@ -40,7 +40,7 @@ public class TraceAsyncIntegrationTests { } private Span givenASpanInCurrentThread() { - Span span = tracer.startTrace("existing").getSpan(); + Span span = tracer.startTrace("existing"); tracer.continueSpan(span); return span; } @@ -62,7 +62,7 @@ public class TraceAsyncIntegrationTests { @After public void cleanTrace() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @DefaultTestAutoConfiguration @@ -83,7 +83,7 @@ public class TraceAsyncIntegrationTests { @Async public void invokeAsynchronousLogic() { - span.set(TraceContextHolder.getCurrentSpan()); + span.set(SpanContextHolder.getCurrentSpan()); } public Long getTraceId() { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java index ec72a1a5d..0069c4843 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterIntegrationTests.java @@ -9,7 +9,6 @@ import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.DefaultTestAutoConfiguration; import org.springframework.cloud.sleuth.instrument.TraceKeys; @@ -60,7 +59,7 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { private MvcResult whenSentPingWithTraceId(Long passedTraceId) throws Exception { - return sendPingWithTraceId(Trace.TRACE_ID_NAME, passedTraceId); + return sendPingWithTraceId(Span.TRACE_ID_NAME, passedTraceId); } private MvcResult sendPingWithTraceId(String headerName, Long passedCorrelationId) @@ -68,11 +67,11 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { return this.mockMvc .perform(MockMvcRequestBuilders.get("/ping").accept(MediaType.TEXT_PLAIN) .header(headerName, Span.IdConverter.toHex(passedCorrelationId)) - .header(Trace.SPAN_ID_NAME, Span.IdConverter.toHex(new Random().nextLong()))) + .header(Span.SPAN_ID_NAME, Span.IdConverter.toHex(new Random().nextLong()))) .andReturn(); } private Long tracingHeaderFrom(MvcResult mvcResult) { - return Span.IdConverter.fromHex(mvcResult.getResponse().getHeader(Trace.TRACE_ID_NAME)); + return Span.IdConverter.fromHex(mvcResult.getResponse().getHeader(Span.TRACE_ID_NAME)); } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterMockChainIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterMockChainIntegrationTests.java index e87d44998..6c8cd4522 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterMockChainIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterMockChainIntegrationTests.java @@ -16,19 +16,15 @@ package org.springframework.cloud.sleuth.instrument.web; -import static org.junit.Assert.assertNull; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; - -import java.util.Random; - +import lombok.SneakyThrows; import org.junit.Before; import org.junit.Test; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.TraceKeys; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.cloud.sleuth.trace.DefaultTracer; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.support.StaticApplicationContext; import org.springframework.http.MediaType; import org.springframework.mock.web.MockFilterChain; @@ -37,7 +33,10 @@ import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletContext; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import lombok.SneakyThrows; +import java.util.Random; + +import static org.junit.Assert.assertNull; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; /** * @author Spencer Gibb @@ -58,7 +57,7 @@ public class TraceFilterMockChainIntegrationTests { @Before @SneakyThrows public void init() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); this.context.refresh(); this.request = builder().buildRequest(new MockServletContext()); this.response = new MockHttpServletResponse(); @@ -75,17 +74,17 @@ public class TraceFilterMockChainIntegrationTests { public void startsNewTrace() throws Exception { TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys); filter.doFilter(this.request, this.response, this.filterChain); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Test public void continuesSpanFromHeaders() throws Exception { Random generator = new Random(); - this.request = builder().header(Trace.SPAN_ID_NAME, generator.nextLong()) - .header(Trace.TRACE_ID_NAME, generator.nextLong()).buildRequest(new MockServletContext()); + this.request = builder().header(Span.SPAN_ID_NAME, generator.nextLong()) + .header(Span.TRACE_ID_NAME, generator.nextLong()).buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys); filter.doFilter(this.request, this.response, this.filterChain); - assertNull(TraceContextHolder.getCurrentSpan()); + assertNull(SpanContextHolder.getCurrentSpan()); } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java index f4fe03c83..6a8028254 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/TraceFilterTests.java @@ -16,28 +16,18 @@ package org.springframework.cloud.sleuth.instrument.web; -import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.entry; -import static org.junit.Assert.assertEquals; -import static org.junit.Assert.assertFalse; -import static org.junit.Assert.assertNull; -import static org.mockito.MockitoAnnotations.initMocks; -import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; - -import java.util.Random; - +import lombok.SneakyThrows; import org.junit.Before; import org.junit.Test; import org.mockito.Mock; import org.springframework.cloud.sleuth.Sampler; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.TraceKeys; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.cloud.sleuth.sampler.IsTracingSampler; import org.springframework.cloud.sleuth.trace.DefaultTracer; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.ApplicationEventPublisher; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -47,7 +37,15 @@ import org.springframework.mock.web.MockHttpServletResponse; import org.springframework.mock.web.MockServletContext; import org.springframework.test.web.servlet.request.MockHttpServletRequestBuilder; -import lombok.SneakyThrows; +import java.util.Random; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.entry; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNull; +import static org.mockito.MockitoAnnotations.initMocks; +import static org.springframework.test.web.servlet.request.MockMvcRequestBuilders.get; /** * @author Spencer Gibb @@ -74,9 +72,9 @@ public class TraceFilterTests { this.tracer = new DefaultTracer(new DelegateSampler(), new Random(), this.publisher) { @Override - protected Trace createTrace(Trace trace, Span span) { - TraceFilterTests.this.span = span; - return super.createTrace(trace, span); + protected Span createSpan(Span trace, Span span) { + TraceFilterTests.this.span = super.createSpan(trace, span); + return TraceFilterTests.this.span; } }; this.request = builder().buildRequest(new MockServletContext()); @@ -101,7 +99,7 @@ public class TraceFilterTests { filter.doFilter(this.request, this.response, this.filterChain); assertFalse(this.span.isExportable()); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Test @@ -109,13 +107,13 @@ public class TraceFilterTests { TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys); filter.doFilter(this.request, this.response, this.filterChain); verifyHttpTags(); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Test public void continuesSpanInRequestAttr() throws Exception { - Trace trace = this.tracer.startTrace("foo"); + Span trace = this.tracer.startTrace("foo"); this.request.setAttribute(TraceFilter.TRACE_REQUEST_ATTR, trace); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys); @@ -123,26 +121,26 @@ public class TraceFilterTests { verifyHttpTags(); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Test public void continuesSpanFromHeaders() throws Exception { - this.request = builder().header(Trace.SPAN_ID_NAME, 10L) - .header(Trace.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); + this.request = builder().header(Span.SPAN_ID_NAME, 10L) + .header(Span.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys); filter.doFilter(this.request, this.response, this.filterChain); verifyHttpTags(); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Test public void addsAdditionalHeaders() throws Exception { - this.request = builder().header(Trace.SPAN_ID_NAME, 10L) - .header(Trace.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); + this.request = builder().header(Span.SPAN_ID_NAME, 10L) + .header(Span.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); this.traceKeys.getHttp().getHeaders().add("x-foo"); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys); @@ -151,13 +149,13 @@ public class TraceFilterTests { assertThat(this.span.tags()).contains(entry("http/x-foo", "bar")); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Test public void additionalMultiValuedHeader() throws Exception { - this.request = builder().header(Trace.SPAN_ID_NAME, 10L) - .header(Trace.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); + this.request = builder().header(Span.SPAN_ID_NAME, 10L) + .header(Span.TRACE_ID_NAME, 20L).buildRequest(new MockServletContext()); this.traceKeys.getHttp().getHeaders().add("x-foo"); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys); @@ -167,7 +165,7 @@ public class TraceFilterTests { assertThat(this.span.tags()).contains(entry("http/x-foo", "'bar','spam'")); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } @Test @@ -189,7 +187,7 @@ public class TraceFilterTests { } verifyHttpTags(HttpStatus.INTERNAL_SERVER_ERROR); - assertNull(TraceContextHolder.getCurrentTrace()); + assertNull(SpanContextHolder.getCurrentSpan()); } public void verifyHttpTags() { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/template/TraceTemplateTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/template/TraceTemplateTests.java index 9e083b44a..58687696b 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/template/TraceTemplateTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/template/TraceTemplateTests.java @@ -1,19 +1,19 @@ package org.springframework.cloud.sleuth.template; -import static org.assertj.core.api.BDDAssertions.then; - -import java.util.Random; - import org.junit.After; import org.junit.Test; import org.mockito.Mockito; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; import org.springframework.cloud.sleuth.trace.DefaultTracer; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.ApplicationEventPublisher; +import java.util.Random; + +import static org.assertj.core.api.BDDAssertions.then; + public class TraceTemplateTests { Tracer tracer = new DefaultTracer(new AlwaysSampler(), @@ -21,25 +21,25 @@ public class TraceTemplateTests { @After public void close() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @Test public void should_pass_trace_to_the_callback_if_tracing_is_active() { - Trace initialTrace = this.tracer.startTrace("test"); + Span initialTrace = this.tracer.startTrace("test"); TraceTemplate traceTemplate = new TraceTemplate(this.tracer); - Trace traceFromCallback = whenTraceCallbackReturningCurrentTraceIsExecuted(traceTemplate); + Span traceFromCallback = whenTraceCallbackReturningCurrentTraceIsExecuted(traceTemplate); then(traceFromCallback).isNotNull(); - then(traceFromCallback.getSpan().getTraceId()).isEqualTo(initialTrace.getSpan().getTraceId()); + then(traceFromCallback.getTraceId()).isEqualTo(initialTrace.getTraceId()); } - private Trace whenTraceCallbackReturningCurrentTraceIsExecuted(TraceTemplate traceTemplate) { - return traceTemplate.trace(new TraceCallback() { + private Span whenTraceCallbackReturningCurrentTraceIsExecuted(TraceTemplate traceTemplate) { + return traceTemplate.trace(new TraceCallback() { @Override - public Trace doInTrace(Trace trace) { - return TraceContextHolder.getCurrentTrace(); + public Span doInTrace(Span trace) { + return SpanContextHolder.getCurrentSpan(); } }); } diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleController.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleController.java index c5adc85a9..6e75dcf89 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleController.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleController.java @@ -21,7 +21,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.TraceAccessor; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; @@ -94,7 +93,7 @@ ApplicationListener { @SneakyThrows @RequestMapping("/traced") public String traced() { - Trace trace = this.tracer.startTrace("customTraceEndpoint", + Span trace = this.tracer.startTrace("customTraceEndpoint", new AlwaysSampler()); int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-test-core/src/main/java/tools/RequestSendingRunnable.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-test-core/src/main/java/tools/RequestSendingRunnable.java index 61ac8e400..024e3885e 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-test-core/src/main/java/tools/RequestSendingRunnable.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-test-core/src/main/java/tools/RequestSendingRunnable.java @@ -17,7 +17,6 @@ package tools; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.http.*; import org.springframework.web.client.RestTemplate; @@ -53,7 +52,7 @@ public class RequestSendingRunnable implements Runnable { private RequestEntity requestWithTraceId(long traceId) { HttpHeaders headers = new HttpHeaders(); - headers.add(Trace.TRACE_ID_NAME, Span.IdConverter.toHex(traceId)); + headers.add(Span.TRACE_ID_NAME, Span.IdConverter.toHex(traceId)); URI uri = URI.create(url); RequestEntity requestEntity = new RequestEntity<>(headers, HttpMethod.GET, uri); log.info("Request [" + requestEntity + "] is ready"); diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleController.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleController.java index c5adc85a9..6e75dcf89 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleController.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleController.java @@ -21,7 +21,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.TraceAccessor; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; @@ -94,7 +93,7 @@ ApplicationListener { @SneakyThrows @RequestMapping("/traced") public String traced() { - Trace trace = this.tracer.startTrace("customTraceEndpoint", + Span trace = this.tracer.startTrace("customTraceEndpoint", new AlwaysSampler()); int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleController.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleController.java index c5adc85a9..6e75dcf89 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleController.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample/src/main/java/sample/SampleController.java @@ -21,7 +21,6 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.context.embedded.EmbeddedServletContainerInitializedEvent; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.TraceAccessor; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; @@ -94,7 +93,7 @@ ApplicationListener { @SneakyThrows @RequestMapping("/traced") public String traced() { - Trace trace = this.tracer.startTrace("customTraceEndpoint", + Span trace = this.tracer.startTrace("customTraceEndpoint", new AlwaysSampler()); int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); diff --git a/spring-cloud-sleuth-stream/src/main/java/org/springframework/cloud/sleuth/stream/SleuthStreamAutoConfiguration.java b/spring-cloud-sleuth-stream/src/main/java/org/springframework/cloud/sleuth/stream/SleuthStreamAutoConfiguration.java index 2cbcf9fa9..9d3b9e3b3 100644 --- a/spring-cloud-sleuth-stream/src/main/java/org/springframework/cloud/sleuth/stream/SleuthStreamAutoConfiguration.java +++ b/spring-cloud-sleuth-stream/src/main/java/org/springframework/cloud/sleuth/stream/SleuthStreamAutoConfiguration.java @@ -25,7 +25,7 @@ import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; import org.springframework.boot.autoconfigure.web.ServerProperties; import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.cloud.client.discovery.DiscoveryClient; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.stream.annotation.EnableBinding; import org.springframework.cloud.stream.config.ChannelBindingAutoConfiguration; import org.springframework.context.annotation.Bean; @@ -61,7 +61,7 @@ public class SleuthStreamAutoConfiguration { @Override public Message preSend(Message message, MessageChannel channel) { return MessageBuilder.fromMessage(message) - .setHeader(Trace.NOT_SAMPLED_NAME, "").build(); + .setHeader(Span.NOT_SAMPLED_NAME, "").build(); } }; } diff --git a/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/StreamSpanListenerTests.java b/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/StreamSpanListenerTests.java index df311ffb0..5f3522332 100644 --- a/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/StreamSpanListenerTests.java +++ b/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/StreamSpanListenerTests.java @@ -31,7 +31,6 @@ import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Sampler; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; import org.springframework.cloud.sleuth.event.ClientReceivedEvent; @@ -78,7 +77,7 @@ public class StreamSpanListenerTests { @Test public void acquireAndRelease() { - Trace context = this.tracer.startTrace("foo"); + Span context = this.tracer.startTrace("foo"); this.tracer.close(context); assertEquals(1, this.test.spans.size()); } @@ -87,21 +86,21 @@ public class StreamSpanListenerTests { public void rpcAnnotations() { Span parent = MilliSpan.builder().traceId(1L).name("parent").remote(true) .build(); - Trace context = this.tracer.joinTrace("child", parent); - this.application.publishEvent(new ClientSentEvent(this, context.getSpan())); + Span context = this.tracer.joinTrace("child", parent); + this.application.publishEvent(new ClientSentEvent(this, context)); this.application - .publishEvent(new ServerReceivedEvent(this, parent, context.getSpan())); + .publishEvent(new ServerReceivedEvent(this, parent, context)); this.application - .publishEvent(new ServerSentEvent(this, parent, context.getSpan())); - this.application.publishEvent(new ClientReceivedEvent(this, context.getSpan())); + .publishEvent(new ServerSentEvent(this, parent, context)); + this.application.publishEvent(new ClientReceivedEvent(this, context)); this.tracer.close(context); assertEquals(2, this.test.spans.size()); } @Test public void nullSpanName() { - Trace context = this.tracer.startTrace(null, (Sampler) null); - this.application.publishEvent(new ClientSentEvent(this, context.getSpan())); + Span context = this.tracer.startTrace(null, (Sampler) null); + this.application.publishEvent(new ClientSentEvent(this, context)); this.tracer.close(context); assertEquals(1, this.test.spans.size()); this.listener.poll(); diff --git a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin/ZipkinSpanListenerTests.java b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin/ZipkinSpanListenerTests.java index 95a83a564..f604798c0 100644 --- a/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin/ZipkinSpanListenerTests.java +++ b/spring-cloud-sleuth-zipkin/src/test/java/org/springframework/cloud/sleuth/zipkin/ZipkinSpanListenerTests.java @@ -32,7 +32,6 @@ import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Sampler; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.autoconfig.TraceAutoConfiguration; import org.springframework.cloud.sleuth.event.ClientReceivedEvent; @@ -119,7 +118,7 @@ public class ZipkinSpanListenerTests { */ @Test public void spanWithoutAnnotationsLogsComponent() { - Trace context = this.tracer.startTrace("foo"); + Span context = this.tracer.startTrace("foo"); this.tracer.close(context); assertEquals(1, this.test.spans.size()); assertThat(this.test.spans.get(0).binaryAnnotations.get(0).endpoint.serviceName) @@ -128,11 +127,11 @@ public class ZipkinSpanListenerTests { @Test public void rpcAnnotations() { - Trace context = this.tracer.joinTrace("child", parent); - this.application.publishEvent(new ClientSentEvent(this, context.getSpan())); - this.application.publishEvent(new ServerReceivedEvent(this, parent, context.getSpan())); - this.application.publishEvent(new ServerSentEvent(this, parent, context.getSpan())); - this.application.publishEvent(new ClientReceivedEvent(this, context.getSpan())); + Span context = this.tracer.joinTrace("child", parent); + this.application.publishEvent(new ClientSentEvent(this, context)); + this.application.publishEvent(new ServerReceivedEvent(this, parent, context)); + this.application.publishEvent(new ServerSentEvent(this, parent, context)); + this.application.publishEvent(new ClientReceivedEvent(this, context)); this.tracer.close(context); assertEquals(2, this.test.spans.size()); }