Skip to content
Merged
Changes from 1 commit
Commits
Show all changes
25 commits
Select commit Hold shift + click to select a range
36e5dac
[WIP] delegate all tracing calls to `tracing-java`
qinfchen Sep 6, 2018
f321e2c
cleanup
qinfchen Sep 6, 2018
c78a24b
Use published versions of libraries
iamdanfox Sep 6, 2018
edfa0d6
Everything compiles
iamdanfox Sep 6, 2018
6a8471a
Convert#span actually works now
iamdanfox Sep 6, 2018
68d893a
Implement Convert#toRemotingTrace
iamdanfox Sep 6, 2018
420c0e8
All converters propagate nulls
iamdanfox Sep 6, 2018
6ec78ae
Tracer#subscribe returns a remoting span observer
iamdanfox Sep 6, 2018
d4dc7d6
Delete redundant fully-qualified names in TracersTest
iamdanfox Sep 6, 2018
332bbe1
Move longToPaddedHex function out of Tracers
iamdanfox Sep 6, 2018
9e6effd
Delete an asConjure method
iamdanfox Sep 6, 2018
1beda24
@Ignore one TracerTest
iamdanfox Sep 6, 2018
6a02d6f
Thanks checkstyle
iamdanfox Sep 6, 2018
f3724a3
Reduce visibility of Convert class
iamdanfox Sep 6, 2018
9c45298
Fix one Convert method
iamdanfox Sep 6, 2018
13fb17c
Remove mavenLocal()
iamdanfox Sep 6, 2018
0a5b297
Move Utilities to test source set
iamdanfox Sep 6, 2018
8a06a46
Better javadoc and warnings
iamdanfox Sep 6, 2018
bb252e2
Restore CloseableTracerTest
iamdanfox Sep 6, 2018
badb51c
Delete some unused fields and point to their new locations
iamdanfox Sep 6, 2018
b20a71e
rearrange method orders and remove broken javadoc links
qinfchen Sep 6, 2018
1bd0d56
remove Tracers.TRACE_ID_KEY and use java-tracing TRACE_ID_KEY
qinfchen Sep 6, 2018
0ac9f54
thanks checkstyle
qinfchen Sep 6, 2018
e9c0d1e
Revert "remove Tracers.TRACE_ID_KEY and use java-tracing TRACE_ID_KEY"
iamdanfox Sep 7, 2018
adf0f74
Don't make Trace public
iamdanfox Sep 7, 2018
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
Prev Previous commit
Next Next commit
cleanup
  • Loading branch information
qinfchen committed Sep 6, 2018
commit f321e2cb55d4d7b3ce24935ba92eb40a08c6b1fe
66 changes: 35 additions & 31 deletions tracing/src/main/java/com/palantir/remoting3/tracing/Tracer.java
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,17 @@

package com.palantir.remoting3.tracing;

import static com.palantir.tracing.api.SpanType.*;

import com.google.common.base.Preconditions;
import com.google.common.collect.ImmutableList;
import com.palantir.logsafe.SafeArg;
import com.palantir.logsafe.UnsafeArg;
import com.palantir.remoting.api.tracing.OpenSpan;
import com.palantir.remoting.api.tracing.Span;
import com.palantir.remoting.api.tracing.SpanObserver;
import com.palantir.remoting.api.tracing.SpanType;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import java.util.Optional;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.slf4j.MDC;

/**
* The singleton entry point for handling Zipkin-style traces and spans. Provides functionality for starting and
Expand All @@ -51,6 +44,7 @@ private Tracer() {}
private static final Map<String, SpanObserver> observers = new HashMap<>();
// we want iterating through tracers to be very fast, and it's faster to iterate through a list than a Map.values()
private static volatile List<SpanObserver> observersList = ImmutableList.of();

/**
* Initializes the current thread's trace, erasing any previously accrued open spans. The new trace is {@link
* Trace#isObservable observable} iff the given flag is true, or, iff {@code isObservable} is absent, if the {@link
Expand All @@ -65,29 +59,29 @@ public static void initTrace(Optional<Boolean> isObservable, String traceId) {
* when the current trace is empty.
*/
public static OpenSpan startSpan(String operation, String parentSpanId, SpanType type) {
com.palantir.tracing.api.OpenSpan openSpan = com.palantir.tracing.Tracer.startSpan(
operation, parentSpanId, type.asConjure());
return toRemotingOpenSpan(com.palantir.tracing.Tracer.startSpan(
operation, parentSpanId, type.asConjure()));
}

/**
* Like {@link #startSpan(String)}, but opens a span of the explicitly given {@link SpanType span type}.
*/
public static OpenSpan startSpan(String operation, SpanType type) {
return com.palantir.tracing.Tracer.startSpan(operation, type.asConjure());
return toRemotingOpenSpan(com.palantir.tracing.Tracer.startSpan(operation, type.asConjure()));
}

