Skip to content

Commit c5ef27d

Browse files
committed
WIP
1 parent d644f60 commit c5ef27d

File tree

4 files changed

+62
-146
lines changed

4 files changed

+62
-146
lines changed

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

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

1919
import java.util.ArrayList;
20+
import java.util.Collection;
2021
import java.util.Collections;
2122
import java.util.List;
2223

@@ -56,6 +57,7 @@
5657
import io.micrometer.tracing.exporter.SpanReporter;
5758

5859
import org.springframework.beans.factory.ObjectProvider;
60+
import org.springframework.boot.actuate.autoconfigure.tracing.TracingProperties.Propagation.PropagationType;
5961
import org.springframework.boot.autoconfigure.AutoConfiguration;
6062
import org.springframework.boot.autoconfigure.EnableAutoConfiguration;
6163
import org.springframework.boot.autoconfigure.condition.ConditionalOnClass;
@@ -81,6 +83,8 @@
8183
@ConditionalOnEnabledTracing
8284
public class BraveAutoConfiguration {
8385

86+
private static final BraveBaggageManager BRAVE_BAGGAGE_MANAGER = new BraveBaggageManager();
87+
8488
/**
8589
* Default value for application name if {@code spring.application.name} is not set.
8690
*/
@@ -95,25 +99,19 @@ CompositeSpanHandler compositeSpanHandler(ObjectProvider<SpanExportingPredicate>
9599
filters.orderedStream().toList());
96100
}
97101

