From d5b523d0219fc53d9a76af3904baa74e941e0e08 Mon Sep 17 00:00:00 2001 From: Marcin Grzejszczak Date: Tue, 19 Jan 2016 16:36:50 +0100 Subject: [PATCH] Converted MilliSpan to Span. Removed the interface --- .../cloud/sleuth/MilliSpan.java | 150 --------- .../springframework/cloud/sleuth/Sampler.java | 27 +- .../springframework/cloud/sleuth/Span.java | 313 ++++++++++++------ .../springframework/cloud/sleuth/Tracer.java | 30 +- .../autoconfig/TraceAutoConfiguration.java | 4 +- .../sleuth/instrument/TraceCallable.java | 4 +- .../sleuth/instrument/TraceDelegate.java | 12 +- .../sleuth/instrument/TraceRunnable.java | 4 +- .../instrument/hystrix/TraceCommand.java | 4 +- .../AbstractTraceChannelInterceptor.java | 24 +- .../integration/SpanMessageHeaders.java | 27 +- .../integration/StompMessageBuilder.java | 35 +- .../integration/TraceChannelInterceptor.java | 19 +- ...eContextPropagationChannelInterceptor.java | 2 +- .../TraceStompMessageChannelInterceptor.java | 21 +- ...eContextPropagationChannelInterceptor.java | 7 +- .../scheduling/TraceSchedulingAspect.java | 4 +- .../sleuth/instrument/web/TraceFilter.java | 74 ++--- .../TraceFeignClientAutoConfiguration.java | 6 +- .../client/TraceRestTemplateInterceptor.java | 2 +- .../instrument/zuul/TracePreZuulFilter.java | 2 +- .../TraceRestClientRibbonCommandFactory.java | 2 +- .../cloud/sleuth/log/Slf4jSpanListener.java | 13 +- .../cloud/sleuth/sampler/AlwaysSampler.java | 2 +- .../sleuth/sampler/IsTracingSampler.java | 2 +- .../sampler/PercentageBasedSampler.java | 2 +- .../cloud/sleuth/template/TraceCallback.java | 2 +- .../cloud/sleuth/template/TraceTemplate.java | 10 +- .../cloud/sleuth/trace/DefaultTracer.java | 50 ++- .../sleuth/DefaultTraceManagerTests.java | 4 +- .../cloud/sleuth/MilliSpanTests.java | 43 --- .../cloud/sleuth/SpanTest.java | 24 +- .../sleuth/instrument/TraceCallableTests.java | 18 +- .../sleuth/instrument/TraceRunnableTests.java | 42 +-- .../TraceableExecutorServiceTests.java | 44 ++- .../instrument/hystrix/TraceCommandTests.java | 20 +- .../AbstractTraceStompIntegrationTests.java | 16 +- .../TraceChannelInterceptorTests.java | 16 +- ...extPropagationChannelInterceptorTests.java | 12 +- ...ceStompMessageChannelInterceptorTests.java | 8 +- ...extPropagationChannelInterceptorTests.java | 6 +- .../web/TraceFilterIntegrationTests.java | 14 +- .../instrument/web/TraceFilterTests.java | 12 +- .../web/client/FeignTraceTests.java | 39 +-- .../TraceRestTemplateInterceptorTests.java | 37 +-- .../sleuth/log/JsonLogSpanListenerTests.java | 11 +- .../sampler/PercentageBasedSamplerTests.java | 9 +- .../sleuth/template/TraceTemplateTests.java | 10 +- .../sample/SampleMessagingApplication.java | 2 +- .../java/sample/SampleRibbonApplication.java | 2 +- .../main/java/sample/SampleController.java | 4 +- .../java/sample/SampleSleuthApplication.java | 2 +- .../java/tools/RequestSendingRunnable.java | 8 +- .../java/integration/ZipkinStreamTests.java | 3 +- .../main/java/sample/SampleController.java | 4 +- .../java/sample/SampleZipkinApplication.java | 2 +- .../main/java/sample/SampleController.java | 4 +- .../ServerPropertiesHostLocatorTests.java | 5 +- .../stream/StreamSpanListenerTests.java | 20 +- .../SamplingZipkinSpanIteratorTests.java | 6 +- .../stream/ZipkinMessageListenerTests.java | 7 +- .../zipkin/ZipkinSpanListenerTests.java | 20 +- 62 files changed, 614 insertions(+), 714 deletions(-) delete mode 100644 spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java delete mode 100644 spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/MilliSpanTests.java 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 deleted file mode 100644 index b648dce4a..000000000 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/MilliSpan.java +++ /dev/null @@ -1,150 +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.ArrayList; -import java.util.Collections; -import java.util.LinkedHashMap; -import java.util.List; -import java.util.Map; - -import lombok.Builder; -import lombok.Data; -import lombok.Singular; - -/** - * @author Spencer Gibb - */ -@Data -@Builder(toBuilder=true) -public class MilliSpan implements Span { - private final long begin; - private long end = 0; - private final String name; - private final long traceId; - @Singular - private List parents = new ArrayList<>(); - private final long spanId; - private boolean remote = false; - private boolean exportable = true; - private final Map tags = new LinkedHashMap<>(); - 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; - this.traceId = traceId; - this.parents = parents; - this.spanId = spanId; - this.remote = remote; - this.exportable = exportable; - this.processId = processId; - this.savedSpan = savedSpan; - } - - //for serialization - private MilliSpan() { - this.begin = 0; - this.name = null; - this.traceId = 0; - this.spanId = 0; - this.processId = null; - this.parents = new ArrayList<>(); - this.savedSpan = null; - } - - @Override - public synchronized void stop() { - if (this.end == 0) { - if (this.begin == 0) { - throw new IllegalStateException("Span for " + this.name - + " has not been started"); - } - this.end = System.currentTimeMillis(); - } - } - - @Override - public synchronized long getAccumulatedMillis() { - if (this.begin == 0) { - return 0; - } - if (this.end > 0) { - return this.end - this.begin; - } - return System.currentTimeMillis() - this.begin; - } - - @Override - public synchronized boolean isRunning() { - return this.begin != 0 && this.end == 0; - } - - @Override - public void tag(String key, String value) { - this.tags.put(key, value); - } - - @Override - public void log(String msg) { - this.logs.add(new Log(System.currentTimeMillis(), - msg)); - } - - @Override - public Map tags() { - return Collections.unmodifiableMap(this.tags); - } - - @Override - public List logs() { - 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/Sampler.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Sampler.java index a12f7b375..109430b75 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Sampler.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/Sampler.java @@ -18,32 +18,7 @@ package org.springframework.cloud.sleuth; /** * Extremely simple callback to determine the frequency that an action should be - * performed. - *

- * 'T' is the object type you require to create a more advanced sampling - * function. For example if there is some RPC information in a 'Call' object, - * you might implement Sampler. Then when the RPC is received you can call - * one of the Trace.java functions that takes the extra 'info' parameter, which - * will be passed into the next function you implemented. - *

- * For the example above, the next(T info) function may look like this - *

- *