/**
* Opens a new {@link SpanType#LOCAL LOCAL} span for this thread's call trace, labeled with the provided operation.
*/
public static OpenSpan startSpan(String operation) {
return com.palantir.tracing.Tracer.startSpan(operation);
return toRemotingOpenSpan(com.palantir.tracing.Tracer.startSpan(operation));
}


/**
* Completes the current span (if it exists) and notifies all {@link #observers subscribers} about the
* completed span.
*
* Completes the current span (if it exists) and notifies all {@link #observers subscribers} about the completed
* span.
* <p>
* Does not construct the Span object if no subscriber will see it.
*/
public static void fastCompleteSpan() {
Expand All @@ -106,14 +100,14 @@ public static void fastCompleteSpan(Map<String, String> metadata) {
* completed span.
*/
public static Optional<Span> completeSpan() {
return com.palantir.tracing.Tracer.completeSpan().map(Tracer::ConjureToRemoting);
return com.palantir.tracing.Tracer.completeSpan().map(Tracer::toRemotingSpan);
}

/**
* Like {@link #completeSpan()}, but adds {@code metadata} to the current span being completed.
*/
public static Optional<Span> completeSpan(Map<String, String> metadata) {
return com.palantir.tracing.Tracer.completeSpan(metadata).map(Tracer::ConjureToRemoting);
return com.palantir.tracing.Tracer.completeSpan(metadata).map(Tracer::toRemotingSpan);
}

/**
Expand All @@ -123,15 +117,15 @@ public static Optional<Span> completeSpan(Map<String, String> metadata) {
* with the given name, or null if there is no such observer.
*/
public static synchronized SpanObserver subscribe(String name, SpanObserver observer) {
return ConjureToRemoting(com.palantir.tracing.Tracer.subscribe(name, observer.asConjure()));
return toRemotingSpanObserver(com.palantir.tracing.Tracer.subscribe(name, observer.asConjure()));
}

/**
* The inverse of {@link #subscribe}: removes the observer registered for the given name. Returns the removed
* observer if it existed, or null otherwise.
*/
public static synchronized SpanObserver unsubscribe(String name) {
return ConjureToRemoting(com.palantir.tracing.Tracer.unsubscribe(name));
return toRemotingSpanObserver(com.palantir.tracing.Tracer.unsubscribe(name));
}

/** Sets the sampler (for all threads). */
Expand All @@ -157,21 +151,31 @@ public static boolean isTraceObservable() {
return com.palantir.tracing.Tracer.isTraceObservable();
}

private static Span ConjureToRemoting(com.palantir.tracing.api.Span span) {
return Span.builder()
.traceId(span.getTraceId())
.parentSpanId(span.getParentSpanId())
.spanId(span.getSpanId())
.type(ConjureToRemoting(span.type()))
.operation(span.getOperation())
.startTimeMicroSeconds(span.getStartTimeMicroSeconds())
.durationNanoSeconds(span.getDurationNanoSeconds())
.build();
private static Span toRemotingSpan(com.palantir.tracing.api.Span span) {
return Span.builder()
.traceId(span.getTraceId())
.parentSpanId(span.getParentSpanId())
.spanId(span.getSpanId())
.type(toRemotingSpanType(span.type()))
.operation(span.getOperation())
.startTimeMicroSeconds(span.getStartTimeMicroSeconds())
.durationNanoSeconds(span.getDurationNanoSeconds())
.build();
}

private static OpenSpan toRemotingOpenSpan(com.palantir.tracing.api.OpenSpan openSpan) {
return OpenSpan.builder()
.parentSpanId(openSpan.getParentSpanId())
.spanId(openSpan.getSpanId())
.type(toRemotingSpanType(openSpan.type()))
.operation(openSpan.getOperation())
.startTimeMicroSeconds(openSpan.getStartTimeMicroSeconds())
.startClockNanoSeconds(openSpan.getStartClockNanoSeconds())
.build();
}

private static SpanType ConjureToRemoting(com.palantir.tracing.api.SpanType type) {
switch(type) {
private static SpanType toRemotingSpanType(com.palantir.tracing.api.SpanType type) {
switch (type) {
case CLIENT_OUTGOING:
return SpanType.CLIENT_OUTGOING;
case SERVER_INCOMING:
Expand All @@ -183,7 +187,7 @@ private static SpanType ConjureToRemoting(com.palantir.tracing.api.SpanType type
throw new UnsupportedOperationException("Unable to convert to Remoting SpanType");
}

private static SpanObserver ConjureToRemoting(com.palantir.tracing.api.SpanObserver spanObserver) {
private static SpanObserver toRemotingSpanObserver(com.palantir.tracing.api.SpanObserver spanObserver) {
return new SpanObserver() {
@Override
public void consume(Span span) {
Expand Down