Skip to content

Commit 93b9295

Browse files
authored
Remove unused headers: X-B3-ParentSpanId and X-OrigSpanId (#778)
Remove unused headers: `X-B3-ParentSpanId` and `X-OrigSpanId`
1 parent 552461f commit 93b9295

File tree

14 files changed

+74
-236
lines changed

14 files changed

+74
-236
lines changed

.palantir/revapi.yml

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,3 +38,22 @@ acceptedBreaks:
3838
- code: "java.method.addedToInterface"
3939
new: "method com.palantir.tracing.CloseableSpan com.palantir.tracing.DetachedSpan::attach()"
4040
justification: "DetachedSpan is not meant for external implementations"
41+
"6.3.0":
42+
com.palantir.tracing:tracing:
43+
- code: "java.method.removed"
44+
old: "method com.palantir.tracing.TraceMetadata.Builder com.palantir.tracing.ImmutableTraceMetadata.Builder::originatingSpanId(java.lang.String)\
45+
\ @ com.palantir.tracing.TraceMetadata.Builder"
46+
justification: "Type is not meant for external creation"
47+
- code: "java.method.removed"
48+
old: "method com.palantir.tracing.TraceMetadata.Builder com.palantir.tracing.ImmutableTraceMetadata.Builder::originatingSpanId(java.util.Optional<java.lang.String>)\
49+
\ @ com.palantir.tracing.TraceMetadata.Builder"
50+
justification: "Type is not meant for external creation"
51+
com.palantir.tracing:tracing-api:
52+
- code: "java.method.removed"
53+
old: "method com.palantir.tracing.api.OpenSpan.Builder com.palantir.tracing.api.ImmutableOpenSpan.Builder::originatingSpanId(java.lang.String)\
54+
\ @ com.palantir.tracing.api.OpenSpan.Builder"
55+
justification: "Type is not meant for external creation"
56+
- code: "java.method.removed"
57+
old: "method com.palantir.tracing.api.OpenSpan.Builder com.palantir.tracing.api.ImmutableOpenSpan.Builder::originatingSpanId(java.util.Optional<java.lang.String>)\
58+
\ @ com.palantir.tracing.api.OpenSpan.Builder"
59+
justification: "Type is not meant for external creation"
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
type: improvement
2+
improvement:
3+
description: 'Remove unused headers: `X-B3-ParentSpanId` and `X-OrigSpanId`'
4+
links:
5+
- https://github.com/palantir/tracing-java/pull/778

tracing-api/src/main/java/com/palantir/tracing/api/OpenSpan.java

Lines changed: 18 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -59,10 +59,14 @@ public abstract class OpenSpan {
5959
/**
6060
* Returns the identifier of the 'originating' span if one exists.
6161
*
62-
* @see TraceHttpHeaders
62+
* @see TraceHttpHeaders#ORIGINATING_SPAN_ID
63+
* @deprecated No longer used.
6364
*/
64-
@Value.Parameter
65-
public abstract Optional<String> getOriginatingSpanId();
65+
@Deprecated
66+
// Intentionally does not set @Value.Default because the value is always empty.
67+
public Optional<String> getOriginatingSpanId() {
68+
return Optional.empty();
69+
}
6670

6771
/** Returns a globally unique identifier representing a single span within the call trace. */
6872
@Value.Parameter
@@ -83,26 +87,25 @@ public static Builder builder() {
8387
return new Builder().startTimeMicroSeconds(getNowInMicroSeconds()).startClockNanoSeconds(System.nanoTime());
8488
}
8589

86-
/** Use this factory method to avoid allocate {@link Builder} in hot path. */
90+
/**
91+
* Use this factory method to avoid {@link Builder} allocations in hot paths.
92+
*
93+
* @deprecated Use the variant without an originating span id
94+
*/
95+
@SuppressWarnings("InlineMeSuggester")
96+
@Deprecated
8797
public static OpenSpan of(
8898
String operation,
8999
String spanId,
90100
SpanType type,
91101
Optional<String> parentSpanId,
92-
Optional<String> originatingSpanId) {
93-
return ImmutableOpenSpan.of(
94-
operation, getNowInMicroSeconds(), System.nanoTime(), parentSpanId, originatingSpanId, spanId, type);
102+
Optional<String> _originatingSpanId) {
103+
return ImmutableOpenSpan.of(operation, getNowInMicroSeconds(), System.nanoTime(), parentSpanId, spanId, type);
95104
}
96105

97-
/**
98-
* Deprecated.
99-
*
100-
* @deprecated Use the variant that accepts an originating span id
101-
*/
102-
@SuppressWarnings("InlineMeSuggester")
103-
@Deprecated
106+
/** Use this factory method to avoid {@link Builder} allocations in hot paths. */
104107
public static OpenSpan of(String operation, String spanId, SpanType type, Optional<String> parentSpanId) {
105-
return of(operation, spanId, type, parentSpanId, Optional.empty());
108+
return ImmutableOpenSpan.of(operation, getNowInMicroSeconds(), System.nanoTime(), parentSpanId, spanId, type);
106109
}
107110

108111
private static long getNowInMicroSeconds() {

tracing-api/src/main/java/com/palantir/tracing/api/TraceHttpHeaders.java

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -19,19 +19,22 @@
1919
/** Zipkin-compatible HTTP header names. */
2020
public interface TraceHttpHeaders {
2121
String TRACE_ID = "X-B3-TraceId";
22+
/**
23+
* Field is no longer used by the tracing library.
24+
*
25+
* @deprecated No longer used
26+
*/
27+
@Deprecated
2228
String PARENT_SPAN_ID = "X-B3-ParentSpanId";
29+
2330
String SPAN_ID = "X-B3-SpanId";
2431
String IS_SAMPLED = "X-B3-Sampled"; // Boolean (either “1” or “0”, can be absent)
2532

2633
/**
27-
* Conceptually, a trace is a stack of spans. In implementation, this is actually many stacks, in many servers,
28-
* where a server's stack will typically contain a single parent span from a different server at the bottom, and
29-
* many spans of its own above it.
34+
* Field is no longer used by the tracing library.
3035
*
31-
* <p>By communicating this deepest span id with future network calls as an 'originating' span id, this enables
32-
* network-level tracing to be enabled always in a low-fidelity form, with request logs containing enough
33-
* information to reconstruct a request-level trace, even when the trace is not sampled. For server-internal
34-
* tracing, the typical trace logs (with sampling) are still required.
36+
* @deprecated No longer used
3537
*/
38+
@Deprecated
3639
String ORIGINATING_SPAN_ID = "X-OrigSpanId";
3740
}

tracing-jersey/src/test/java/com/palantir/tracing/jersey/TraceEnrichingFilterTest.java

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -112,11 +112,9 @@ public void testTraceState_withHeaderUsesTraceId() {
112112
Response response = target.path("/trace")
113113
.request()
114114
.header(TraceHttpHeaders.TRACE_ID, "traceId")
115-
.header(TraceHttpHeaders.PARENT_SPAN_ID, "parentSpanId")
116115
.header(TraceHttpHeaders.SPAN_ID, "spanId")
117116
.get();
118117
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isEqualTo("traceId");
119-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
120118
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
121119
verify(observer).consume(spanCaptor.capture());
122120
assertThat(spanCaptor.getValue().getOperation()).isEqualTo("Jersey: GET /trace");
@@ -127,11 +125,9 @@ public void testTraceState_respectsMethod() {
127125
Response response = target.path("/trace")
128126
.request()
129127
.header(TraceHttpHeaders.TRACE_ID, "traceId")
130-
.header(TraceHttpHeaders.PARENT_SPAN_ID, "parentSpanId")
131128
.header(TraceHttpHeaders.SPAN_ID, "spanId")
132129
.post(Entity.json(""));
133130
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isEqualTo("traceId");
134-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
135131
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
136132
verify(observer).consume(spanCaptor.capture());
137133
assertThat(spanCaptor.getValue().getOperation()).isEqualTo("Jersey: POST /trace");
@@ -142,11 +138,9 @@ public void testTraceState_doesNotIncludePathParams() {
142138
Response response = target.path("/trace/no")
143139
.request()
144140
.header(TraceHttpHeaders.TRACE_ID, "traceId")
145-
.header(TraceHttpHeaders.PARENT_SPAN_ID, "parentSpanId")
146141
.header(TraceHttpHeaders.SPAN_ID, "spanId")
147142
.get();
148143
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isEqualTo("traceId");
149-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
150144
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
151145
verify(observer).consume(spanCaptor.capture());
152146
assertThat(spanCaptor.getValue().getOperation()).isEqualTo("Jersey: GET /trace/{param}");
@@ -156,7 +150,6 @@ public void testTraceState_doesNotIncludePathParams() {
156150
public void testTraceState_withoutRequestHeadersGeneratesValidTraceResponseHeaders() {
157151
Response response = target.path("/trace").request().get();
158152
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isNotNull();
159-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
160153
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
161154
verify(observer).consume(spanCaptor.capture());
162155
Span span = spanCaptor.getValue();
@@ -169,7 +162,6 @@ public void testTraceState_withoutRequestHeadersGeneratesValidTraceResponseHeade
169162
public void testTraceState_setsResponseStatus() {
170163
Response response = target.path("/trace").request().post(null);
171164
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isNotNull();
172-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
173165
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
174166
verify(observer).consume(spanCaptor.capture());
175167
Span span = spanCaptor.getValue();
@@ -185,7 +177,6 @@ public void testTraceState_setsResponseStatus() {
185177
public void testTraceState_withoutRequestHeadersGeneratesValidTraceResponseHeadersWhenFailing() {
186178
Response response = target.path("/failing-trace").request().get();
187179
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isNotNull();
188-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
189180
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
190181
verify(observer).consume(spanCaptor.capture());
191182
Span span = spanCaptor.getValue();
@@ -198,7 +189,6 @@ public void testTraceState_withoutRequestHeadersGeneratesValidTraceResponseHeade
198189
public void testTraceState_withoutRequestHeadersGeneratesValidTraceResponseHeadersWhenStreaming() {
199190
Response response = target.path("/streaming-trace").request().get();
200191
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isNotNull();
201-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
202192
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
203193
verify(observer).consume(spanCaptor.capture());
204194
assertThat(spanCaptor.getValue().getOperation()).isEqualTo("Jersey: GET /streaming-trace");
@@ -208,7 +198,6 @@ public void testTraceState_withoutRequestHeadersGeneratesValidTraceResponseHeade
208198
public void testTraceState_withoutRequestHeadersGeneratesValidTraceResponseHeadersWhenFailingToStream() {
209199
Response response = target.path("/failing-streaming-trace").request().get();
210200
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isNotNull();
211-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
212201
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
213202
verify(observer).consume(spanCaptor.capture());
214203
assertThat(spanCaptor.getValue().getOperation()).isEqualTo("Jersey: GET /failing-streaming-trace");
@@ -233,7 +222,6 @@ public void testTraceState_withEmptyTraceIdGeneratesValidTraceResponseHeaders()
233222
.header(TraceHttpHeaders.TRACE_ID, "")
234223
.get();
235224
assertThat(response.getHeaderString(TraceHttpHeaders.TRACE_ID)).isNotNull();
236-
assertThat(response.getHeaderString(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
237225
assertThat(response.getHeaderString(TraceHttpHeaders.SPAN_ID)).isNull();
238226
verify(observer).consume(spanCaptor.capture());
239227
assertThat(spanCaptor.getValue().getOperation()).isEqualTo("Jersey: GET /trace");

tracing-okhttp3/src/main/java/com/palantir/tracing/OkhttpTraceInterceptor2.java

Lines changed: 3 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -47,24 +47,11 @@ public Response intercept(Chain chain) throws IOException {
4747
TraceMetadata metadata = Tracer.maybeGetTraceMetadata()
4848
.orElseThrow(() -> new SafeRuntimeException("Trace with no spans in progress"));
4949

50-
Request.Builder tracedRequest = request.newBuilder()
50+
return chain.proceed(request.newBuilder()
5151
.header(TraceHttpHeaders.TRACE_ID, Tracer.getTraceId())
5252
.header(TraceHttpHeaders.SPAN_ID, metadata.getSpanId())
53-
.header(TraceHttpHeaders.IS_SAMPLED, Tracer.isTraceObservable() ? "1" : "0");
54-
55-
if (metadata.getParentSpanId().isPresent()) {
56-
tracedRequest.header(
57-
TraceHttpHeaders.PARENT_SPAN_ID,
58-
metadata.getParentSpanId().get());
59-
}
60-
61-
if (metadata.getOriginatingSpanId().isPresent()) {
62-
tracedRequest.header(
63-
TraceHttpHeaders.ORIGINATING_SPAN_ID,
64-
metadata.getOriginatingSpanId().get());
65-
}
66-
67-
return chain.proceed(tracedRequest.build());
53+
.header(TraceHttpHeaders.IS_SAMPLED, Tracer.isTraceObservable() ? "1" : "0")
54+
.build());
6855
}
6956
}
7057
}

tracing-okhttp3/src/main/java/com/palantir/tracing/okhttp3/OkhttpTraceInterceptor.java

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -53,15 +53,6 @@ public Response intercept(Chain chain) throws IOException {
5353
.header(TraceHttpHeaders.TRACE_ID, Tracer.getTraceId())
5454
.header(TraceHttpHeaders.SPAN_ID, span.getSpanId())
5555
.header(TraceHttpHeaders.IS_SAMPLED, Tracer.isTraceObservable() ? "1" : "0");
56-
if (span.getParentSpanId().isPresent()) {
57-
tracedRequest.header(
58-
TraceHttpHeaders.PARENT_SPAN_ID, span.getParentSpanId().get());
59-
}
60-
if (span.getOriginatingSpanId().isPresent()) {
61-
tracedRequest.header(
62-
TraceHttpHeaders.ORIGINATING_SPAN_ID,
63-
span.getOriginatingSpanId().get());
64-
}
6556

6657
Response response;
6758
try {

tracing-okhttp3/src/test/java/com/palantir/tracing/okhttp3/OkhttpTraceInterceptorTest.java

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -82,8 +82,6 @@ public void testPopulatesNewTrace_whenNoTraceIsPresentInGlobalState() throws IOE
8282
Request intercepted = requestCaptor.getValue();
8383
assertThat(intercepted.headers(TraceHttpHeaders.SPAN_ID)).hasSize(1);
8484
assertThat(intercepted.headers(TraceHttpHeaders.TRACE_ID)).hasSize(1);
85-
assertThat(intercepted.headers(TraceHttpHeaders.ORIGINATING_SPAN_ID)).isEmpty();
86-
assertThat(intercepted.headers(TraceHttpHeaders.PARENT_SPAN_ID)).isEmpty();
8785
}
8886

8987
@Test
@@ -104,7 +102,6 @@ public void testPopulatesNewTrace_whenParentTraceIsPresent() throws IOException
104102
Request intercepted = requestCaptor.getValue();
105103
assertThat(intercepted.headers(TraceHttpHeaders.SPAN_ID)).isNotNull();
106104
assertThat(intercepted.headers(TraceHttpHeaders.TRACE_ID)).containsOnly(traceId);
107-
assertThat(intercepted.headers(TraceHttpHeaders.ORIGINATING_SPAN_ID)).containsOnly(originatingSpanId);
108105
}
109106

110107
@Test

tracing-undertow/src/test/java/com/palantir/tracing/undertow/TracedOperationHandlerTest.java

Lines changed: 0 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -18,14 +18,12 @@
1818

1919
import static org.assertj.core.api.Assertions.assertThat;
2020
import static org.mockito.ArgumentMatchers.any;
21-
import static org.mockito.Mockito.doAnswer;
2221
import static org.mockito.Mockito.doThrow;
2322
import static org.mockito.Mockito.never;
2423
import static org.mockito.Mockito.times;
2524
import static org.mockito.Mockito.verify;
2625
import static org.mockito.Mockito.when;
2726

28-
import com.palantir.tracing.TraceMetadata;
2927
import com.palantir.tracing.TraceSampler;
3028
import com.palantir.tracing.Tracer;
3129
import com.palantir.tracing.Tracers;
@@ -46,7 +44,6 @@
4644
import org.mockito.Captor;
4745
import org.mockito.Mock;
4846
import org.mockito.junit.MockitoJUnitRunner;
49-
import org.mockito.stubbing.Answer;
5047
import org.slf4j.MDC;
5148

5249
@RunWith(MockitoJUnitRunner.class)
@@ -97,7 +94,6 @@ public void whenNoTraceIsInHeader_generatesNewTrace() throws Exception {
9794
assertThat(Tracer.hasTraceId()).isFalse();
9895
assertThat(span.getOperation()).isEqualTo("Undertow: GET /foo");
9996
HeaderMap responseHeaders = exchange.getResponseHeaders();
100-
assertThat(responseHeaders.get(TraceHttpHeaders.PARENT_SPAN_ID)).isNull();
10197
assertThat(responseHeaders.get(TraceHttpHeaders.SPAN_ID)).isNull();
10298
assertThat(responseHeaders.get(HttpString.tryFromString(TraceHttpHeaders.TRACE_ID)))
10399
.containsExactly(span.getTraceId());
@@ -129,28 +125,6 @@ public void whenParentSpanIsGiven_usesParentSpan() throws Exception {
129125
assertThat(span.getSpanId()).isNotEqualTo(parentSpanId);
130126
}
131127

132-
@Test
133-
public void whenParentSpanIsGiven_usesParentSpan_unsampled() throws Exception {
134-
when(traceSampler.sample()).thenReturn(false);
135-
setRequestTraceId(traceId);
136-
String parentSpanId = Tracers.randomId();
137-
setRequestSpanId(parentSpanId);
138-
139-
AtomicReference<String> capturedParentSpanId = new AtomicReference<>();
140-
doAnswer((Answer<Void>) _invocation -> {
141-
Tracer.maybeGetTraceMetadata()
142-
.flatMap(TraceMetadata::getOriginatingSpanId)
143-
.ifPresent(capturedParentSpanId::set);
144-
return null;
145-
})
146-
.when(delegate)
147-
.handleRequest(any());
148-
149-
handler.handleRequest(exchange);
150-
151-
assertThat(capturedParentSpanId).hasValue(parentSpanId);
152-
}
153-
154128
@Test
155129
public void whenTraceIsAlreadySampled_doesNotCallSampler() throws Exception {
156130
exchange.getRequestHeaders().put(HttpString.tryFromString(TraceHttpHeaders.IS_SAMPLED), "1");

0 commit comments

Comments
 (0)