Skip to content

Commit 7120dc0

Browse files
committed
Adapt to changes in Brave tagged fields handling
See gh-38724 See gh-37435
1 parent 0ca55bf commit 7120dc0

File tree

4 files changed

+35
-98
lines changed

4 files changed

+35
-98
lines changed

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

Lines changed: 0 additions & 43 deletions
This file was deleted.

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

Lines changed: 22 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,5 @@
11
/*
2-
* Copyright 2012-2023 the original author or authors.
2+
* Copyright 2012-2024 the original author or authors.
33
*
44
* Licensed under the Apache License, Version 2.0 (the "License");
55
* you may not use this file except in compliance with the License.
@@ -70,13 +70,17 @@
7070
BravePropagationConfigurations.NoPropagation.class })
7171
public class BraveAutoConfiguration {
7272

73-
static final BraveBaggageManager BRAVE_BAGGAGE_MANAGER = new BraveBaggageManager();
74-
7573
/**
7674
* Default value for application name if {@code spring.application.name} is not set.
7775
*/
7876
private static final String DEFAULT_APPLICATION_NAME = "application";
7977

78+
private final TracingProperties tracingProperties;
79+
80+
BraveAutoConfiguration(TracingProperties tracingProperties) {
81+
this.tracingProperties = tracingProperties;
82+
}
83+
8084
@Bean
8185
@ConditionalOnMissingBean
8286
@Order(Ordered.HIGHEST_PRECEDENCE)
@@ -88,22 +92,22 @@ CompositeSpanHandler compositeSpanHandler(ObjectProvider<SpanExportingPredicate>
8892

8993
@Bean
9094
@ConditionalOnMissingBean
91-
public Tracing braveTracing(Environment environment, TracingProperties properties, List<SpanHandler> spanHandlers,
95+
Tracing braveTracing(Environment environment, List<SpanHandler> spanHandlers,
9296
List<TracingCustomizer> tracingCustomizers, CurrentTraceContext currentTraceContext,
9397
Factory propagationFactory, Sampler sampler) {
94-
if (properties.getBrave().isSpanJoiningSupported()) {
95-
if (properties.getPropagation().getType() != null
96-
&& properties.getPropagation().getType().contains(PropagationType.W3C)) {
98+
if (this.tracingProperties.getBrave().isSpanJoiningSupported()) {
99+
if (this.tracingProperties.getPropagation().getType() != null
100+
&& this.tracingProperties.getPropagation().getType().contains(PropagationType.W3C)) {
97101
throw new IncompatibleConfigurationException("management.tracing.propagation.type",
98102
"management.tracing.brave.span-joining-supported");
99103
}
100-
if (properties.getPropagation().getType() == null
101-
&& properties.getPropagation().getProduce().contains(PropagationType.W3C)) {
104+
if (this.tracingProperties.getPropagation().getType() == null
105+
&& this.tracingProperties.getPropagation().getProduce().contains(PropagationType.W3C)) {
102106
throw new IncompatibleConfigurationException("management.tracing.propagation.produce",
103107
"management.tracing.brave.span-joining-supported");
104108
}
105-
if (properties.getPropagation().getType() == null
106-
&& properties.getPropagation().getConsume().contains(PropagationType.W3C)) {
109+
if (this.tracingProperties.getPropagation().getType() == null
110+
&& this.tracingProperties.getPropagation().getConsume().contains(PropagationType.W3C)) {
107111
throw new IncompatibleConfigurationException("management.tracing.propagation.consume",
108112
"management.tracing.brave.span-joining-supported");
109113
}
@@ -112,7 +116,7 @@ public Tracing braveTracing(Environment environment, TracingProperties propertie
112116
Builder builder = Tracing.newBuilder()
113117
.currentTraceContext(currentTraceContext)
114118
.traceId128Bit(true)
115-
.supportsJoin(properties.getBrave().isSpanJoiningSupported())
119+
.supportsJoin(this.tracingProperties.getBrave().isSpanJoiningSupported())
116120
.propagationFactory(propagationFactory)
117121
.sampler(sampler)
118122
.localServiceName(applicationName);
@@ -125,13 +129,13 @@ public Tracing braveTracing(Environment environment, TracingProperties propertie
125129

126130
@Bean
127131
@ConditionalOnMissingBean
128-
public brave.Tracer braveTracer(Tracing tracing) {
132+
brave.Tracer braveTracer(Tracing tracing) {
129133
return tracing.tracer();
130134
}
131135

132136
@Bean
133137
@ConditionalOnMissingBean
134-
public CurrentTraceContext braveCurrentTraceContext(List<CurrentTraceContext.ScopeDecorator> scopeDecorators,
138+
CurrentTraceContext braveCurrentTraceContext(List<CurrentTraceContext.ScopeDecorator> scopeDecorators,
135139
List<CurrentTraceContextCustomizer> currentTraceContextCustomizers) {
136140
ThreadLocalCurrentTraceContext.Builder builder = ThreadLocalCurrentTraceContext.newBuilder();
137141
scopeDecorators.forEach(builder::addScopeDecorator);
@@ -143,14 +147,15 @@ public CurrentTraceContext braveCurrentTraceContext(List<CurrentTraceContext.Sco
143147

144148
@Bean
145149
@ConditionalOnMissingBean
146-
public Sampler braveSampler(TracingProperties properties) {
147-
return Sampler.create(properties.getSampling().getProbability());
150+
Sampler braveSampler() {
151+
return Sampler.create(this.tracingProperties.getSampling().getProbability());
148152
}
149153

150154
@Bean
151155
@ConditionalOnMissingBean(io.micrometer.tracing.Tracer.class)
152156
BraveTracer braveTracerBridge(brave.Tracer tracer, CurrentTraceContext currentTraceContext) {
153-
return new BraveTracer(tracer, new BraveCurrentTraceContext(currentTraceContext), BRAVE_BAGGAGE_MANAGER);
157+
return new BraveTracer(tracer, new BraveCurrentTraceContext(currentTraceContext),
158+
new BraveBaggageManager(this.tracingProperties.getBaggage().getTagFields()));
154159
}
155160

156161
@Bean

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

Lines changed: 3 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -27,11 +27,11 @@
2727
import brave.baggage.CorrelationScopeCustomizer;
2828
import brave.baggage.CorrelationScopeDecorator;
2929
import brave.context.slf4j.MDCScopeDecorator;
30-
import brave.handler.SpanHandler;
3130
import brave.propagation.CurrentTraceContext.ScopeDecorator;
3231
import brave.propagation.Propagation;
3332
import brave.propagation.Propagation.Factory;
3433
import brave.propagation.Propagation.KeyFactory;
34+
import io.micrometer.tracing.brave.bridge.BraveBaggageManager;
3535

3636
import org.springframework.beans.factory.ObjectProvider;
3737
import org.springframework.boot.actuate.autoconfigure.tracing.TracingProperties.Baggage.Correlation;
@@ -41,7 +41,6 @@
4141
import org.springframework.context.annotation.Bean;
4242
import org.springframework.context.annotation.Configuration;
4343
import org.springframework.core.annotation.Order;
44-
import org.springframework.util.CollectionUtils;
4544

4645
/**
4746
* Brave propagation configurations. They are imported by {@link BraveAutoConfiguration}.
@@ -92,7 +91,8 @@ BaggagePropagation.FactoryBuilder propagationFactoryBuilder(
9291
baggagePropagationCustomizers.orderedStream()
9392
.forEach((customizer) -> customizer.customize(throwAwayBuilder));
9493
CompositePropagationFactory propagationFactory = CompositePropagationFactory.create(
95-
this.tracingProperties.getPropagation(), BraveAutoConfiguration.BRAVE_BAGGAGE_MANAGER,
94+
this.tracingProperties.getPropagation(),
95+
new BraveBaggageManager(this.tracingProperties.getBaggage().getTagFields()),
9696
LocalBaggageFields.extractFrom(throwAwayBuilder));
9797
FactoryBuilder builder = BaggagePropagation.newFactoryBuilder(propagationFactory);
9898
throwAwayBuilder.configs().forEach(builder::add);
@@ -112,37 +112,19 @@ public <K> Propagation<K> create(KeyFactory<K> keyFactory) {
112112
}
113113

114114
@Bean
115-
@Order(0)
116115
BaggagePropagationCustomizer remoteFieldsBaggagePropagationCustomizer() {
117116
return (builder) -> {
118117
List<String> remoteFields = this.tracingProperties.getBaggage().getRemoteFields();
119118
for (String fieldName : remoteFields) {
120119
builder.add(BaggagePropagationConfig.SingleBaggageField.remote(BaggageField.create(fieldName)));
121120
}
122-
};
123-
}
124-
125-
@Bean
126-
@Order(1)
127-
BaggagePropagationCustomizer localFieldsBaggagePropagationCustomizer() {
128-
return (builder) -> {
129121
List<String> localFields = this.tracingProperties.getBaggage().getLocalFields();
130122
for (String localFieldName : localFields) {
131123
builder.add(BaggagePropagationConfig.SingleBaggageField.local(BaggageField.create(localFieldName)));
132124
}
133125
};
134126
}
135127

136-
@Bean
137-
@Order(2)
138-
SpanHandler baggageTagSpanHandler() {
139-
List<String> tagFields = this.tracingProperties.getBaggage().getTagFields();
140-
if (CollectionUtils.isEmpty(tagFields)) {
141-
return SpanHandler.NOOP;
142-
}
143-
return new BaggageTagSpanHandler(tagFields.stream().map(BaggageField::create).toList());
144-
}
145-
146128
@Bean
147129
@ConditionalOnMissingBean
148130
@ConditionalOnEnabledTracing

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

Lines changed: 10 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,6 @@
2626
import brave.SpanCustomizer;
2727
import brave.Tracer;
2828
import brave.Tracing;
29-
import brave.baggage.BaggageField;
3029
import brave.baggage.BaggagePropagation;
3130
import brave.baggage.CorrelationScopeConfig.SingleCorrelationField;
3231
import brave.handler.SpanHandler;
@@ -345,22 +344,6 @@ void compositeSpanHandlerUsesFilterPredicateAndReportersInOrder() {
345344
});
346345
}
347346

348-
@Test
349-
void shouldCreateTagHandler() {
350-
this.contextRunner.withPropertyValues("management.tracing.baggage.tag-fields=country-code,bp")
351-
.run((context) -> assertThat(context.getBean(BaggageTagSpanHandler.class)).extracting("fieldsToTag")
352-
.asInstanceOf(InstanceOfAssertFactories.list(BaggageField.class))
353-
.extracting(BaggageField::name)
354-
.containsExactlyInAnyOrder("country-code", "bp"));
355-
}
356-
357-
@Test
358-
void noopOnNoTagFields() {
359-
this.contextRunner.withPropertyValues("management.tracing.baggage.tag-fields=")
360-
.run((context) -> assertThat(context.getBean("baggageTagSpanHandler", SpanHandler.class))
361-
.isSameAs(SpanHandler.NOOP));
362-
}
363-
364347
@Test
365348
void shouldDisablePropagationIfTracingIsDisabled() {
366349
this.contextRunner.withPropertyValues("management.tracing.enabled=false").run((context) -> {
@@ -371,6 +354,16 @@ void shouldDisablePropagationIfTracingIsDisabled() {
371354
});
372355
}
373356

357+
@Test
358+
void shouldConfigureTaggedFields() {
359+
this.contextRunner.withPropertyValues("management.tracing.baggage.tag-fields=t1").run((context) -> {
360+
BraveTracer braveTracer = context.getBean(BraveTracer.class);
361+
assertThat(braveTracer).extracting("braveBaggageManager.tagFields")
362+
.asInstanceOf(InstanceOfAssertFactories.list(String.class))
363+
.containsExactly("t1");
364+
});
365+
}
366+
374367
private void injectToMap(Map<String, String> map, String key, String value) {
375368
map.put(key, value);
376369
}

0 commit comments

Comments
 (0)