From 8c44dd00e179d4d5ea054bab640ecdfb403decae Mon Sep 17 00:00:00 2001 From: Sergei Malafeev Date: Sat, 1 Aug 2020 01:18:55 +0800 Subject: [PATCH] Add support for TraceMultiPropagator (#849) --- .../auto/tooling/PropagatorsInitializer.java | 24 ++++++++++++------- 1 file changed, 15 insertions(+), 9 deletions(-) diff --git a/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/PropagatorsInitializer.java b/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/PropagatorsInitializer.java index 2bcf5da619..b5ed03011d 100644 --- a/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/PropagatorsInitializer.java +++ b/agent-tooling/src/main/java/io/opentelemetry/auto/tooling/PropagatorsInitializer.java @@ -24,7 +24,10 @@ import io.opentelemetry.extensions.trace.propagation.AwsXRayPropagator; import io.opentelemetry.extensions.trace.propagation.B3Propagator; import io.opentelemetry.extensions.trace.propagation.JaegerPropagator; import io.opentelemetry.extensions.trace.propagation.OtTracerPropagator; +import io.opentelemetry.extensions.trace.propagation.TraceMultiPropagator; +import io.opentelemetry.extensions.trace.propagation.TraceMultiPropagator.Builder; import io.opentelemetry.trace.propagation.HttpTraceContext; +import java.util.ArrayList; import java.util.List; import java.util.Map; import org.slf4j.Logger; @@ -60,23 +63,26 @@ public class PropagatorsInitializer { DefaultContextPropagators.Builder propagatorsBuilder = DefaultContextPropagators.builder(); - boolean addedPropagator = false; + List textPropagators = new ArrayList<>(propagators.size()); for (String propagatorId : propagators) { HttpTextFormat textPropagator = TEXTMAP_PROPAGATORS.get(propagatorId.trim().toLowerCase()); if (textPropagator != null) { - if (addedPropagator) { - log.warn( - "Only one propagator per concern can be added, " + textPropagator + " is ignored"); - continue; - } - propagatorsBuilder.addHttpTextFormat(textPropagator); + textPropagators.add(textPropagator); log.info("Added " + textPropagator + " propagator"); - addedPropagator = true; } else { log.warn("No matching propagator for " + propagatorId); } } - + if (textPropagators.size() > 1) { + Builder traceMultiPropagatorBuilder = TraceMultiPropagator.builder(); + for (HttpTextFormat textPropagator : textPropagators) { + traceMultiPropagatorBuilder.addPropagator(textPropagator); + } + propagatorsBuilder.addHttpTextFormat(traceMultiPropagatorBuilder.build()); + } else if (textPropagators.size() == 1) { + propagatorsBuilder.addHttpTextFormat(textPropagators.get(0)); + } + // Register it in the global propagators: OpenTelemetry.setPropagators(propagatorsBuilder.build()); } }