98-
@Bean
99-
@ConditionalOnMissingBean
100-
BraveBaggageManager braveBaggageManager() {
101-
return new BraveBaggageManager();
102-
}
103-
104102
@Bean
105103
@ConditionalOnMissingBean
106104
public Tracing braveTracing(Environment environment, List<SpanHandler> spanHandlers,
107105
List<TracingCustomizer> tracingCustomizers, CurrentTraceContext currentTraceContext,
108106
Factory propagationFactory, Sampler sampler) {
109107
String applicationName = environment.getProperty("spring.application.name", DEFAULT_APPLICATION_NAME);
110108
Builder builder = Tracing.newBuilder()
111-
.currentTraceContext(currentTraceContext)
112-
.traceId128Bit(true)
113-
.supportsJoin(false)
114-
.propagationFactory(propagationFactory)
115-
.sampler(sampler)
116-
.localServiceName(applicationName);
109+
.currentTraceContext(currentTraceContext)
110+
.traceId128Bit(true)
111+
.supportsJoin(false)
112+
.propagationFactory(propagationFactory)
113+
.sampler(sampler)
114+
.localServiceName(applicationName);
117115
spanHandlers.forEach(builder::addSpanHandler);
118116
for (TracingCustomizer tracingCustomizer : tracingCustomizers) {
119117
tracingCustomizer.customize(builder);
@@ -147,9 +145,8 @@ public Sampler braveSampler(TracingProperties properties) {
147145

148146
@Bean
149147
@ConditionalOnMissingBean(io.micrometer.tracing.Tracer.class)
150-
BraveTracer braveTracerBridge(brave.Tracer tracer, CurrentTraceContext currentTraceContext,
151-
BraveBaggageManager braveBaggageManager) {
152-
return new BraveTracer(tracer, new BraveCurrentTraceContext(currentTraceContext), braveBaggageManager);
148+
BraveTracer braveTracerBridge(brave.Tracer tracer, CurrentTraceContext currentTraceContext) {
149+
return new BraveTracer(tracer, new BraveCurrentTraceContext(currentTraceContext), BRAVE_BAGGAGE_MANAGER);
153150
}
154151

155152
@Bean
@@ -176,19 +173,10 @@ static class BraveNoBaggageConfiguration {
176173

177174
@Bean
178175
@ConditionalOnMissingBean
179-
ExtractorFactories extractorFactories() {
180-
return ExtractorFactories.of(PropagationFactoryFactory.factoriesFor(PropagationType.values()));
181-
}
182-
183-
@Bean
184-
@ConditionalOnMissingBean
185-
InjectorFactories injectorFactories(TracingProperties tracing) {
186-
return InjectorFactories.of(PropagationFactoryFactory.factoriesFor(tracing.getPropagation().getType()));
187-
}
188-
189-
@Bean
190-
@ConditionalOnMissingBean
191-
Factory propagationFactory(InjectorFactories injectorFactories, ExtractorFactories extractorFactories) {
176+
Factory propagationFactory(TracingProperties properties) {
177+
Iterable<Factory> injectorFactories = PropagationFactoryFactory
178+
.factoriesFor(properties.getPropagation().getType());
179+
Iterable<Factory> extractorFactories = PropagationFactoryFactory.factoriesFor(PropagationType.values());
192180
return new CompositePropagationFactory(injectorFactories, extractorFactories);
193181
}
194182

@@ -204,25 +192,14 @@ static class BraveBaggageConfiguration {
204192
this.tracingProperties = tracingProperties;
205193
}
206194

207-
@Bean
208-
@ConditionalOnMissingBean
209-
ExtractorFactories extractorFactories(BraveBaggageManager braveBaggageManager) {
210-
return ExtractorFactories
211-
.of(PropagationFactoryFactory.factoriesFor(braveBaggageManager, PropagationType.values()));
212-
}
213-
214-
@Bean
215-
@ConditionalOnMissingBean
216-
InjectorFactories injectorFactories(BraveBaggageManager braveBaggageManager) {
217-
return InjectorFactories.of(PropagationFactoryFactory.factoriesFor(braveBaggageManager,
218-
this.tracingProperties.getPropagation().getType()));
219-
}
220-
221195
@Bean
222196
@ConditionalOnMissingBean
223197
BaggagePropagation.FactoryBuilder propagationFactoryBuilder(
224-
ObjectProvider<BaggagePropagationCustomizer> baggagePropagationCustomizers,
225-
InjectorFactories injectorFactories, ExtractorFactories extractorFactories) {
198+
ObjectProvider<BaggagePropagationCustomizer> baggagePropagationCustomizers) {
199+
Iterable<Factory> injectorFactories = PropagationFactoryFactory.factoriesFor(BRAVE_BAGGAGE_MANAGER,
200+
this.tracingProperties.getPropagation().getType());
201+
Iterable<Factory> extractorFactories = PropagationFactoryFactory.factoriesFor(BRAVE_BAGGAGE_MANAGER,
202+
PropagationType.values());
226203
Factory delegate = new CompositePropagationFactory(injectorFactories, extractorFactories);
227204
FactoryBuilder builder = BaggagePropagation.newFactoryBuilder(delegate);
228205
baggagePropagationCustomizers.orderedStream().forEach((customizer) -> customizer.customize(builder));
@@ -264,8 +241,8 @@ CorrelationScopeCustomizer correlationFieldsCorrelationScopeCustomizer() {
264241
List<String> correlationFields = this.tracingProperties.getBaggage().getCorrelation().getFields();
265242
for (String field : correlationFields) {
266243
builder.add(CorrelationScopeConfig.SingleCorrelationField.newBuilder(BaggageField.create(field))
267-
.flushOnUpdate()
268-
.build());
244+
.flushOnUpdate()
245+
.build());
269246
}
270247
};
271248
}
@@ -278,60 +255,6 @@ ScopeDecorator correlationScopeDecorator(CorrelationScopeDecorator.Builder build
278255

279256
}
280257

281-
/**
282-
* A collection of {@link Factory factories} used for trace context extraction.
283-
*
284-
* @author Moritz Halbritter
285-
* @since 3.0.8
286-
*/
287-
public interface ExtractorFactories extends Iterable<Factory> {
288-
289-
/**
290-
* Creates an {@link ExtractorFactories} object from the given factories.
291-
* @param factories factories
292-
* @return {@link ExtractorFactories} object
293-
*/
294-
static ExtractorFactories of(Iterable<Factory> factories) {
295-
return factories::iterator;
296-
}
297-
298-
static ExtractorFactories of(PropagationType... types) {
299-
return of(PropagationFactoryFactory.factoriesFor(types));
300-
}
301-
302-
static ExtractorFactories of(BaggageManager baggageManager, PropagationType... types) {
303-
return of(PropagationFactoryFactory.factoriesFor(baggageManager, types));
304-
}
305-
306-
}
307-
308-
/**
309-
* A collection of {@link Factory factories} used for trace context injection.
310-
*
311-
* @author Moritz Halbritter
312-
* @since 3.0.8
313-
*/
314-
public interface InjectorFactories extends Iterable<Factory> {
315-
316-
/**
317-
* Creates an {@link InjectorFactories} object from the given factories.
318-
* @param factories factories
319-
* @return {@link InjectorFactories} object
320-
*/
321-
static InjectorFactories of(Iterable<Factory> factories) {
322-
return factories::iterator;
323-
}
324-
325-
static InjectorFactories of(PropagationType... types) {
326-
return of(PropagationFactoryFactory.factoriesFor(types));
327-
}
328-
329-
static InjectorFactories of(BaggageManager baggageManager, PropagationType... types) {
330-
return of(PropagationFactoryFactory.factoriesFor(baggageManager, types));
331-
}
332-
333-
}
334-
335258
/**
336259
* Factory for {@link Factory propagation factories}.
337260
*/
@@ -365,10 +288,18 @@ private static Factory forType(BaggageManager baggageManager, PropagationType ty
365288
};
366289
}
367290

291+
private static List<Factory> factoriesFor(Collection<PropagationType> types) {
292+
return factoriesFor(null, types.toArray(PropagationType[]::new));
293+
}
294+
368295
private static List<Factory> factoriesFor(PropagationType... types) {
369296
return factoriesFor(null, types);
370297
}
371298

299+
private static List<Factory> factoriesFor(BaggageManager baggageManager, Collection<PropagationType> types) {
300+
return factoriesFor(baggageManager, types.toArray(PropagationType[]::new));
301+
}
302+
372303
private static List<Factory> factoriesFor(BaggageManager baggageManager, PropagationType... types) {
373304
List<Factory> result = new ArrayList<>(types.length);
374305
for (PropagationType type : types) {

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

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,13 @@
2525
import brave.propagation.TraceContext;
2626
import brave.propagation.TraceContextOrSamplingFlags;
2727

28+
/**
29+
* {@link Factory} which supports multiple tracing formats. It is able to configure
30+
* different formats for injecting and for extracting.
31+
*
32+
* @author Marcin Grzejszczak
33+
* @author Moritz Halbritter
34+
*/
2835
class CompositePropagationFactory extends Propagation.Factory implements Propagation<String> {
2936

3037
private final Iterable<Propagation.Factory> injectorFactories;
@@ -45,9 +52,9 @@ class CompositePropagationFactory extends Propagation.Factory implements Propaga
4552
@Override
4653
public List<String> keys() {
4754
return Stream.concat(this.injectors.stream(), this.extractors.stream())
48-
.flatMap((entry) -> entry.keys().stream())
49-
.distinct()
50-
.toList();
55+
.flatMap((entry) -> entry.keys().stream())
56+
.distinct()
57+
.toList();
5158
}
5259

5360
@Override
@@ -81,13 +88,13 @@ public <K> Propagation<K> create(KeyFactory<K> keyFactory) {
8188
@Override
8289
public boolean supportsJoin() {
8390
return Stream.concat(stream(this.injectorFactories), stream(this.extractorFactories))
84-
.allMatch(Factory::supportsJoin);
91+
.allMatch(Factory::supportsJoin);
8592
}
8693

8794
@Override
8895
public boolean requires128BitTraceId() {
8996
return Stream.concat(stream(this.injectorFactories), stream(this.extractorFactories))
90-
.allMatch(Factory::requires128BitTraceId);
97+
.allMatch(Factory::requires128BitTraceId);
9198
}
9299

93100
@Override

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

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

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

Lines changed: 19 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818

1919
import java.util.ArrayList;
2020
import java.util.List;
21+
import java.util.Set;
2122

2223
import org.springframework.boot.context.properties.ConfigurationProperties;
2324

@@ -166,18 +167,32 @@ public void setFields(List<String> fields) {
166167
public static class Propagation {
167168

168169
/**
169-
* Tracing context propagation type.
170+
* Tracing context propagation types.
170171
*/
171-
private PropagationType type = PropagationType.W3C;
172+
private Set<PropagationType> type = Set.of(PropagationType.W3C);
172173

173-
public PropagationType getType() {
174+
public Set<PropagationType> getType() {
174175
return this.type;
175176
}
176177

177-
public void setType(PropagationType type) {
178+
public void setType(Set<PropagationType> type) {
178179
this.type = type;
179180
}
180181

182+
enum PropagationType {
183+
184+
/**
185+
* B3 propagation type.
186+
*/
187+
B3,
188+
189+
/**
190+
* W3C propagation type.
191+
*/
192+
W3C
193+
194+
}
195+
181196
}
182197

183198
}

0 commit comments

Comments
 (0)