Browse Source

Merge branch '3.4.x' into 3.5.x

Closes gh-46844
pull/47140/head
Phillip Webb 4 months ago
parent
commit
16f25ec823
  1. 56
      spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/CompositePropagationFactory.java
  2. 13
      spring-boot-project/spring-boot-actuator-autoconfigure/src/main/java/org/springframework/boot/actuate/autoconfigure/tracing/CompositeTextMapPropagator.java

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

@ -19,7 +19,6 @@ package org.springframework.boot.actuate.autoconfigure.tracing;
import java.util.Collection; import java.util.Collection;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.function.Predicate;
import java.util.stream.Stream; import java.util.stream.Stream;
import brave.propagation.B3Propagation; import brave.propagation.B3Propagation;
@ -76,11 +75,19 @@ class CompositePropagationFactory extends Propagation.Factory {
@Override @Override
public TraceContext decorate(TraceContext context) { public TraceContext decorate(TraceContext context) {
return Stream.concat(this.injectors.stream(), this.extractors.stream()) for (Propagation.Factory factory : this.injectors.factories) {
.map((factory) -> factory.decorate(context)) TraceContext decorated = factory.decorate(context);
.filter((decorated) -> decorated != context) if (decorated != context) {
.findFirst() return decorated;
.orElse(context); }
}
for (Propagation.Factory factory : this.extractors.factories) {
TraceContext decorated = factory.decorate(context);
if (decorated != context) {
return decorated;
}
}
return context;
} }
/** /**
@ -179,11 +186,21 @@ class CompositePropagationFactory extends Propagation.Factory {
} }
boolean requires128BitTraceId() { boolean requires128BitTraceId() {
return stream().anyMatch(Propagation.Factory::requires128BitTraceId); for (Propagation.Factory factory : this.factories) {
if (factory.requires128BitTraceId()) {
return true;
}
}
return false;
} }
boolean supportsJoin() { boolean supportsJoin() {
return stream().allMatch(Propagation.Factory::supportsJoin); for (Propagation.Factory factory : this.factories) {
if (!factory.supportsJoin()) {
return false;
}
}
return true;
} }
List<Propagation<String>> get() { List<Propagation<String>> get() {
@ -224,19 +241,24 @@ class CompositePropagationFactory extends Propagation.Factory {
@Override @Override
public <R> TraceContext.Injector<R> injector(Setter<R, String> setter) { public <R> TraceContext.Injector<R> injector(Setter<R, String> setter) {
return (traceContext, request) -> this.injectors.stream() return (traceContext, request) -> {
.map((propagation) -> propagation.injector(setter)) for (Propagation<String> propagation : this.injectors) {
.forEach((injector) -> injector.inject(traceContext, request)); propagation.injector(setter).inject(traceContext, request);
}
};
} }
@Override @Override
public <R> TraceContext.Extractor<R> extractor(Getter<R, String> getter) { public <R> TraceContext.Extractor<R> extractor(Getter<R, String> getter) {
return (request) -> this.extractors.stream() return (request) -> {
.map((propagation) -> propagation.extractor(getter)) for (Propagation<String> propagation : this.extractors) {
.map((extractor) -> extractor.extract(request)) TraceContextOrSamplingFlags extracted = propagation.extractor(getter).extract(request);
.filter(Predicate.not(TraceContextOrSamplingFlags.EMPTY::equals)) if (!TraceContextOrSamplingFlags.EMPTY.equals(extracted)) {
.findFirst() return extracted;
.orElse(TraceContextOrSamplingFlags.EMPTY); }
}
return TraceContextOrSamplingFlags.EMPTY;
};
} }
} }

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

@ -106,11 +106,14 @@ class CompositeTextMapPropagator implements TextMapPropagator {
if (getter == null) { if (getter == null) {
return context; return context;
} }
Context result = this.extractors.stream() Context result = context;
.map((extractor) -> extractor.extract(context, carrier, getter)) for (TextMapPropagator extractor : this.extractors) {
.filter((extracted) -> extracted != context) Context extracted = extractor.extract(context, carrier, getter);
.findFirst() if (extracted != context) {
.orElse(context); result = extracted;
break;
}
}
if (this.baggagePropagator != null) { if (this.baggagePropagator != null) {
result = this.baggagePropagator.extract(result, carrier, getter); result = this.baggagePropagator.extract(result, carrier, getter);
} }

Loading…
Cancel
Save