Skip to content
Merged
11 changes: 11 additions & 0 deletions src/OpenTelemetry.Extensions.Propagators/JaegerPropagator.cs
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ namespace OpenTelemetry.Extensions.Propagators;
/// <summary>
/// A text map propagator for Jaeger trace context. See https://www.jaegertracing.io/docs/next-release/client-libraries/#propagation-format.
/// </summary>
[Obsolete(ObsoleteMessage)]
public class JaegerPropagator : TextMapPropagator
{
internal const string JaegerHeader = "uber-trace-id";
Expand All @@ -19,14 +20,21 @@ public class JaegerPropagator : TextMapPropagator

internal static readonly string[] JaegerDelimiters = [JaegerDelimiter, JaegerDelimiterEncoded];

private const string ObsoleteMessage = "The Jaeger propagator is obsolete and will be removed in a future version. The Jaeger propagation format has been deprecated in favor of W3C Trace Context. Use TraceContextPropagator instead. See https://www.jaegertracing.io/sdk-migration/#propagation-format and https://github.com/open-telemetry/opentelemetry-specification/issues/4827 for more information.";

private static readonly int TraceId128BitLength = "0af7651916cd43dd8448eb211c80319c".Length;
private static readonly int SpanIdLength = "00f067aa0ba902b7".Length;

/// <inheritdoc/>
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
public override ISet<string> Fields => new HashSet<string> { JaegerHeader };
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member

/// <inheritdoc/>
[Obsolete(ObsoleteMessage)]
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
public override PropagationContext Extract<T>(PropagationContext context, T carrier, Func<T, string, IEnumerable<string>?> getter)
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member
{
if (context.ActivityContext.IsValid())
{
Expand Down Expand Up @@ -81,7 +89,10 @@ public override PropagationContext Extract<T>(PropagationContext context, T carr
}

/// <inheritdoc/>
[Obsolete(ObsoleteMessage)]
#pragma warning disable CS0809 // Obsolete member overrides non-obsolete member
public override void Inject<T>(PropagationContext context, T carrier, Action<T, string, string> setter)
#pragma warning restore CS0809 // Obsolete member overrides non-obsolete member
{
// from https://www.jaegertracing.io/docs/next-release/client-libraries/#propagation-format
// parent id is optional and deprecated, will not attempt to set it.
Expand Down
8 changes: 8 additions & 0 deletions src/OpenTelemetry.Extensions.Propagators/README.md
Original file line number Diff line number Diff line change
Expand Up @@ -8,6 +8,14 @@ propagators by following the [OpenTelemetry specification](https://opentelemetry
(currently supporting [B3](https://github.com/openzipkin/b3-propagation) format)
for tracing.

> [!NOTE]
> `JaegerPropagator` is deprecated and will be removed in a future version.
> The Jaeger propagation format has been deprecated in favor of W3C Trace Context.
> Use `TraceContextPropagator` from the `OpenTelemetry` package instead.
> See [Jaeger's migration guide](https://www.jaegertracing.io/sdk-migration/#propagation-format)
> and [OpenTelemetry specification issue #4827](https://github.com/open-telemetry/opentelemetry-specification/issues/4827)
> for more information.

## Installation

Add a reference to the
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -44,7 +44,9 @@ public void ExtractReturnsOriginalContextIfContextIsAlreadyValid()
var headers = new Dictionary<string, string[]>();

// act
#pragma warning disable CS0618 // Type or member is obsolete
var result = new JaegerPropagator().Extract(propagationContext, headers, Getter);
#pragma warning restore CS0618

// assert
Assert.Equal(propagationContext, result);
Expand All @@ -57,7 +59,9 @@ public void ExtractReturnsOriginalContextIfCarrierIsNull()
var propagationContext = default(PropagationContext);

// act
#pragma warning disable CS0618 // Type or member is obsolete
var result = new JaegerPropagator().Extract(propagationContext, null, Getter!);
#pragma warning restore CS0618

// assert
Assert.Equal(propagationContext, result);
Expand All @@ -72,7 +76,9 @@ public void ExtractReturnsOriginalContextIfGetterIsNull()
var headers = new Dictionary<string, string[]>();

// act
#pragma warning disable CS0618 // Type or member is obsolete
var result = new JaegerPropagator().Extract(propagationContext, headers, null!);
#pragma warning restore CS0618

// assert
Assert.Equal(propagationContext, result);
Expand Down Expand Up @@ -102,7 +108,9 @@ public void ExtractReturnsOriginalContextIfHeaderIsNotValid(string traceId, stri
var headers = new Dictionary<string, string[]> { { JaegerHeader, [formattedHeader] } };

// act
#pragma warning disable CS0618 // Type or member is obsolete
var result = new JaegerPropagator().Extract(propagationContext, headers, Getter);
#pragma warning restore CS0618

// assert
Assert.Equal(propagationContext, result);
Expand Down Expand Up @@ -141,7 +149,9 @@ public void ExtractReturnsNewContextIfHeaderIsValid(string traceId, string spanI
var headers = new Dictionary<string, string[]> { { JaegerHeader, [formattedHeader] } };

// act
#pragma warning disable CS0618 // Type or member is obsolete
var result = new JaegerPropagator().Extract(propagationContext, headers, Getter);
#pragma warning restore CS0618

// assert
Assert.Equal(traceId.PadLeft(TraceId.Length, '0'), result.ActivityContext.TraceId.ToString());
Expand All @@ -158,7 +168,9 @@ public void InjectDoesNoopIfContextIsInvalid()
var headers = new Dictionary<string, string>();

// act
#pragma warning disable CS0618 // Type or member is obsolete
new JaegerPropagator().Inject(propagationContext, headers, Setter);
#pragma warning restore CS0618

// assert
Assert.Empty(headers);
Expand All @@ -175,7 +187,9 @@ public void InjectDoesNoopIfCarrierIsNull()
default);

// act
#pragma warning disable CS0618 // Type or member is obsolete
new JaegerPropagator().Inject(propagationContext, null, Setter!);
#pragma warning restore CS0618

// assert
}
Expand All @@ -193,7 +207,9 @@ public void InjectDoesNoopIfSetterIsNull()
var headers = new Dictionary<string, string>();

// act
#pragma warning disable CS0618 // Type or member is obsolete
new JaegerPropagator().Inject(propagationContext, headers, null!);
#pragma warning restore CS0618

// assert
Assert.Empty(headers);
Expand Down Expand Up @@ -221,7 +237,9 @@ public void InjectWillAddJaegerFormattedTraceToCarrier(string sampledFlag)
var headers = new Dictionary<string, string>();

// act
#pragma warning disable CS0618 // Type or member is obsolete
new JaegerPropagator().Inject(propagationContext, headers, Setter);
#pragma warning restore CS0618

// assert
Assert.Single(headers);
Expand Down