Skip to content

Commit c3be598

Browse files
committed
Merge pull request #36061 from KitBolourchi
* pr/36061: Change B3 extraction format to single Closes gh-36061
2 parents 55fad1f + abebc39 commit c3be598

File tree

2 files changed

+33
-1
lines changed

2 files changed

+33
-1
lines changed

spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/CompositePropagationFactory.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -124,7 +124,7 @@ Propagation.Factory map(PropagationType type) {
124124
* @return the B3 propagation factory
125125
*/
126126
private Propagation.Factory b3Single() {
127-
return B3Propagation.newFactoryBuilder().injectFormat(B3Propagation.Format.SINGLE_NO_PARENT).build();
127+
return B3Propagation.newFactoryBuilder().injectFormat(B3Propagation.Format.SINGLE).build();
128128
}
129129

130130
/**

spring-boot-project/spring-boot-actuator-autoconfigure/src/test/java/org/springframework/boot/actuate/autoconfigure/tracing/BraveAutoConfigurationTests.java

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,9 @@
1717
package org.springframework.boot.actuate.autoconfigure.tracing;
1818

1919
import java.util.Collections;
20+
import java.util.HashMap;
2021
import java.util.List;
22+
import java.util.Map;
2123
import java.util.stream.Stream;
2224

2325
import brave.Span;
@@ -31,6 +33,7 @@
3133
import brave.propagation.CurrentTraceContext.ScopeDecorator;
3234
import brave.propagation.Propagation;
3335
import brave.propagation.Propagation.Factory;
36+
import brave.propagation.TraceContext;
3437
import brave.sampler.Sampler;
3538
import io.micrometer.tracing.brave.bridge.BraveBaggageManager;
3639
import io.micrometer.tracing.brave.bridge.BraveSpanCustomizer;
@@ -152,6 +155,31 @@ void shouldSupplyB3PropagationFactoryViaProperty() {
152155
});
153156
}
154157

158+
@Test
159+
void shouldUseB3SingleWithParentWhenPropagationTypeIsB3() {
160+
this.contextRunner
161+
.withPropertyValues("management.tracing.propagation.type=B3", "management.tracing.sampling.probability=1.0")
162+
.run((context) -> {
163+
Propagation<String> propagation = context.getBean(Factory.class).get();
164+
Tracer tracer = context.getBean(Tracing.class).tracer();
165+
Span child;
166+
Span parent = tracer.nextSpan().name("parent");
167+
try (Tracer.SpanInScope ignored = tracer.withSpanInScope(parent.start())) {
168+
child = tracer.nextSpan().name("child");
169+
child.start().finish();
170+
}
171+
finally {
172+
parent.finish();
173+
}
174+
175+
Map<String, String> map = new HashMap<>();
176+
TraceContext childContext = child.context();
177+
propagation.injector(this::injectToMap).inject(childContext, map);
178+
assertThat(map).containsExactly(Map.entry("b3", "%s-%s-1-%s".formatted(childContext.traceIdString(),
179+
childContext.spanIdString(), childContext.parentIdString())));
180+
});
181+
}
182+
155183
@Test
156184
void shouldNotSupplyCorrelationScopeDecoratorIfBaggageDisabled() {
157185
this.contextRunner.withPropertyValues("management.tracing.baggage.enabled=false")
@@ -313,6 +341,10 @@ void compositeSpanHandlerUsesFilterPredicateAndReportersInOrder() {
313341
});
314342
}
315343

344+
private void injectToMap(Map<String, String> map, String key, String value) {
345+
map.put(key, value);
346+
}
347+
316348
private List<Factory> getInjectors(Factory factory) {
317349
assertThat(factory).as("factory").isNotNull();
318350
if (factory instanceof CompositePropagationFactory compositePropagationFactory) {

0 commit comments

Comments
 (0)