- * public boolean next(T info) {
- *   if (info == null) {
- *     return false;
- *   } else if (info.getName().equals("get")) {
- *     return Math.random() > 0.5;
- *   } else if (info.getName().equals("put")) {
- *     return Math.random() > 0.25;
- *   } else {
- *     return false;
- *   }
- * }
- * 
- * 
- * This would trace 50% of all gets, 75% of all puts and would not trace any other requests. */ -public interface Sampler { +public interface Sampler { boolean next(); } 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 f24b23dd1..4b2c6509d 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 @@ -16,115 +16,161 @@ package org.springframework.cloud.sleuth; +import lombok.Builder; +import lombok.EqualsAndHashCode; +import lombok.Getter; +import lombok.Singular; +import lombok.ToString; import org.springframework.util.Assert; import java.math.BigInteger; +import java.util.ArrayList; import java.util.Arrays; +import java.util.Collections; +import java.util.LinkedHashMap; import java.util.List; import java.util.Map; /** - * Interface for gathering and reporting statistics about a block of execution. + * Class for gathering and reporting statistics about a block of execution. *

* Spans should form a directed acyclic graph structure. It should be possible to keep * following the parents of a span until you arrive at a span with no parents. *

+ * + * @author Spencer Gibb + * @author Marcin Grzejszczak */ -public interface Span { +@Builder(toBuilder = true) +@ToString +@EqualsAndHashCode +@Getter +public class 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"; + 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 List HEADERS = Arrays + .asList(SPAN_ID_NAME, TRACE_ID_NAME, SPAN_NAME_NAME, PARENT_ID_NAME, + PROCESS_ID_NAME, NOT_SAMPLED_NAME); + public static final String SPAN_EXPORT_NAME = "X-Span-Export"; - /** - * A human-readable name assigned to this span instance. - *

- */ - String getName(); + private final long begin; + private long end = 0; + private final String name; + private final long traceId; + @Singular + private List parents = new ArrayList<>(); + private final long spanId; + private boolean remote = false; + private boolean exportable = true; + private final Map tags = new LinkedHashMap<>(); + private final String processId; + @Singular + private final List logs = new ArrayList<>(); + private final Span savedSpan; - /** - * A pseudo-unique (random) number assigned to this span instance. - *

- *

- * The spanId is immutable and cannot be changed. It is safe to access this from - * multiple threads. - */ - long getSpanId(); + public static Span.SpanBuilder builder() { + return new Span().toBuilder(); + } - /** - * A pseudo-unique (random) number assigned to the trace associated with this span - */ - long getTraceId(); + public Span(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; + } - /** - * Return a unique id for the process from which this Span originated. - *

- *

- * // TODO: Check when this is going to be null (cause it may be null) - */ - String getProcessId(); + public Span(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); + } - /** - * Returns the parent IDs of the span. - *

- *

- * The collection will be empty if there are no parents. - */ - List getParents(); + public Span(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; + this.traceId = traceId; + this.parents = parents; + this.spanId = spanId; + this.remote = remote; + this.exportable = exportable; + this.processId = processId; + this.savedSpan = savedSpan; + } - /** - * Flag that tells us whether the span was started in another process. Useful in RPC - * tracing when the receiver actually has to add annotations to the senders span. - */ - boolean isRemote(); + //for serialization + private Span() { + this.begin = 0; + this.name = null; + this.traceId = 0; + this.spanId = 0; + this.processId = null; + this.parents = new ArrayList<>(); + this.savedSpan = null; + } /** * The block has completed, stop the clock */ - void stop(); - - /** - * Get the start time, in milliseconds - */ - long getBegin(); - - /** - * Get the stop time, in milliseconds - */ - long getEnd(); + public synchronized void stop() { + if (this.end == 0) { + if (this.begin == 0) { + throw new IllegalStateException("Span for " + this.name + + " has not been started"); + } + this.end = System.currentTimeMillis(); + } + } /** * Return the total amount of time elapsed since start was called, if running, or * difference between stop and start */ - long getAccumulatedMillis(); + public synchronized long getAccumulatedMillis() { + if (this.begin == 0) { + return 0; + } + if (this.end > 0) { + return this.end - this.begin; + } + return System.currentTimeMillis() - this.begin; + } /** * Has the span been started and not yet stopped? */ - boolean isRunning(); - - /** - * Is the span eligible for export? If not then we may not need accumulate annotations - * (for instance). - */ - boolean isExportable(); + public synchronized boolean isRunning() { + return this.begin != 0 && this.end == 0; + } /** * Add a tag or data annotation associated with this span */ - void tag(String key, String value); + public void tag(String key, String value) { + this.tags.put(key, value); + } /** * Add a log or timeline annotation associated with this span */ - void log(String msg); + public void log(String msg) { + this.logs.add(new Log(System.currentTimeMillis(), + msg)); + } /** * Get tag data associated with this span (read only) @@ -132,7 +178,9 @@ public interface Span { *

* Will never be null. */ - Map tags(); + public Map tags() { + return Collections.unmodifiableMap(this.tags); + } /** * Get any logs or annotations (read only) @@ -140,38 +188,111 @@ public interface Span { *

* Will never be null. */ - List logs(); - - - /** - * Class used for conversions of long ids to their String representation - */ - class IdConverter { - - /** - * Represents given long id as hex string - */ - public static String toHex(long id) { - return Long.toHexString(id); - } - - /** - * Represents hex string as long - */ - public static long fromHex(String hexString) { - Assert.hasText(hexString, "Can't convert empty hex string to long"); - return new BigInteger(hexString, 16).longValue(); - } + public List logs() { + return Collections.unmodifiableList(this.logs); } /** - * The span that was "current" before this span was entered + * Returns the saved span. The one that was "current" before this Span. + *

+ * Might be null */ - Span getSavedSpan(); + public Span getSavedSpan() { + return this.savedSpan; + } + + public boolean hasSavedSpan() { + return this.savedSpan != null; + } /** - * - * @return true if there was a "current" span before this span was entered + * A human-readable name assigned to this span instance. + *

*/ - boolean hasSavedSpan(); + public String getName() { + return this.name; + } + + /** + * A pseudo-unique (random) number assigned to this span instance. + *

+ *

+ * The spanId is immutable and cannot be changed. It is safe to access this from + * multiple threads. + */ + public long getSpanId() { + return this.spanId; + } + + /** + * A pseudo-unique (random) number assigned to the trace associated with this span + */ + public long getTraceId() { + return this.traceId; + } + + /** + * Return a unique id for the process from which this Span originated. + *

+ *

+ * // TODO: Check when this is going to be null (cause it may be null) + */ + public String getProcessId() { + return this.processId; + } + + /** + * Returns the parent IDs of the span. + *

+ *

+ * The collection will be empty if there are no parents. + */ + public List getParents() { + return this.parents; + } + + /** + * Flag that tells us whether the span was started in another process. Useful in RPC + * tracing when the receiver actually has to add annotations to the senders span. + */ + public boolean isRemote() { + return this.remote; + } + + /** + * Get the start time, in milliseconds + */ + public long getBegin() { + return this.begin; + } + + /** + * Get the stop time, in milliseconds + */ + public long getEnd() { + return this.end; + } + + /** + * Is the span eligible for export? If not then we may not need accumulate annotations + * (for instance). + */ + public boolean isExportable() { + return this.exportable; + } + + /** + * Represents given long id as hex string + */ + public static String toHex(long id) { + return Long.toHexString(id); + } + + /** + * Represents hex string as long + */ + public static long fromHex(String hexString) { + Assert.hasText(hexString, "Can't convert empty hex string to long"); + return new BigInteger(hexString, 16).longValue(); + } } 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 bee98b49f..8013475b5 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 @@ -31,14 +31,8 @@ import java.util.concurrent.Callable; * With care, it is possible to safely pass a Span object between threads, but in most * cases this is not necessary. * - * A 'TraceScope' can either be empty, or contain a Span. TraceScope objects implement the - * Java's Closeable interface. Similar to file descriptors, they must be closed after they - * are created. When a TraceScope contains a Span, this span is closed when the scope is - * closed. + * The 'startTrace' method in this class starts a new span. * - * The 'startTrace' methods in this class do a few things: - *

    - *
  • Set currentSpan to the new Span.
  • *
  • Create a TraceSpan object to manage the new Span.
  • *
* @@ -53,18 +47,18 @@ import java.util.concurrent.Callable; public interface Tracer extends TraceAccessor { /** - * Creates a trace wrapping a new span. + * Creates a new Span. *

* If this thread has a currently active span, it will be the parent of the span we - * create here, and the trace scope will contain the new span and the parent. If there - * is no currently active trace span, the trace scope we create will be empty. + * create here. If there is no currently active trace span, the trace scope we + * create will be empty. * * @param name The name field for the new span to create. */ Span startTrace(String name); /** - * Creates a new trace scope with a specific parent. The parent might be in another + * Creates a new Span with a specific parent. The parent might be in another * process or thread. *

* If this thread has a currently active trace span, it must be the 'parent' span that @@ -81,12 +75,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 */ - Span startTrace(String name, Sampler sampler); + Span startTrace(String name, Sampler sampler); /** * Pick up an existing span from another thread. */ - Span continueSpan(Span s); + Span continueSpan(Span span); /** * Adds a tag to the current span if tracing is currently on. @@ -96,19 +90,19 @@ public interface Tracer extends TraceAccessor { /** * Remove this span from the current thread, but don't stop it yet or send it for * collection. This is useful if the span object is then passed to another thread for - * use with Trace.continueTrace(). + * use with Span.continueTrace(). * * @return the saved trace if there was one before the trace started (null otherwise) */ - Span detach(Span trace); + Span detach(Span span); /** * Remove this span from the current thread, stop it and send it for collection. * - * @param trace the trace to close - * @return the saved trace if there was one before the trace started (null otherwise) + * @param span the span to close + * @return the saved span if there was one before the trace started (null otherwise) */ - Span close(Span trace); + Span close(Span span); Callable wrap(Callable callable); diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java index 237a2821d..3954e9a37 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/autoconfig/TraceAutoConfiguration.java @@ -41,13 +41,13 @@ public class TraceAutoConfiguration { @Bean @ConditionalOnMissingBean - public Sampler defaultTraceSampler() { + public Sampler defaultTraceSampler() { return new IsTracingSampler(); } @Bean @ConditionalOnMissingBean - public DefaultTracer traceManager(Sampler sampler, + public DefaultTracer traceManager(Sampler sampler, ApplicationEventPublisher publisher) { return new DefaultTracer(sampler, random(), publisher); } 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 5a9b028bf..ddf6060c0 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 @@ -43,12 +43,12 @@ public class TraceCallable extends TraceDelegate> implements Call @Override public V call() throws Exception { ensureThatThreadIsNotPollutedByPreviousTraces(); - Span trace = startSpan(); + Span span = startSpan(); try { return this.getDelegate().call(); } finally { - closeAll(trace); + closeAll(span); } } 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 28a1548c9..f30a7caf9 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 @@ -43,14 +43,14 @@ public abstract class TraceDelegate { this.parent = tracer.getCurrentSpan(); } - protected void close(Span trace) { - this.tracer.close(trace); + protected void close(Span span) { + this.tracer.close(span); } - protected void closeAll(Span trace) { - trace = this.tracer.close(trace); - while (trace != null) { - trace = this.tracer.detach(trace); + protected void closeAll(Span span) { + span = this.tracer.close(span); + while (span != null) { + span = this.tracer.detach(span); } } 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 0baf6c843..3582aa95b 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 @@ -40,12 +40,12 @@ public class TraceRunnable extends TraceDelegate implements Runnable { @Override public void run() { ensureThatThreadIsNotPollutedByPreviousTraces(); - Span trace = startSpan(); + Span span = startSpan(); try { this.getDelegate().run(); } finally { - closeAll(trace); + closeAll(span); } } } 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 b520d584a..175d58b8b 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 @@ -71,11 +71,11 @@ public abstract class TraceCommand extends HystrixCommand { @Override protected R run() throws Exception { enforceThatHystrixThreadIsNotPollutedByPreviousTraces(); - Span trace = this.tracer.joinTrace(getCommandKey().name(), parentSpan); + Span span = this.tracer.joinTrace(getCommandKey().name(), parentSpan); try { return doRun(); } finally { - this.tracer.close(trace); + this.tracer.close(span); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/AbstractTraceChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/AbstractTraceChannelInterceptor.java index d813e027f..c43546c23 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/AbstractTraceChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/AbstractTraceChannelInterceptor.java @@ -1,10 +1,6 @@ package org.springframework.cloud.sleuth.instrument.integration; -import java.util.Random; - -import org.springframework.cloud.sleuth.MilliSpan; 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.integration.channel.AbstractMessageChannel; @@ -13,6 +9,8 @@ import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.ChannelInterceptorAdapter; +import java.util.Random; + /** * Abstraction over classes related to channel intercepting * @@ -45,19 +43,19 @@ abstract class AbstractTraceChannelInterceptor extends ChannelInterceptorAdapter * trace id passed initially. */ Span buildSpan(Message message) { - if (!hasHeader(message, Trace.TRACE_ID_NAME) || !hasHeader(message, Trace.SPAN_ID_NAME)) { + if (!hasHeader(message, Span.TRACE_ID_NAME) || !hasHeader(message, Span.SPAN_ID_NAME)) { return null; // cannot build a span without ids } - long spanId = hasHeader(message, Trace.SPAN_ID_NAME) ? - getHeader(message, Trace.SPAN_ID_NAME, Long.class) : this.random.nextLong(); - long traceId = getHeader(message, Trace.TRACE_ID_NAME, Long.class); - MilliSpan.MilliSpanBuilder span = MilliSpan.builder().traceId(traceId).spanId(spanId); - Long parentId = getHeader(message, Trace.PARENT_ID_NAME, Long.class); - if (message.getHeaders().containsKey(Trace.NOT_SAMPLED_NAME)) { + long spanId = hasHeader(message, Span.SPAN_ID_NAME) ? + getHeader(message, Span.SPAN_ID_NAME, Long.class) : this.random.nextLong(); + long traceId = getHeader(message, Span.TRACE_ID_NAME, Long.class); + Span.SpanBuilder span = Span.builder().traceId(traceId).spanId(spanId); + Long parentId = getHeader(message, Span.PARENT_ID_NAME, Long.class); + if (message.getHeaders().containsKey(Span.NOT_SAMPLED_NAME)) { span.exportable(false); } - String processId = getHeader(message, Trace.PROCESS_ID_NAME); - String spanName = getHeader(message, Trace.SPAN_NAME_NAME); + String processId = getHeader(message, Span.PROCESS_ID_NAME); + String spanName = getHeader(message, Span.SPAN_NAME_NAME); if (spanName != null) { span.name(spanName); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/SpanMessageHeaders.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/SpanMessageHeaders.java index b881eb0d2..cae280089 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/SpanMessageHeaders.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/SpanMessageHeaders.java @@ -16,17 +16,16 @@ package org.springframework.cloud.sleuth.instrument.integration; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.instrument.TraceKeys; import org.springframework.integration.support.MessageBuilder; import org.springframework.messaging.Message; import org.springframework.util.StringUtils; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + /** * Utility for manipulating message headers related to span data. * @@ -38,25 +37,25 @@ public class SpanMessageHeaders { public static Message addSpanHeaders(TraceKeys traceKeys, Message message, Span span) { if (span == null) { - if (!message.getHeaders().containsKey(Trace.NOT_SAMPLED_NAME)) { + if (!message.getHeaders().containsKey(Span.NOT_SAMPLED_NAME)) { return MessageBuilder.fromMessage(message) - .setHeader(Trace.NOT_SAMPLED_NAME, "").build(); + .setHeader(Span.NOT_SAMPLED_NAME, "").build(); } return message; } Map headers = new HashMap<>(); - addHeader(headers, Trace.TRACE_ID_NAME, span.getTraceId()); - addHeader(headers, Trace.SPAN_ID_NAME, span.getSpanId()); + addHeader(headers, Span.TRACE_ID_NAME, span.getTraceId()); + addHeader(headers, Span.SPAN_ID_NAME, span.getSpanId()); if (span.isExportable()) { addAnnotations(traceKeys, message, span); - addHeader(headers, Trace.PARENT_ID_NAME, getFirst(span.getParents())); - addHeader(headers, Trace.SPAN_NAME_NAME, span.getName()); - addHeader(headers, Trace.PROCESS_ID_NAME, span.getProcessId()); + addHeader(headers, Span.PARENT_ID_NAME, getFirst(span.getParents())); + addHeader(headers, Span.SPAN_NAME_NAME, span.getName()); + addHeader(headers, Span.PROCESS_ID_NAME, span.getProcessId()); } else { - addHeader(headers, Trace.NOT_SAMPLED_NAME, ""); + addHeader(headers, Span.NOT_SAMPLED_NAME, ""); } return MessageBuilder.fromMessage(message).copyHeaders(headers).build(); } @@ -100,7 +99,7 @@ public class SpanMessageHeaders { private static void addHeader(Map headers, String name, Long value) { if (value != null) { - addHeader(headers, name, Span.IdConverter.toHex(value)); + addHeader(headers, name, Span.toHex(value)); } } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/StompMessageBuilder.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/StompMessageBuilder.java index fa16c8b08..3d3351bdb 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/StompMessageBuilder.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/StompMessageBuilder.java @@ -16,18 +16,17 @@ package org.springframework.cloud.sleuth.instrument.integration; -import java.util.List; -import java.util.Map; -import java.util.TreeMap; - import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.messaging.Message; import org.springframework.messaging.simp.SimpMessageHeaderAccessor; import org.springframework.messaging.simp.SimpMessageType; import org.springframework.util.StringUtils; +import java.util.List; +import java.util.Map; +import java.util.TreeMap; + /** * Builder class to create STOMP message * @@ -62,16 +61,16 @@ public class StompMessageBuilder { public StompMessageBuilder setHeadersFromSpan(final Span span) { if (span != null) { - setHeaderIfAbsent(Trace.SPAN_ID_NAME, span.getSpanId()); - setHeaderIfAbsent(Trace.TRACE_ID_NAME, span.getTraceId()); - setHeaderIfAbsent(Trace.SPAN_NAME_NAME, span.getName()); - Long parentId = getParentId(TraceContextHolder.getCurrentSpan()); + setHeaderIfAbsent(Span.SPAN_ID_NAME, span.getSpanId()); + setHeaderIfAbsent(Span.TRACE_ID_NAME, span.getTraceId()); + setHeaderIfAbsent(Span.SPAN_NAME_NAME, span.getName()); + Long parentId = getParentId(SpanContextHolder.getCurrentSpan()); if (parentId != null) - setHeaderIfAbsent(Trace.PARENT_ID_NAME, parentId); + setHeaderIfAbsent(Span.PARENT_ID_NAME, parentId); String processId = span.getProcessId(); if (StringUtils.hasText(processId)) - setHeaderIfAbsent(Trace.PROCESS_ID_NAME, processId); + setHeaderIfAbsent(Span.PROCESS_ID_NAME, processId); } return this; } @@ -101,12 +100,12 @@ public class StompMessageBuilder { case SimpMessageHeaderAccessor.HEART_BEAT_HEADER: case SimpMessageHeaderAccessor.ORIGINAL_DESTINATION: case SimpMessageHeaderAccessor.IGNORE_ERROR: - case Trace.NOT_SAMPLED_NAME: - case Trace.PARENT_ID_NAME: - case Trace.PROCESS_ID_NAME: - case Trace.SPAN_ID_NAME: - case Trace.SPAN_NAME_NAME: - case Trace.TRACE_ID_NAME: + case Span.NOT_SAMPLED_NAME: + case Span.PARENT_ID_NAME: + case Span.PROCESS_ID_NAME: + case Span.SPAN_ID_NAME: + case Span.SPAN_NAME_NAME: + case Span.TRACE_ID_NAME: accessor.setHeader(key, value); break; default: diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceChannelInterceptor.java index 679111fea..605bf390c 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceChannelInterceptor.java @@ -16,23 +16,22 @@ package org.springframework.cloud.sleuth.instrument.integration; -import java.util.Random; - 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.IsTracingSampler; import org.springframework.messaging.Message; import org.springframework.messaging.MessageChannel; +import java.util.Random; + /** * @author Dave Syer * */ public class TraceChannelInterceptor extends AbstractTraceChannelInterceptor { - private ThreadLocal traceHolder = new ThreadLocal<>(); + private ThreadLocal traceHolder = new ThreadLocal<>(); public TraceChannelInterceptor(Tracer tracer, TraceKeys traceKeys, Random random) { super(tracer, traceKeys, random); @@ -40,7 +39,7 @@ public class TraceChannelInterceptor extends AbstractTraceChannelInterceptor { @Override public void postSend(Message message, MessageChannel channel, boolean sent) { - Trace trace = this.traceHolder.get(); + Span trace = this.traceHolder.get(); // Double close to clean up the parent (remote span as well) getTracer().close(getTracer().close(trace)); this.traceHolder.remove(); @@ -53,16 +52,16 @@ public class TraceChannelInterceptor extends AbstractTraceChannelInterceptor { getTracer().getCurrentSpan()); } String name = getMessageChannelName(channel); - Trace trace = startSpan(buildSpan(message), name, message); - this.traceHolder.set(trace); - return SpanMessageHeaders.addSpanHeaders(getTraceKeys(), message, trace.getSpan()); + Span span = startSpan(buildSpan(message), name, message); + this.traceHolder.set(span); + return SpanMessageHeaders.addSpanHeaders(getTraceKeys(), message, span); } - private Trace startSpan(Span span, String name, Message message) { + private Span startSpan(Span span, String name, Message message) { if (span != null) { return getTracer().joinTrace(name, span); } - if (message.getHeaders().containsKey(Trace.NOT_SAMPLED_NAME)) { + if (message.getHeaders().containsKey(Span.NOT_SAMPLED_NAME)) { return getTracer().startTrace(name, IsTracingSampler.INSTANCE); } return getTracer().startTrace(name); 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 3a51492e8..0faa67801 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 @@ -147,7 +147,7 @@ public class TraceContextPropagationChannelInterceptor extends ChannelIntercepto } } public void setHeader(Map headers, String name, long value) { - setHeader(headers, name, Span.IdConverter.toHex(value)); + setHeader(headers, name, Span.toHex(value)); } @Override diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptor.java index 23ef86df4..e343dfd4d 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageChannelInterceptor.java @@ -15,16 +15,15 @@ */ package org.springframework.cloud.sleuth.instrument.integration; -import java.util.Random; - 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.messaging.Message; import org.springframework.messaging.MessageChannel; import org.springframework.messaging.support.ChannelInterceptor; +import java.util.Random; + /** * Interceptor for Stomp Messages sent over websocket * @@ -33,7 +32,7 @@ import org.springframework.messaging.support.ChannelInterceptor; * */ public class TraceStompMessageChannelInterceptor extends AbstractTraceChannelInterceptor implements ChannelInterceptor { - private ThreadLocal traceScopeHolder = new ThreadLocal(); + private ThreadLocal traceScopeHolder = new ThreadLocal<>(); public TraceStompMessageChannelInterceptor(Tracer tracer, TraceKeys traceKeys, Random random) { super(tracer, traceKeys, random); @@ -41,16 +40,16 @@ public class TraceStompMessageChannelInterceptor extends AbstractTraceChannelInt @Override public Message preSend(Message message, MessageChannel channel) { - if (getTracer().isTracing() || message.getHeaders().containsKey(Trace.NOT_SAMPLED_NAME)) { + if (getTracer().isTracing() || message.getHeaders().containsKey(Span.NOT_SAMPLED_NAME)) { return StompMessageBuilder.fromMessage(message).setHeadersFromSpan(getTracer().getCurrentSpan()).build(); } String name = getMessageChannelName(channel); - Trace trace = startSpan(buildSpan(message), name); - this.traceScopeHolder.set(trace); - return StompMessageBuilder.fromMessage(message).setHeadersFromSpan(trace.getSpan()).build(); + Span span = startSpan(buildSpan(message), name); + this.traceScopeHolder.set(span); + return StompMessageBuilder.fromMessage(message).setHeadersFromSpan(span).build(); } - private Trace startSpan(Span span, String name) { + private Span startSpan(Span span, String name) { if (span != null) { return getTracer().joinTrace(name, span); } @@ -59,8 +58,8 @@ public class TraceStompMessageChannelInterceptor extends AbstractTraceChannelInt @Override public void postSend(Message message, MessageChannel channel, boolean sent) { - final ThreadLocal traceScopeHolder = this.traceScopeHolder; - Trace traceInScope = traceScopeHolder.get(); + final ThreadLocal traceScopeHolder = this.traceScopeHolder; + Span traceInScope = traceScopeHolder.get(); getTracer().close(traceInScope); traceScopeHolder.remove(); } diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptor.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptor.java index 98c2a6b84..0dd79a057 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptor.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/instrument/integration/TraceStompMessageContextPropagationChannelInterceptor.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.cloud.sleuth.instrument.TraceKeys; import org.springframework.integration.channel.DirectChannel; @@ -40,7 +39,7 @@ public class TraceStompMessageContextPropagationChannelInterceptor extends Chann implements ExecutorChannelInterceptor { private final Tracer tracer; - private final static ThreadLocal ORIGINAL_CONTEXT = new ThreadLocal<>(); + private final static ThreadLocal ORIGINAL_CONTEXT = new ThreadLocal<>(); private TraceKeys traceKeys; public TraceStompMessageContextPropagationChannelInterceptor(Tracer tracer, TraceKeys traceKeys) { @@ -94,12 +93,12 @@ public class TraceStompMessageContextPropagationChannelInterceptor extends Chann protected void populatePropagatedContext(Span span) { 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(); } 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 0f2707558..64748ddb9 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 @@ -46,12 +46,12 @@ public class TraceSchedulingAspect { @Around("execution (@org.springframework.scheduling.annotation.Scheduled * *.*(..))") public Object traceBackgroundThread(final ProceedingJoinPoint pjp) throws Throwable { - Span trace = this.tracer.startTrace(pjp.toShortString()); + Span span = this.tracer.startTrace(pjp.toShortString()); try { return pjp.proceed(); } finally { - this.tracer.close(trace); + this.tracer.close(span); } } 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 a98865d3b..d1dd8c3eb 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 @@ -15,23 +15,8 @@ */ package org.springframework.cloud.sleuth.instrument.web; -import static org.springframework.util.StringUtils.hasText; - -import java.io.IOException; -import java.util.ArrayList; -import java.util.Collections; -import java.util.Enumeration; -import java.util.Random; -import java.util.regex.Pattern; - -import javax.servlet.FilterChain; -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -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.Span.SpanBuilder; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.event.ServerReceivedEvent; import org.springframework.cloud.sleuth.event.ServerSentEvent; @@ -47,6 +32,19 @@ import org.springframework.util.StringUtils; import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.util.UrlPathHelper; +import javax.servlet.FilterChain; +import javax.servlet.ServletException; +import javax.servlet.http.HttpServletRequest; +import javax.servlet.http.HttpServletResponse; +import java.io.IOException; +import java.util.ArrayList; +import java.util.Collections; +import java.util.Enumeration; +import java.util.Random; +import java.util.regex.Pattern; + +import static org.springframework.util.StringUtils.hasText; + /** * 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 @@ -111,9 +109,9 @@ public class TraceFilter extends OncePerRequestFilter boolean skip = this.skipPattern.matcher(uri).matches() || getHeader(request, response, Span.NOT_SAMPLED_NAME) != null; - Span trace = (Span) request.getAttribute(TRACE_REQUEST_ATTR); - if (trace != null) { - this.tracer.continueSpan(trace); + Span spanFromRequest = (Span) request.getAttribute(TRACE_REQUEST_ATTR); + if (spanFromRequest != null) { + this.tracer.continueSpan(spanFromRequest); } else if (skip) { addToResponseIfNotPresent(response, Span.NOT_SAMPLED_NAME, ""); @@ -121,11 +119,12 @@ public class TraceFilter extends OncePerRequestFilter String name = "http" + uri; if (hasHeader(request, response, Span.TRACE_ID_NAME)) { - long traceId = Span.IdConverter.fromHex(getHeader(request, response, Span.TRACE_ID_NAME)); + long traceId = Span.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(); + Span.fromHex(getHeader(request, response, Span.SPAN_ID_NAME)) : + this.random.nextLong(); - MilliSpanBuilder span = MilliSpan.builder().traceId(traceId).spanId(spanId); + SpanBuilder span = Span.builder().traceId(traceId).spanId(spanId); if (skip) { span.exportable(false); } @@ -140,25 +139,26 @@ public class TraceFilter extends OncePerRequestFilter span.processId(processId); } if (hasHeader(request, response, Span.PARENT_ID_NAME)) { - span.parent(Span.IdConverter.fromHex(getHeader(request, response, Span.PARENT_ID_NAME))); + span.parent( + Span.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)); - request.setAttribute(TRACE_REQUEST_ATTR, trace); + spanFromRequest = this.tracer.joinTrace(name, parent); + publish(new ServerReceivedEvent(this, parent, spanFromRequest)); + request.setAttribute(TRACE_REQUEST_ATTR, spanFromRequest); } else { if (skip) { - trace = this.tracer.startTrace(name, IsTracingSampler.INSTANCE + spanFromRequest = this.tracer.startTrace(name, IsTracingSampler.INSTANCE ); } else { - trace = this.tracer.startTrace(name); + spanFromRequest = this.tracer.startTrace(name); } - request.setAttribute(TRACE_REQUEST_ATTR, trace); + request.setAttribute(TRACE_REQUEST_ATTR, spanFromRequest); } Throwable exception = null; @@ -180,23 +180,23 @@ public class TraceFilter extends OncePerRequestFilter if (skip) { addToResponseIfNotPresent(response, Span.NOT_SAMPLED_NAME, ""); } - if (trace != null) { + if (spanFromRequest != null) { addResponseTags(response, exception); - addResponseHeaders(response, trace); - if (trace.hasSavedSpan()) { - publish(new ServerSentEvent(this, trace.getSavedSpan(), - trace)); + addResponseHeaders(response, spanFromRequest); + if (spanFromRequest.hasSavedSpan()) { + publish(new ServerSentEvent(this, spanFromRequest.getSavedSpan(), + spanFromRequest)); } // Double close to clean up the parent (remote span as well) - this.tracer.close(this.tracer.close(trace)); + this.tracer.close(this.tracer.close(spanFromRequest)); } } } private void addResponseHeaders(HttpServletResponse response, Span span) { if (span != null) { - response.addHeader(Span.SPAN_ID_NAME, Span.IdConverter.toHex(span.getSpanId())); - response.addHeader(Span.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); + response.addHeader(Span.SPAN_ID_NAME, Span.toHex(span.getSpanId())); + response.addHeader(Span.TRACE_ID_NAME, Span.toHex(span.getTraceId())); } } 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 cbcae4f76..ed2f073d3 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 @@ -125,7 +125,7 @@ public class TraceFeignClientAutoConfiguration { setHeader(template, Span.NOT_SAMPLED_NAME, ""); return; } - template.header(Span.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); + template.header(Span.TRACE_ID_NAME, Span.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)); @@ -155,7 +155,7 @@ public class TraceFeignClientAutoConfiguration { public void setHeader(RequestTemplate request, String name, Long value) { if (value != null) { - setHeader(request, name, Span.IdConverter.toHex(value)); + setHeader(request, name, Span.toHex(value)); } } @@ -183,7 +183,7 @@ public class TraceFeignClientAutoConfiguration { public void setHeader(Map> headers, String name, Long value) { if (value != null ){ - setHeader(headers, name, Span.IdConverter.toHex(value)); + setHeader(headers, name, Span.toHex(value)); } } 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 750839e93..272f17339 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 @@ -99,7 +99,7 @@ ApplicationEventPublisherAware { public void setHeader(HttpRequest request, String name, Long value) { if (value != null) { - setHeader(request, name, Span.IdConverter.toHex(value)); + setHeader(request, name, Span.toHex(value)); } } 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 35bf98f8d..cdac263c3 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 @@ -93,7 +93,7 @@ ApplicationEventPublisherAware { } } public void setHeader(Map request, String name, Long value) { - setHeader(request, name, Span.IdConverter.toHex(value)); + setHeader(request, name, Span.toHex(value)); } @Override 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 5a4a39f46..29e08177b 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 @@ -121,7 +121,7 @@ public class TraceRestClientRibbonCommandFactory extends RestClientRibbonCommand } public void setHeader(HttpRequest.Builder builder, String name, Long value) { - setHeader(builder, name, Span.IdConverter.toHex(value)); + setHeader(builder, name, Span.toHex(value)); } private Span getCurrentSpan() { 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 8b38512f4..4523c0f92 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 @@ -16,6 +16,7 @@ package org.springframework.cloud.sleuth.log; +import lombok.extern.slf4j.Slf4j; import org.slf4j.MDC; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.event.SpanAcquiredEvent; @@ -25,8 +26,6 @@ import org.springframework.context.event.EventListener; import org.springframework.core.Ordered; import org.springframework.core.annotation.Order; -import lombok.extern.slf4j.Slf4j; - /** * @author Spencer Gibb */ @@ -37,9 +36,9 @@ public class Slf4jSpanListener { @Order(Ordered.LOWEST_PRECEDENCE) public void start(SpanAcquiredEvent event) { Span span = event.getSpan(); - MDC.put(Span.SPAN_ID_NAME, Span.IdConverter.toHex(span.getSpanId())); + MDC.put(Span.SPAN_ID_NAME, Span.toHex(span.getSpanId())); MDC.put(Span.SPAN_EXPORT_NAME, String.valueOf(span.isExportable())); - MDC.put(Span.TRACE_ID_NAME, Span.IdConverter.toHex(span.getTraceId())); + MDC.put(Span.TRACE_ID_NAME, Span.toHex(span.getTraceId())); log.trace("Starting span: {}", span); if (event.getParent() != null) { log.trace("With parent: {}", event.getParent()); @@ -50,8 +49,8 @@ public class Slf4jSpanListener { @Order(Ordered.LOWEST_PRECEDENCE) public void continued(SpanContinuedEvent event) { Span span = event.getSpan(); - 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_ID_NAME, Span.toHex(span.getSpanId())); + MDC.put(Span.TRACE_ID_NAME, Span.toHex(span.getTraceId())); MDC.put(Span.SPAN_EXPORT_NAME, String.valueOf(span.isExportable())); log.trace("Continued span: {}", event.getSpan()); } @@ -62,7 +61,7 @@ public class Slf4jSpanListener { log.trace("Stopped span: {}", event.getSpan()); if (event.getParent() != null) { log.trace("With parent: {}", event.getParent()); - MDC.put(Span.SPAN_ID_NAME, Span.IdConverter.toHex(event.getParent().getSpanId())); + MDC.put(Span.SPAN_ID_NAME, Span.toHex(event.getParent().getSpanId())); MDC.put(Span.SPAN_EXPORT_NAME, String.valueOf(event.getParent().isExportable())); } else { diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/AlwaysSampler.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/AlwaysSampler.java index cb517f2ee..271218902 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/AlwaysSampler.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/AlwaysSampler.java @@ -21,7 +21,7 @@ import org.springframework.cloud.sleuth.Sampler; /** * @author Spencer Gibb */ -public class AlwaysSampler implements Sampler { +public class AlwaysSampler implements Sampler { @Override public boolean next() { return true; 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 a28c937a6..d9bc6056b 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 @@ -22,7 +22,7 @@ import org.springframework.cloud.sleuth.trace.SpanContextHolder; /** * @author Spencer Gibb */ -public class IsTracingSampler implements Sampler { +public class IsTracingSampler implements Sampler { public static IsTracingSampler INSTANCE = new IsTracingSampler(); diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/PercentageBasedSampler.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/PercentageBasedSampler.java index 01902c79e..8c9923d09 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/PercentageBasedSampler.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/sampler/PercentageBasedSampler.java @@ -20,7 +20,7 @@ import org.springframework.cloud.sleuth.TraceAccessor; * @author Marcin Grzejszczak * @author Adrian Cole */ -public class PercentageBasedSampler implements Sampler { +public class PercentageBasedSampler implements Sampler { private final SamplerConfiguration configuration; private final TraceAccessor traceAccessor; 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 4dca2f73f..bbb4c8876 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 @@ -19,5 +19,5 @@ package org.springframework.cloud.sleuth.template; import org.springframework.cloud.sleuth.Span; public interface TraceCallback { - T doInTrace(Span trace); + T doInTrace(Span span); } \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/template/TraceTemplate.java b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/template/TraceTemplate.java index 5e5da4bdf..aa6f60876 100644 --- a/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/template/TraceTemplate.java +++ b/spring-cloud-sleuth-core/src/main/java/org/springframework/cloud/sleuth/template/TraceTemplate.java @@ -16,7 +16,7 @@ package org.springframework.cloud.sleuth.template; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.instrument.TraceDelegate; @@ -35,11 +35,11 @@ public class TraceTemplate implements TraceOperations { public T trace(final TraceCallback callback) { if (this.tracer.isTracing()) { DelegateCallback delegate = new DelegateCallback<>(this.tracer); - Trace trace = delegate.startSpan(); + Span span = delegate.startSpan(); try { - return callback.doInTrace(trace); + return callback.doInTrace(span); } finally { - this.tracer.close(trace); + this.tracer.close(span); } } else { return callback.doInTrace(null); @@ -53,7 +53,7 @@ public class TraceTemplate implements TraceOperations { } @Override - protected Trace startSpan() { + protected Span startSpan() { return super.startSpan(); } 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 7cd0de715..7b9d4f62c 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 @@ -16,12 +16,6 @@ package org.springframework.cloud.sleuth.trace; -import static org.springframework.cloud.sleuth.util.ExceptionUtils.warn; - -import java.util.Random; -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.Tracer; @@ -33,18 +27,23 @@ import org.springframework.cloud.sleuth.instrument.TraceRunnable; import org.springframework.cloud.sleuth.util.ExceptionUtils; import org.springframework.context.ApplicationEventPublisher; +import java.util.Random; +import java.util.concurrent.Callable; + +import static org.springframework.cloud.sleuth.util.ExceptionUtils.warn; + /** * @author Spencer Gibb */ public class DefaultTracer implements Tracer { - private final Sampler defaultSampler; + private final Sampler defaultSampler; private final ApplicationEventPublisher publisher; private final Random random; - public DefaultTracer(Sampler defaultSampler, + public DefaultTracer(Sampler defaultSampler, Random random, ApplicationEventPublisher publisher) { this.defaultSampler = defaultSampler; this.random = random; @@ -58,7 +57,7 @@ public class DefaultTracer implements Tracer { } Span currentSpan = getCurrentSpan(); if (currentSpan != null && !parent.equals(currentSpan)) { - warn("Trace client warn: thread " + Thread.currentThread().getName() + warn("Warn during joining trace: thread " + Thread.currentThread().getName() + " tried to start a new Span " + "with parent " + parent.toString() + ", but there is already a " + "currentSpan " + currentSpan); } @@ -71,15 +70,15 @@ public class DefaultTracer implements Tracer { } @Override - public Span startTrace(String name, Sampler s) { - Span span = null; + public Span startTrace(String name, Sampler s) { + Span span; if (isTracing() || s.next()) { span = createChild(getCurrentSpan(), name); } else { // Non-exportable so we keep the trace but not other data long id = createId(); - span = MilliSpan.builder().begin(System.currentTimeMillis()).name(name) + span = Span.builder().begin(System.currentTimeMillis()).name(name) .traceId(id).spanId(id).exportable(false).build(); this.publisher.publishEvent(new SpanAcquiredEvent(this, span)); } @@ -123,22 +122,15 @@ public class DefaultTracer implements Tracer { + ". You have " + "probably forgotten to close or detach " + cur); } else { - if (span != null) { - span.stop(); - if (savedSpan != null - && span.getParents().contains(savedSpan.getSpanId())) { - this.publisher.publishEvent( - new SpanReleasedEvent(this, savedSpan, span)); - SpanContextHolder.setCurrentSpan(savedSpan); - } - else { - if (!span.isRemote()) { - this.publisher.publishEvent(new SpanReleasedEvent(this, span)); - } - SpanContextHolder.removeCurrentSpan(); - } + span.stop(); + if (savedSpan != null && span.getParents().contains(savedSpan.getSpanId())) { + this.publisher.publishEvent(new SpanReleasedEvent(this, savedSpan, span)); + SpanContextHolder.setCurrentSpan(savedSpan); } else { + if (!span.isRemote()) { + this.publisher.publishEvent(new SpanReleasedEvent(this, span)); + } SpanContextHolder.removeCurrentSpan(); } } @@ -148,7 +140,7 @@ public class DefaultTracer implements Tracer { protected Span createChild(Span parent, String name) { long id = createId(); if (parent == null) { - MilliSpan span = MilliSpan.builder().begin(System.currentTimeMillis()) + Span span = Span.builder().begin(System.currentTimeMillis()) .name(name).traceId(id).spanId(id).build(); this.publisher.publishEvent(new SpanAcquiredEvent(this, span)); return span; @@ -158,7 +150,7 @@ public class DefaultTracer implements Tracer { Span span = createSpan(null, parent); SpanContextHolder.setCurrentSpan(span); } - MilliSpan span = MilliSpan.builder().begin(System.currentTimeMillis()) + Span span = Span.builder().begin(System.currentTimeMillis()) .name(name).traceId(parent.getTraceId()).parent(parent.getSpanId()) .spanId(id).processId(parent.getProcessId()).build(); this.publisher.publishEvent(new SpanAcquiredEvent(this, parent, span)); @@ -181,7 +173,7 @@ public class DefaultTracer implements Tracer { } protected Span createSpan(Span saved, Span span) { - return new MilliSpan(span, saved); + return new Span(span, saved); } @Override 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 f3f4d537a..7ccfd59eb 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 @@ -67,12 +67,12 @@ public class DefaultTraceManagerTests { DefaultTracer traceManager = new DefaultTracer(new IsTracingSampler(), new Random(), publisher); - Span trace = traceManager.startTrace(CREATE_SIMPLE_TRACE, new AlwaysSampler()); + Span span = traceManager.startTrace(CREATE_SIMPLE_TRACE, new AlwaysSampler()); try { importantWork1(traceManager); } finally { - traceManager.close(trace); + traceManager.close(span); } verify(publisher, times(NUM_SPANS)).publishEvent(isA(SpanAcquiredEvent.class)); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/MilliSpanTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/MilliSpanTests.java deleted file mode 100644 index e9a348bef..000000000 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/MilliSpanTests.java +++ /dev/null @@ -1,43 +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 org.junit.Test; - -import java.util.Collections; - -/** - * @author Rob Winch - * @author Spencer Gibb - */ -public class MilliSpanTests { - - @Test(expected = UnsupportedOperationException.class) - public void getAnnotationsReadOnly() { - MilliSpan span = new MilliSpan(1, 2, "name", 1L, Collections.emptyList(), 2L, true, true, "process"); - - span.tags().put("a", "b"); - } - - - @Test(expected = UnsupportedOperationException.class) - public void getTimelineAnnotationsReadOnly() { - MilliSpan span = new MilliSpan(1, 2, "name", 1L, Collections.emptyList(), 2L, true, true, "process"); - - span.logs().add(new Log(1, "1")); - } -} \ No newline at end of file diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/SpanTest.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/SpanTest.java index 1f4e341fc..4326257df 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/SpanTest.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/SpanTest.java @@ -2,10 +2,14 @@ package org.springframework.cloud.sleuth; import org.junit.Test; +import java.util.Collections; + import static org.assertj.core.api.BDDAssertions.then; /** * @author Marcin Grzejszczak + * @author Rob Winch + * @author Spencer Gibb */ public class SpanTest { @@ -13,7 +17,7 @@ public class SpanTest { public void should_convert_long_to_hex_string() throws Exception { long someLong = 123123L; - String hexString = Span.IdConverter.toHex(someLong); + String hexString = Span.toHex(someLong); then(hexString).isEqualTo("1e0f3"); } @@ -22,13 +26,27 @@ public class SpanTest { public void should_convert_hex_string_to_long() throws Exception { String hexString = "1e0f3"; - long someLong = Span.IdConverter.fromHex(hexString); + long someLong = Span.fromHex(hexString); then(someLong).isEqualTo(123123L); } @Test(expected = IllegalArgumentException.class) public void should_throw_exception_when_null_string_is_to_be_converted_to_long() throws Exception { - Span.IdConverter.fromHex(null); + Span.fromHex(null); + } + + @Test(expected = UnsupportedOperationException.class) public void getAnnotationsReadOnly() { + Span span = new Span(1, 2, "name", 1L, Collections.emptyList(), 2L, true, + true, "process"); + + span.tags().put("a", "b"); + } + + @Test(expected = UnsupportedOperationException.class) public void getTimelineAnnotationsReadOnly() { + Span span = new Span(1, 2, "name", 1L, Collections.emptyList(), 2L, true, + true, "process"); + + span.logs().add(new Log(1, "1")); } } \ No newline at end of file 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 5966d88cc..bf154592a 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 @@ -34,15 +34,15 @@ public class TraceCallableTests { @Test public void should_not_see_same_trace_id_in_successive_tasks() throws Exception { - Span firstTrace = givenCallableGetsSubmitted( + Span firstSpan = givenCallableGetsSubmitted( thatRetrievesTraceFromThreadLocal()); - Span secondTrace = whenCallableGetsSubmitted( + Span secondSpan = whenCallableGetsSubmitted( thatRetrievesTraceFromThreadLocal()); - then(secondTrace.getTraceId()) - .isNotEqualTo(firstTrace.getTraceId()); - then(secondTrace.getSavedSpan()).isNull(); + then(secondSpan.getTraceId()) + .isNotEqualTo(firstSpan.getTraceId()); + then(secondSpan.getSavedSpan()).isNull(); } @Test @@ -50,10 +50,10 @@ public class TraceCallableTests { throws Exception { givenCallableGetsSubmitted(thatRetrievesTraceFromThreadLocal()); - Span secondTrace = whenNonTraceableCallableGetsSubmitted( + Span secondSpan = whenNonTraceableCallableGetsSubmitted( thatRetrievesTraceFromThreadLocal()); - then(secondTrace).isNull(); + then(secondSpan).isNull(); } @Test @@ -64,10 +64,10 @@ public class TraceCallableTests { then(parent).as("parent").isNotNull(); then(child.getSavedSpan()).isEqualTo(parent); - Span secondTrace = whenNonTraceableCallableGetsSubmitted( + Span secondSpan = whenNonTraceableCallableGetsSubmitted( thatRetrievesTraceFromThreadLocal()); - then(secondTrace).isNull(); + then(secondSpan).isNull(); } private Span givenSpanIsAlreadyActive() { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/TraceRunnableTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/TraceRunnableTests.java index c23dee40a..14017a032 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/TraceRunnableTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/TraceRunnableTests.java @@ -1,23 +1,23 @@ package org.springframework.cloud.sleuth.instrument; -import static org.assertj.core.api.BDDAssertions.then; - -import java.util.Random; -import java.util.concurrent.ExecutorService; -import java.util.concurrent.Executors; - import org.junit.After; 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; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +import static org.springframework.cloud.sleuth.assertions.SleuthAssertions.then; + @RunWith(MockitoJUnitRunner.class) public class TraceRunnableTests { @@ -27,7 +27,7 @@ public class TraceRunnableTests { @After public void cleanup() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @Test @@ -36,19 +36,19 @@ public class TraceRunnableTests { // given TraceKeepingRunnable traceKeepingRunnable = runnableThatRetrievesTraceFromThreadLocal(); givenRunnableGetsSubmitted(traceKeepingRunnable); - Trace firstTrace = traceKeepingRunnable.trace; - then(firstTrace).as("first trace").isNotNull(); + Span firstSpan = traceKeepingRunnable.span; + then(firstSpan).as("first span").isNotNull(); // when whenRunnableGetsSubmitted(traceKeepingRunnable); // then - Trace secondTrace = traceKeepingRunnable.trace; - then(secondTrace.getSpan().getTraceId()).as("second trace id") - .isNotEqualTo(firstTrace.getSpan().getTraceId()).as("first trace id"); + Span secondSpan = traceKeepingRunnable.span; + then(secondSpan.getTraceId()).as("second span id") + .isNotEqualTo(firstSpan.getTraceId()).as("first span id"); // and - then(secondTrace.getSaved()).as("saved trace as remnant of first trace") + then(secondSpan.getSavedSpan()).as("saved span as remnant of first span") .isNull(); } @@ -58,15 +58,15 @@ public class TraceRunnableTests { // given TraceKeepingRunnable traceKeepingRunnable = runnableThatRetrievesTraceFromThreadLocal(); givenRunnableGetsSubmitted(traceKeepingRunnable); - Trace firstTrace = traceKeepingRunnable.trace; - then(firstTrace).as("expected trace").isNotNull(); + Span firstSpan = traceKeepingRunnable.span; + then(firstSpan).as("expected span").isNotNull(); // when whenNonTraceableRunnableGetsSubmitted(traceKeepingRunnable); // then - Trace secondTrace = traceKeepingRunnable.trace; - then(secondTrace).as("unexpected trace").isNull(); + Span secondSpan = traceKeepingRunnable.span; + then(secondSpan).as("unexpected span").isNull(); } private TraceKeepingRunnable runnableThatRetrievesTraceFromThreadLocal() { @@ -87,11 +87,11 @@ public class TraceRunnableTests { } static class TraceKeepingRunnable implements Runnable { - public Trace trace; + public Span span; @Override public void run() { - this.trace = TraceContextHolder.getCurrentTrace(); + this.span = SpanContextHolder.getCurrentSpan(); } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/executor/TraceableExecutorServiceTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/executor/TraceableExecutorServiceTests.java index f95ac3be1..934353bdd 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/executor/TraceableExecutorServiceTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/executor/TraceableExecutorServiceTests.java @@ -1,7 +1,18 @@ package org.springframework.cloud.sleuth.instrument.executor; -import static java.util.stream.Collectors.toList; -import static org.assertj.core.api.BDDAssertions.then; +import lombok.SneakyThrows; +import org.junit.After; +import org.junit.Before; +import org.junit.Test; +import org.junit.runner.RunWith; +import org.mockito.Mock; +import org.mockito.runners.MockitoJUnitRunner; +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.SpanContextHolder; +import org.springframework.context.ApplicationEventPublisher; import java.util.ArrayList; import java.util.List; @@ -12,21 +23,8 @@ import java.util.concurrent.ConcurrentLinkedQueue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; -import org.junit.After; -import org.junit.Before; -import org.junit.Test; -import org.junit.runner.RunWith; -import org.mockito.Mock; -import org.mockito.runners.MockitoJUnitRunner; -import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; -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.context.ApplicationEventPublisher; - -import lombok.SneakyThrows; +import static java.util.stream.Collectors.toList; +import static org.assertj.core.api.BDDAssertions.then; @RunWith(MockitoJUnitRunner.class) public class TraceableExecutorServiceTests { @@ -42,7 +40,7 @@ public class TraceableExecutorServiceTests { public void setup() { this.tracer = new DefaultTracer(new AlwaysSampler(), new Random(), this.publisher); this.traceManagerableExecutorService = new TraceableExecutorService(this.executorService, this.tracer); - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @After @@ -50,17 +48,17 @@ public class TraceableExecutorServiceTests { this.tracer = null; this.traceManagerableExecutorService.shutdown(); this.executorService.shutdown(); - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @Test @SneakyThrows public void should_propagate_trace_id_and_set_new_span_when_traceable_executor_service_is_executed() { - Trace trace = this.tracer.startTrace("PARENT"); + Span span = this.tracer.startTrace("PARENT"); CompletableFuture.allOf(runnablesExecutedViaTraceManagerableExecutorService()).get(); - this.tracer.close(trace); + this.tracer.close(span); - then(this.spanVerifyingRunnable.traceIds.stream().distinct().collect(toList())).containsOnly(trace.getSpan().getTraceId()); + then(this.spanVerifyingRunnable.traceIds.stream().distinct().collect(toList())).containsOnly(span.getTraceId()); then(this.spanVerifyingRunnable.spanIds.stream().distinct().collect(toList())).hasSize(TOTAL_THREADS); } @@ -79,7 +77,7 @@ public class TraceableExecutorServiceTests { @Override public void run() { - Span span = TraceContextHolder.getCurrentSpan(); + Span span = SpanContextHolder.getCurrentSpan(); this.traceIds.add(span.getTraceId()); this.spanIds.add(span.getSpanId()); } 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 6b3f4b6a3..718bc7a1a 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 @@ -6,7 +6,6 @@ import org.junit.After; import org.junit.Before; import org.junit.Test; import org.mockito.Mockito; -import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.sampler.AlwaysSampler; @@ -40,13 +39,13 @@ public class TraceCommandTests { public void should_remove_span_from_thread_local_after_finishing_work() throws Exception { SpanContextHolder.removeCurrentSpan(); - Span firstTraceFromHystrix = givenACommandWasExecuted(traceReturningCommand()); + Span firstSpanFromHystrix = givenACommandWasExecuted(traceReturningCommand()); - Span secondTraceFromHystrix = whenCommandIsExecuted(traceReturningCommand()); + Span secondSpanFromHystrix = whenCommandIsExecuted(traceReturningCommand()); - 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") + then(secondSpanFromHystrix.getTraceId()).as("second span id") + .isNotEqualTo(firstSpanFromHystrix.getTraceId()).as("first span id"); + then(secondSpanFromHystrix.getSavedSpan()).as("saved span as remnant of first span") .isNull(); } @@ -55,10 +54,10 @@ public class TraceCommandTests { givenATraceIsPresentInTheCurrentThread(); TraceCommand command = traceReturningCommand(); - Span traceFromCommand = whenCommandIsExecuted(command); + Span spanFromCommand = whenCommandIsExecuted(command); - then(traceFromCommand).as("Span from the Hystrix Thread").isNotNull(); - then(traceFromCommand.getTraceId()).isEqualTo(EXPECTED_TRACE_ID); + then(spanFromCommand).as("Span from the Hystrix Thread").isNotNull(); + then(spanFromCommand.getTraceId()).isEqualTo(EXPECTED_TRACE_ID); } @After @@ -67,7 +66,8 @@ public class TraceCommandTests { } private Span givenATraceIsPresentInTheCurrentThread() { - return this.tracer.joinTrace("test", MilliSpan.builder().traceId(EXPECTED_TRACE_ID).build()); + return this.tracer + .joinTrace("test", Span.builder().traceId(EXPECTED_TRACE_ID).build()); } private TraceCommand traceReturningCommand() { diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/AbstractTraceStompIntegrationTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/AbstractTraceStompIntegrationTests.java index 01efe7457..b56c04fa1 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/AbstractTraceStompIntegrationTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/integration/AbstractTraceStompIntegrationTests.java @@ -1,21 +1,21 @@ package org.springframework.cloud.sleuth.instrument.integration; -import static org.assertj.core.api.BDDAssertions.then; - import org.junit.After; import org.junit.Before; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Qualifier; -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.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.messaging.Message; import org.springframework.messaging.support.ExecutorSubscribableChannel; import org.springframework.messaging.support.GenericMessage; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import static org.assertj.core.api.BDDAssertions.then; + @RunWith(SpringJUnit4ClassRunner.class) public abstract class AbstractTraceStompIntegrationTests { @@ -34,11 +34,11 @@ public abstract class AbstractTraceStompIntegrationTests { @After public void close() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); this.channel.unsubscribe(this.stompMessageHandler); } - Trace givenALocallyStartedSpan() { + Span givenALocallyStartedSpan() { return this.tracer.startTrace("testSendMessage", this.sampler); } @@ -52,13 +52,13 @@ public abstract class AbstractTraceStompIntegrationTests { } Long thenSpanIdFromHeadersIsNotEmpty() { - Long header = getValueFromHeaders(Trace.SPAN_ID_NAME, Long.class); + Long header = getValueFromHeaders(Span.SPAN_ID_NAME, Long.class); then(header).as("Span id should not be empty").isNotNull(); return header; } Long thenTraceIdFromHeadersIsNotEmpty() { - Long header = getValueFromHeaders(Trace.TRACE_ID_NAME, Long.class); + Long header = getValueFromHeaders(Span.TRACE_ID_NAME, Long.class); then(header).as("Trace id should not be empty").isNotNull(); return header; } 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 4b078f428..3d1d8bb57 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 @@ -47,7 +47,10 @@ import java.util.ArrayList; import java.util.List; import static org.assertj.core.api.BDDAssertions.then; -import static org.junit.Assert.*; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertNotNull; +import static org.junit.Assert.assertNull; /** * @author Dave Syer @@ -113,7 +116,8 @@ public class TraceChannelInterceptorTests implements MessageHandler { 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(Span.TRACE_ID_NAME, String.class)); + long traceId = Span + .fromHex(this.message.getHeaders().get(Span.TRACE_ID_NAME, String.class)); then(traceId).isEqualTo(10L); then(spanId).isNotEqualTo(20L); assertNull(SpanContextHolder.getCurrentSpan()); @@ -135,10 +139,10 @@ public class TraceChannelInterceptorTests implements MessageHandler { @Test public void headerCreation() { - Span trace = this.tracer.startTrace("testSendMessage", + Span span = this.tracer.startTrace("testSendMessage", new AlwaysSampler()); this.channel.send(MessageBuilder.withPayload("hi").build()); - this.tracer.close(trace); + this.tracer.close(span); assertNotNull("message was null", this.message); String spanId = this.message.getHeaders().get(Span.SPAN_ID_NAME, String.class); @@ -152,10 +156,10 @@ public class TraceChannelInterceptorTests implements MessageHandler { // TODO: Refactor to parametrized test together with sending messages via channel @Test public void headerCreationViaMessagingTemplate() { - Span trace = this.tracer.startTrace("testSendMessage", + Span span = this.tracer.startTrace("testSendMessage", new AlwaysSampler()); this.messagingTemplate.send(MessageBuilder.withPayload("hi").build()); - this.tracer.close(trace); + this.tracer.close(span); assertNotNull("message was null", this.message); String spanId = this.message.getHeaders().get(Span.SPAN_ID_NAME, String.class); 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 631a1a621..978e9e023 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 @@ -65,19 +65,21 @@ public class TraceContextPropagationChannelInterceptorTests { @Test public void testSpanPropagation() { - Span trace = this.tracer.startTrace("testSendMessage", new AlwaysSampler()); + Span span = this.tracer.startTrace("testSendMessage", new AlwaysSampler()); this.channel.send(MessageBuilder.withPayload("hi").build()); - Long expectedSpanId = trace.getSpanId(); - this.tracer.close(trace); + Long expectedSpanId = span.getSpanId(); + this.tracer.close(span); Message message = this.channel.receive(0); assertNotNull("message was null", message); - Long spanId = Span.IdConverter.fromHex(message.getHeaders().get(Span.SPAN_ID_NAME, String.class)); + Long spanId = Span + .fromHex(message.getHeaders().get(Span.SPAN_ID_NAME, String.class)); assertEquals("spanId was wrong", expectedSpanId, spanId); - long traceId = Span.IdConverter.fromHex(message.getHeaders().get(Span.TRACE_ID_NAME, String.class)); + long traceId = Span + .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 1383347b9..200bd5a5f 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 @@ -49,16 +49,16 @@ public class TraceStompMessageChannelInterceptorTests extends AbstractTraceStomp @Test public void should_propagate_headers_when_message_was_sent_during_local_span_starting() { - Span trace = givenALocallyStartedSpan(); + Span span = givenALocallyStartedSpan(); Message message = givenMessageToBeSampled(); whenTheMessageWasSent(message); - this.tracer.close(trace); + this.tracer.close(span); Long spanId = thenSpanIdFromHeadersIsNotEmpty(); long traceId = thenTraceIdFromHeadersIsNotEmpty(); - then(traceId).isEqualTo(trace.getTraceId()); - then(spanId).isEqualTo(trace.getSpanId()); + then(traceId).isEqualTo(span.getTraceId()); + then(spanId).isEqualTo(span.getSpanId()); then(SpanContextHolder.getCurrentSpan()).isNull(); } 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 01e7f395f..e7c73546d 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 @@ -28,12 +28,12 @@ public class TraceStompMessageContextPropagationChannelInterceptorTests extends @Test public void should_propagate_span_information() { - Span trace = givenALocallyStartedSpan(); + Span span = givenALocallyStartedSpan(); Message m = givenMessageToBeSampled(); whenTheMessageWasSent(m); - Long expectedTraceId = trace.getTraceId(); - this.tracer.close(trace); + Long expectedTraceId = span.getTraceId(); + this.tracer.close(span); thenReceivedMessageIsNotNull(); long traceId = thenTraceIdFromHeadersIsNotEmpty(); 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 0069c4843..69157d80c 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 @@ -1,9 +1,5 @@ package org.springframework.cloud.sleuth.instrument.web; -import static org.assertj.core.api.BDDAssertions.then; - -import java.util.Random; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; @@ -19,6 +15,10 @@ import org.springframework.test.web.servlet.MvcResult; import org.springframework.test.web.servlet.request.MockMvcRequestBuilders; import org.springframework.test.web.servlet.setup.DefaultMockMvcBuilder; +import java.util.Random; + +import static org.assertj.core.api.BDDAssertions.then; + @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(TraceFilterIntegrationTests.class) @DefaultTestAutoConfiguration @@ -66,12 +66,12 @@ public class TraceFilterIntegrationTests extends AbstractMvcIntegrationTest { throws Exception { return this.mockMvc .perform(MockMvcRequestBuilders.get("/ping").accept(MediaType.TEXT_PLAIN) - .header(headerName, Span.IdConverter.toHex(passedCorrelationId)) - .header(Span.SPAN_ID_NAME, Span.IdConverter.toHex(new Random().nextLong()))) + .header(headerName, Span.toHex(passedCorrelationId)) + .header(Span.SPAN_ID_NAME, Span.toHex(new Random().nextLong()))) .andReturn(); } private Long tracingHeaderFrom(MvcResult mvcResult) { - return Span.IdConverter.fromHex(mvcResult.getResponse().getHeader(Span.TRACE_ID_NAME)); + return Span.fromHex(mvcResult.getResponse().getHeader(Span.TRACE_ID_NAME)); } } 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 6a8028254..fedcc440f 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 @@ -63,7 +63,7 @@ public class TraceFilterTests { private MockHttpServletRequest request; private MockHttpServletResponse response; private MockFilterChain filterChain; - private Sampler sampler = new AlwaysSampler(); + private Sampler sampler = new AlwaysSampler(); @Before @SneakyThrows @@ -72,8 +72,8 @@ public class TraceFilterTests { this.tracer = new DefaultTracer(new DelegateSampler(), new Random(), this.publisher) { @Override - protected Span createSpan(Span trace, Span span) { - TraceFilterTests.this.span = super.createSpan(trace, span); + protected Span createSpan(Span saved, Span span) { + TraceFilterTests.this.span = super.createSpan(saved, span); return TraceFilterTests.this.span; } }; @@ -113,8 +113,8 @@ public class TraceFilterTests { @Test public void continuesSpanInRequestAttr() throws Exception { - Span trace = this.tracer.startTrace("foo"); - this.request.setAttribute(TraceFilter.TRACE_REQUEST_ATTR, trace); + Span span = this.tracer.startTrace("foo"); + this.request.setAttribute(TraceFilter.TRACE_REQUEST_ATTR, span); TraceFilter filter = new TraceFilter(this.tracer, this.traceKeys); filter.doFilter(this.request, this.response, this.filterChain); @@ -214,7 +214,7 @@ public class TraceFilterTests { } } - private class DelegateSampler implements Sampler { + private class DelegateSampler implements Sampler { @Override public boolean next() { return TraceFilterTests.this.sampler.next(); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/FeignTraceTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/FeignTraceTests.java index 88a48ab65..e065b2c48 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/FeignTraceTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/FeignTraceTests.java @@ -1,12 +1,8 @@ package org.springframework.cloud.sleuth.instrument.web.client; -import static org.assertj.core.api.BDDAssertions.then; - -import java.util.ArrayList; -import java.util.Arrays; -import java.util.List; -import java.util.Random; - +import com.netflix.loadbalancer.BaseLoadBalancer; +import com.netflix.loadbalancer.ILoadBalancer; +import com.netflix.loadbalancer.Server; import org.junit.After; import org.junit.Test; import org.junit.runner.RunWith; @@ -18,13 +14,11 @@ import org.springframework.boot.test.WebIntegrationTest; import org.springframework.cloud.netflix.feign.EnableFeignClients; import org.springframework.cloud.netflix.feign.FeignClient; import org.springframework.cloud.netflix.ribbon.RibbonClient; -import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Span; -import org.springframework.cloud.sleuth.Trace; import org.springframework.cloud.sleuth.Tracer; import org.springframework.cloud.sleuth.event.ClientReceivedEvent; import org.springframework.cloud.sleuth.event.ClientSentEvent; -import org.springframework.cloud.sleuth.trace.TraceContextHolder; +import org.springframework.cloud.sleuth.trace.SpanContextHolder; import org.springframework.context.ApplicationEvent; import org.springframework.context.annotation.Bean; import org.springframework.context.annotation.Configuration; @@ -38,9 +32,12 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RequestMethod; import org.springframework.web.bind.annotation.RestController; -import com.netflix.loadbalancer.BaseLoadBalancer; -import com.netflix.loadbalancer.ILoadBalancer; -import com.netflix.loadbalancer.Server; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; +import java.util.Random; + +import static org.assertj.core.api.BDDAssertions.then; @RunWith(SpringJUnit4ClassRunner.class) @SpringApplicationConfiguration(classes = { FeignTraceTests.TestConfiguration.class }) @@ -59,7 +56,7 @@ public class FeignTraceTests { @After public void close() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); this.listener.getEvents().clear(); } @@ -69,7 +66,7 @@ public class FeignTraceTests { ResponseEntity response = this.testFeignInterface.getNoTrace(); // then - then(getHeader(response, Trace.TRACE_ID_NAME)).isNotNull(); + then(getHeader(response, Span.TRACE_ID_NAME)).isNotNull(); then(this.listener.getEvents()).isNotEmpty(); } @@ -78,14 +75,14 @@ public class FeignTraceTests { // given Long currentTraceId = 1L; Long currentParentId = 2L; - this.tracer.continueSpan(MilliSpan.builder().traceId(currentTraceId) + this.tracer.continueSpan(Span.builder().traceId(currentTraceId) .spanId(generatedId()).parent(currentParentId).build()); // when ResponseEntity response = this.testFeignInterface.getTraceId(); // then - then(Span.IdConverter.fromHex(getHeader(response, Trace.TRACE_ID_NAME))).isEqualTo(currentTraceId); + then(Span.fromHex(getHeader(response, Span.TRACE_ID_NAME))).isEqualTo(currentTraceId); then(this.listener.getEvents().size()).isEqualTo(2); } @@ -148,15 +145,15 @@ public class FeignTraceTests { @RequestMapping(value = "/notrace", method = RequestMethod.GET) public String notrace( - @RequestHeader(name = Trace.TRACE_ID_NAME, required = false) String traceId) { + @RequestHeader(name = Span.TRACE_ID_NAME, required = false) String traceId) { then(traceId).isNotNull(); return "OK"; } @RequestMapping(value = "/traceid", method = RequestMethod.GET) - public String traceId(@RequestHeader(Trace.TRACE_ID_NAME) String traceId, - @RequestHeader(Trace.SPAN_ID_NAME) String spanId, - @RequestHeader(Trace.PARENT_ID_NAME) String parentId) { + public String traceId(@RequestHeader(Span.TRACE_ID_NAME) String traceId, + @RequestHeader(Span.SPAN_ID_NAME) String spanId, + @RequestHeader(Span.PARENT_ID_NAME) String parentId) { then(traceId).isNotEmpty(); then(parentId).isNotEmpty(); then(spanId).isNotEmpty(); diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorTests.java index 098e95c0f..1c9c8c19a 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/instrument/web/client/TraceRestTemplateInterceptorTests.java @@ -16,22 +16,13 @@ package org.springframework.cloud.sleuth.instrument.web.client; -import static org.assertj.core.api.BDDAssertions.then; -import static org.junit.Assert.assertFalse; - -import java.util.Arrays; -import java.util.HashMap; -import java.util.Map; -import java.util.Random; - import org.junit.After; import org.junit.Before; import org.junit.Test; -import org.springframework.cloud.sleuth.MilliSpan; -import org.springframework.cloud.sleuth.Trace; +import org.springframework.cloud.sleuth.Span; 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.HttpHeaders; import org.springframework.http.client.ClientHttpRequestInterceptor; @@ -43,6 +34,14 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; import org.springframework.web.client.RestTemplate; +import java.util.Arrays; +import java.util.HashMap; +import java.util.Map; +import java.util.Random; + +import static org.assertj.core.api.BDDAssertions.then; +import static org.junit.Assert.assertFalse; + /** * @author Dave Syer * @@ -65,22 +64,22 @@ public class TraceRestTemplateInterceptorTests { this.traces = new DefaultTracer(new AlwaysSampler(), new Random(), this.publisher); this.template.setInterceptors(Arrays.asList( new TraceRestTemplateInterceptor(this.traces))); - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @After public void clean() { - TraceContextHolder.removeCurrentTrace(); + SpanContextHolder.removeCurrentSpan(); } @Test public void headersAddedWhenTracing() { - this.traces.continueSpan(MilliSpan.builder().traceId(1L).spanId(2L).build()); + this.traces.continueSpan(Span.builder().traceId(1L).spanId(2L).build()); @SuppressWarnings("unchecked") Map headers = this.template.getForEntity("/", Map.class) .getBody(); - then(Long.valueOf(headers.get(Trace.TRACE_ID_NAME))).isEqualTo(1L); - then(Long.valueOf(headers.get(Trace.SPAN_ID_NAME))).isEqualTo(2L); + then(Long.valueOf(headers.get(Span.TRACE_ID_NAME))).isEqualTo(1L); + then(Long.valueOf(headers.get(Span.SPAN_ID_NAME))).isEqualTo(2L); } @Test @@ -88,7 +87,7 @@ public class TraceRestTemplateInterceptorTests { @SuppressWarnings("unchecked") Map headers = this.template.getForEntity("/", Map.class) .getBody(); - assertFalse("Wrong headers: " + headers, headers.containsKey(Trace.SPAN_ID_NAME)); + assertFalse("Wrong headers: " + headers, headers.containsKey(Span.SPAN_ID_NAME)); } @RestController @@ -96,8 +95,8 @@ public class TraceRestTemplateInterceptorTests { @RequestMapping("/") public Map home(@RequestHeader HttpHeaders headers) { Map map = new HashMap(); - addHeaders(map, headers, Trace.SPAN_ID_NAME, Trace.TRACE_ID_NAME, - Trace.PARENT_ID_NAME); + addHeaders(map, headers, Span.SPAN_ID_NAME, Span.TRACE_ID_NAME, + Span.PARENT_ID_NAME); return map; } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java index f8ad2a534..2fa8f834b 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/log/JsonLogSpanListenerTests.java @@ -16,18 +16,19 @@ package org.springframework.cloud.sleuth.log; -import static org.junit.Assert.*; - import org.junit.Rule; import org.junit.Test; import org.springframework.boot.test.OutputCapture; -import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.event.SpanReleasedEvent; import org.springframework.util.StringUtils; import java.io.IOException; +import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertFalse; +import static org.junit.Assert.assertTrue; + /** * @author Spencer Gibb */ @@ -38,7 +39,7 @@ public class JsonLogSpanListenerTests { @Test public void jsonSpanIsOnOneLine() throws IOException { JsonLogSpanListener listener = new JsonLogSpanListener(); - Span span = MilliSpan.builder() + Span span = Span.builder() .name("testSpan") .spanId(1L) .parent(2L) @@ -61,7 +62,7 @@ public class JsonLogSpanListenerTests { assertFalse("json contains linefeed", output.contains("\n")); assertFalse("json contains carriage return", output.contains("\r")); - MilliSpan read = listener.getObjectMapper().readValue(json, MilliSpan.class); + Span read = listener.getObjectMapper().readValue(json, Span.class); assertEquals("span not equals", read, span); } } diff --git a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/sampler/PercentageBasedSamplerTests.java b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/sampler/PercentageBasedSamplerTests.java index d8969010a..50740044d 100644 --- a/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/sampler/PercentageBasedSamplerTests.java +++ b/spring-cloud-sleuth-core/src/test/java/org/springframework/cloud/sleuth/sampler/PercentageBasedSamplerTests.java @@ -1,15 +1,14 @@ package org.springframework.cloud.sleuth.sampler; -import static org.assertj.core.api.BDDAssertions.then; -import static org.assertj.core.data.Percentage.withPercentage; - import org.junit.Test; -import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.TraceAccessor; import java.util.Random; +import static org.assertj.core.api.BDDAssertions.then; +import static org.assertj.core.data.Percentage.withPercentage; + public class PercentageBasedSamplerTests { SamplerConfiguration samplerConfiguration = new SamplerConfiguration(); @@ -59,7 +58,7 @@ public class PercentageBasedSamplerTests { return new TraceAccessor() { @Override public Span getCurrentSpan() { - return MilliSpan.builder().traceId(RANDOM.nextLong()).build(); + return Span.builder().traceId(RANDOM.nextLong()).build(); } @Override 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 58687696b..339f9e2b4 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 @@ -26,19 +26,19 @@ public class TraceTemplateTests { @Test public void should_pass_trace_to_the_callback_if_tracing_is_active() { - Span initialTrace = this.tracer.startTrace("test"); + Span initialSpan = this.tracer.startTrace("test"); TraceTemplate traceTemplate = new TraceTemplate(this.tracer); - Span traceFromCallback = whenTraceCallbackReturningCurrentTraceIsExecuted(traceTemplate); + Span spanFromCallback = whenTraceCallbackReturningCurrentTraceIsExecuted(traceTemplate); - then(traceFromCallback).isNotNull(); - then(traceFromCallback.getTraceId()).isEqualTo(initialTrace.getTraceId()); + then(spanFromCallback).isNotNull(); + then(spanFromCallback.getTraceId()).isEqualTo(initialSpan.getTraceId()); } private Span whenTraceCallbackReturningCurrentTraceIsExecuted(TraceTemplate traceTemplate) { return traceTemplate.trace(new TraceCallback() { @Override - public Span doInTrace(Span trace) { + public Span doInTrace(Span span) { return SpanContextHolder.getCurrentSpan(); } }); diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/main/java/sample/SampleMessagingApplication.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/main/java/sample/SampleMessagingApplication.java index b89f583a7..081068f44 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/main/java/sample/SampleMessagingApplication.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-messaging/src/main/java/sample/SampleMessagingApplication.java @@ -49,7 +49,7 @@ public class SampleMessagingApplication { private SampleRequestResponse transformer; @Bean - public Sampler defaultSampler() { + public Sampler defaultSampler() { return new AlwaysSampler(); } diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-ribbon/src/main/java/sample/SampleRibbonApplication.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-ribbon/src/main/java/sample/SampleRibbonApplication.java index 7993591ad..21be87a57 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-ribbon/src/main/java/sample/SampleRibbonApplication.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-ribbon/src/main/java/sample/SampleRibbonApplication.java @@ -39,7 +39,7 @@ import com.github.kristofa.brave.SpanCollector; public class SampleRibbonApplication { @Bean - public Sampler defaultSampler() { + public Sampler defaultSampler() { return new AlwaysSampler(); } 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 6e75dcf89..ed28050ef 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 @@ -93,7 +93,7 @@ ApplicationListener { @SneakyThrows @RequestMapping("/traced") public String traced() { - Span trace = this.tracer.startTrace("customTraceEndpoint", + Span span = this.tracer.startTrace("customTraceEndpoint", new AlwaysSampler()); int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); @@ -102,7 +102,7 @@ ApplicationListener { String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class); - this.tracer.close(trace); + this.tracer.close(span); return "traced/" + s; } diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleSleuthApplication.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleSleuthApplication.java index 8312ad842..0dea467c7 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleSleuthApplication.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-stream/src/main/java/sample/SampleSleuthApplication.java @@ -35,7 +35,7 @@ public class SampleSleuthApplication { public static final String CLIENT_NAME = "testApp"; @Bean - public Sampler defaultSampler() { + public Sampler defaultSampler() { return new AlwaysSampler(); } 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 024e3885e..39bebdec8 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,11 @@ package tools; import lombok.extern.slf4j.Slf4j; import org.springframework.cloud.sleuth.Span; -import org.springframework.http.*; +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpMethod; +import org.springframework.http.HttpStatus; +import org.springframework.http.RequestEntity; +import org.springframework.http.ResponseEntity; import org.springframework.web.client.RestTemplate; import java.net.URI; @@ -52,7 +56,7 @@ public class RequestSendingRunnable implements Runnable { private RequestEntity requestWithTraceId(long traceId) { HttpHeaders headers = new HttpHeaders(); - headers.add(Span.TRACE_ID_NAME, Span.IdConverter.toHex(traceId)); + headers.add(Span.TRACE_ID_NAME, Span.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-stream/src/test/java/integration/ZipkinStreamTests.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/integration/ZipkinStreamTests.java index 7b565aa5f..b83abba32 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/integration/ZipkinStreamTests.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin-stream/src/test/java/integration/ZipkinStreamTests.java @@ -24,7 +24,6 @@ import org.springframework.beans.factory.annotation.Qualifier; import org.springframework.beans.factory.annotation.Value; import org.springframework.boot.test.SpringApplicationConfiguration; import org.springframework.boot.test.WebIntegrationTest; -import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.stream.Host; import org.springframework.cloud.sleuth.stream.SleuthSink; @@ -60,7 +59,7 @@ public class ZipkinStreamTests extends AbstractIntegrationTest { await().until(zipkinServerIsUp()); long traceId = new Random().nextLong(); - Span span = MilliSpan.builder().traceId(traceId).spanId(traceId).name("test") + Span span = Span.builder().traceId(traceId).spanId(traceId).name("test") .build(); span.tag(getRequiredBinaryAnnotationName(), "10131"); 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 6e75dcf89..ed28050ef 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 @@ -93,7 +93,7 @@ ApplicationListener { @SneakyThrows @RequestMapping("/traced") public String traced() { - Span trace = this.tracer.startTrace("customTraceEndpoint", + Span span = this.tracer.startTrace("customTraceEndpoint", new AlwaysSampler()); int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); @@ -102,7 +102,7 @@ ApplicationListener { String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class); - this.tracer.close(trace); + this.tracer.close(span); return "traced/" + s; } diff --git a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleZipkinApplication.java b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleZipkinApplication.java index 683837b72..03b942f3f 100644 --- a/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleZipkinApplication.java +++ b/spring-cloud-sleuth-samples/spring-cloud-sleuth-sample-zipkin/src/main/java/sample/SampleZipkinApplication.java @@ -39,7 +39,7 @@ public class SampleZipkinApplication { public static final String CLIENT_NAME = "testApp"; @Bean - public Sampler defaultSampler() { + public Sampler defaultSampler() { return new AlwaysSampler(); } 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 6e75dcf89..ed28050ef 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 @@ -93,7 +93,7 @@ ApplicationListener { @SneakyThrows @RequestMapping("/traced") public String traced() { - Span trace = this.tracer.startTrace("customTraceEndpoint", + Span span = this.tracer.startTrace("customTraceEndpoint", new AlwaysSampler()); int millis = random.nextInt(1000); log.info("Sleeping for {} millis", millis); @@ -102,7 +102,7 @@ ApplicationListener { String s = this.restTemplate.getForObject("http://localhost:" + this.port + "/call", String.class); - this.tracer.close(trace); + this.tracer.close(span); return "traced/" + s; } diff --git a/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/ServerPropertiesHostLocatorTests.java b/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/ServerPropertiesHostLocatorTests.java index 9d76e5c5c..130b9e869 100644 --- a/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/ServerPropertiesHostLocatorTests.java +++ b/spring-cloud-sleuth-stream/src/test/java/org/springframework/cloud/sleuth/stream/ServerPropertiesHostLocatorTests.java @@ -18,7 +18,7 @@ package org.springframework.cloud.sleuth.stream; import org.junit.Test; import org.springframework.boot.autoconfigure.web.ServerProperties; -import org.springframework.cloud.sleuth.MilliSpan; +import org.springframework.cloud.sleuth.Span; import java.net.InetAddress; import java.net.UnknownHostException; @@ -27,7 +27,8 @@ import java.util.Collections; import static org.assertj.core.api.Assertions.assertThat; public class ServerPropertiesHostLocatorTests { - MilliSpan span = new MilliSpan(1, 3, "name", 1L, Collections.emptyList(), 2L, true, true, "process"); + Span span = new Span(1, 3, "name", 1L, Collections.emptyList(), 2L, true, true, + "process"); @Test public void portDefaultsTo8080() { 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 5f3522332..2aeef5b65 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 @@ -16,19 +16,11 @@ package org.springframework.cloud.sleuth.stream; -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.PostConstruct; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; 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.Tracer; @@ -50,6 +42,12 @@ import org.springframework.integration.annotation.ServiceActivator; import org.springframework.messaging.Message; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; + +import static org.junit.Assert.assertEquals; + /** * @author Dave Syer * @@ -84,7 +82,7 @@ public class StreamSpanListenerTests { @Test public void rpcAnnotations() { - Span parent = MilliSpan.builder().traceId(1L).name("parent").remote(true) + Span parent = Span.builder().traceId(1L).name("parent").remote(true) .build(); Span context = this.tracer.joinTrace("child", parent); this.application.publishEvent(new ClientSentEvent(this, context)); @@ -99,7 +97,7 @@ public class StreamSpanListenerTests { @Test public void nullSpanName() { - Span context = this.tracer.startTrace(null, (Sampler) null); + Span context = this.tracer.startTrace(null, null); this.application.publishEvent(new ClientSentEvent(this, context)); this.tracer.close(context); assertEquals(1, this.test.spans.size()); @@ -128,7 +126,7 @@ public class StreamSpanListenerTests { } @Bean - public Sampler defaultSampler() { + public Sampler defaultSampler() { return new AlwaysSampler(); } diff --git a/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/SamplingZipkinSpanIteratorTests.java b/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/SamplingZipkinSpanIteratorTests.java index 57e13ec82..287a2ca27 100644 --- a/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/SamplingZipkinSpanIteratorTests.java +++ b/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/SamplingZipkinSpanIteratorTests.java @@ -16,7 +16,6 @@ package org.springframework.cloud.sleuth.zipkin.stream; import org.junit.Test; -import org.springframework.cloud.sleuth.MilliSpan; import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.stream.Host; import org.springframework.cloud.sleuth.stream.Spans; @@ -36,7 +35,7 @@ public class SamplingZipkinSpanIteratorTests { @Test public void skipsInputSpans() { - Spans spans = new Spans(host, Arrays.asList(span("message/sleuth"))); + Spans spans = new Spans(host, Collections.singletonList(span("message/sleuth"))); Iterator result = new SamplingZipkinSpanIterator(Sampler.create(1.0f), spans); @@ -71,6 +70,7 @@ public class SamplingZipkinSpanIteratorTests { Span span(String name) { Long id = new Random().nextLong(); - return new MilliSpan(1, 3, name, id, Collections.emptyList(), id, true, true, "process"); + return new Span(1, 3, name, id, Collections.emptyList(), id, true, true, + "process"); } } \ No newline at end of file diff --git a/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinMessageListenerTests.java b/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinMessageListenerTests.java index 30757f0d8..b7878729c 100644 --- a/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinMessageListenerTests.java +++ b/spring-cloud-sleuth-zipkin-stream/src/test/java/org/springframework/cloud/sleuth/zipkin/stream/ZipkinMessageListenerTests.java @@ -21,13 +21,14 @@ import zipkin.BinaryAnnotation; import zipkin.Endpoint; import org.junit.Test; -import org.springframework.cloud.sleuth.MilliSpan; +import org.springframework.cloud.sleuth.Span; import org.springframework.cloud.sleuth.stream.Host; import static org.assertj.core.api.Assertions.assertThat; public class ZipkinMessageListenerTests { - MilliSpan span = new MilliSpan(1, 3, "name", 1L, Collections.emptyList(), 2L, true, true, "process"); + Span span = new Span(1, 3, "name", 1L, Collections.emptyList(), 2L, true, true, + "process"); Host host = new Host("myservice", "1.2.3.4", 8080); Endpoint endpoint = Endpoint.create("myservice", 1 << 24 | 2 << 16 | 3 << 8 | 4, 8080); @@ -79,7 +80,7 @@ public class ZipkinMessageListenerTests { // TODO: "unknown" bc process id, documented as not nullable, is null in some tests. @Test public void nullProcessIdCoercesToUnknownServiceName() { - MilliSpan noProcessId = MilliSpan.builder().traceId(1L).name("parent").remote(true).build(); + Span noProcessId = Span.builder().traceId(1L).name("parent").remote(true).build(); zipkin.Span result = ZipkinMessageListener.convert(noProcessId, host); 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 f604798c0..bcfc8e8aa 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 @@ -16,20 +16,11 @@ package org.springframework.cloud.sleuth.zipkin; -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.Assert.assertEquals; - -import java.util.ArrayList; -import java.util.List; - -import javax.annotation.PostConstruct; - import org.junit.Test; import org.junit.runner.RunWith; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.boot.autoconfigure.PropertyPlaceholderAutoConfiguration; 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.Tracer; @@ -46,6 +37,13 @@ import org.springframework.context.annotation.Configuration; import org.springframework.context.annotation.Import; import org.springframework.test.context.junit4.SpringJUnit4ClassRunner; +import javax.annotation.PostConstruct; +import java.util.ArrayList; +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.Assert.assertEquals; + /** * @author Dave Syer * @@ -71,7 +69,7 @@ public class ZipkinSpanListenerTests { this.test.spans.clear(); } - Span parent = MilliSpan.builder().traceId(1L).name("parent").remote(true).build(); + Span parent = Span.builder().traceId(1L).name("parent").remote(true).build(); /** Sleuth timestamps are millisecond granularity while zipkin is microsecond. */ @Test @@ -148,7 +146,7 @@ public class ZipkinSpanListenerTests { private List spans = new ArrayList<>(); @Bean - public Sampler defaultSampler() { + public Sampler defaultSampler() { return new AlwaysSampler(); }