Skip to content

Commit dd74056

Browse files
[Exporter.Zipkin] Nullable (open-telemetry#5792)
Co-authored-by: Mikel Blanchard <[email protected]>
1 parent 37535a5 commit dd74056

15 files changed

+127
-123
lines changed
Lines changed: 9 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,22 @@
1+
#nullable enable
12
OpenTelemetry.Exporter.ZipkinExporter
2-
OpenTelemetry.Exporter.ZipkinExporter.ZipkinExporter(OpenTelemetry.Exporter.ZipkinExporterOptions options, System.Net.Http.HttpClient client = null) -> void
3+
OpenTelemetry.Exporter.ZipkinExporter.ZipkinExporter(OpenTelemetry.Exporter.ZipkinExporterOptions! options, System.Net.Http.HttpClient? client = null) -> void
34
OpenTelemetry.Exporter.ZipkinExporterOptions
4-
OpenTelemetry.Exporter.ZipkinExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions<System.Diagnostics.Activity>
55
OpenTelemetry.Exporter.ZipkinExporterOptions.BatchExportProcessorOptions.set -> void
6-
OpenTelemetry.Exporter.ZipkinExporterOptions.Endpoint.get -> System.Uri
6+
OpenTelemetry.Exporter.ZipkinExporterOptions.BatchExportProcessorOptions.get -> OpenTelemetry.BatchExportProcessorOptions<System.Diagnostics.Activity!>!
7+
OpenTelemetry.Exporter.ZipkinExporterOptions.HttpClientFactory.get -> System.Func<System.Net.Http.HttpClient!>!
8+
OpenTelemetry.Exporter.ZipkinExporterOptions.Endpoint.get -> System.Uri!
79
OpenTelemetry.Exporter.ZipkinExporterOptions.Endpoint.set -> void
810
OpenTelemetry.Exporter.ZipkinExporterOptions.ExportProcessorType.get -> OpenTelemetry.ExportProcessorType
911
OpenTelemetry.Exporter.ZipkinExporterOptions.ExportProcessorType.set -> void
10-
OpenTelemetry.Exporter.ZipkinExporterOptions.HttpClientFactory.get -> System.Func<System.Net.Http.HttpClient>
1112
OpenTelemetry.Exporter.ZipkinExporterOptions.HttpClientFactory.set -> void
1213
OpenTelemetry.Exporter.ZipkinExporterOptions.MaxPayloadSizeInBytes.get -> int?
1314
OpenTelemetry.Exporter.ZipkinExporterOptions.MaxPayloadSizeInBytes.set -> void
1415
OpenTelemetry.Exporter.ZipkinExporterOptions.UseShortTraceIds.get -> bool
1516
OpenTelemetry.Exporter.ZipkinExporterOptions.UseShortTraceIds.set -> void
1617
OpenTelemetry.Exporter.ZipkinExporterOptions.ZipkinExporterOptions() -> void
1718
OpenTelemetry.Trace.ZipkinExporterHelperExtensions
18-
override OpenTelemetry.Exporter.ZipkinExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity> batch) -> OpenTelemetry.ExportResult
19-
static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, string name, System.Action<OpenTelemetry.Exporter.ZipkinExporterOptions> configure) -> OpenTelemetry.Trace.TracerProviderBuilder
20-
static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder, System.Action<OpenTelemetry.Exporter.ZipkinExporterOptions> configure) -> OpenTelemetry.Trace.TracerProviderBuilder
21-
static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder builder) -> OpenTelemetry.Trace.TracerProviderBuilder
19+
override OpenTelemetry.Exporter.ZipkinExporter.Export(in OpenTelemetry.Batch<System.Diagnostics.Activity!> batch) -> OpenTelemetry.ExportResult
20+
static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder) -> OpenTelemetry.Trace.TracerProviderBuilder!
21+
static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder, string? name, System.Action<OpenTelemetry.Exporter.ZipkinExporterOptions!>? configure) -> OpenTelemetry.Trace.TracerProviderBuilder!
22+
static OpenTelemetry.Trace.ZipkinExporterHelperExtensions.AddZipkinExporter(this OpenTelemetry.Trace.TracerProviderBuilder! builder, System.Action<OpenTelemetry.Exporter.ZipkinExporterOptions!>! configure) -> OpenTelemetry.Trace.TracerProviderBuilder!

src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinActivityConversionExtensions.cs

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -21,13 +21,13 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l
2121
{
2222
var context = activity.Context;
2323

24-
string parentId = activity.ParentSpanId == default ?
24+
string? parentId = activity.ParentSpanId == default ?
2525
null
2626
: EncodeSpanId(activity.ParentSpanId);
2727

2828
var tagState = new TagEnumerationState
2929
{
30-
Tags = PooledList<KeyValuePair<string, object>>.Create(),
30+
Tags = PooledList<KeyValuePair<string, object?>>.Create(),
3131
};
3232

3333
tagState.EnumerateTags(activity);
@@ -38,26 +38,26 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l
3838
{
3939
if (activity.Status == ActivityStatusCode.Ok)
4040
{
41-
PooledList<KeyValuePair<string, object>>.Add(
41+
PooledList<KeyValuePair<string, object?>>.Add(
4242
ref tagState.Tags,
43-
new KeyValuePair<string, object>(
43+
new KeyValuePair<string, object?>(
4444
SpanAttributeConstants.StatusCodeKey,
4545
"OK"));
4646
}
4747

4848
// activity.Status is Error
4949
else
5050
{
51-
PooledList<KeyValuePair<string, object>>.Add(
51+
PooledList<KeyValuePair<string, object?>>.Add(
5252
ref tagState.Tags,
53-
new KeyValuePair<string, object>(
53+
new KeyValuePair<string, object?>(
5454
SpanAttributeConstants.StatusCodeKey,
5555
"ERROR"));
5656

5757
// Error flag rule from https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk_exporters/zipkin.md#status
58-
PooledList<KeyValuePair<string, object>>.Add(
58+
PooledList<KeyValuePair<string, object?>>.Add(
5959
ref tagState.Tags,
60-
new KeyValuePair<string, object>(
60+
new KeyValuePair<string, object?>(
6161
ZipkinErrorFlagTagName,
6262
activity.StatusDescription ?? string.Empty));
6363
}
@@ -67,18 +67,18 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l
6767
// activity status takes precedence over status tag.
6868
else if (tagState.StatusCode.HasValue && tagState.StatusCode != StatusCode.Unset)
6969
{
70-
PooledList<KeyValuePair<string, object>>.Add(
70+
PooledList<KeyValuePair<string, object?>>.Add(
7171
ref tagState.Tags,
72-
new KeyValuePair<string, object>(
72+
new KeyValuePair<string, object?>(
7373
SpanAttributeConstants.StatusCodeKey,
7474
StatusHelper.GetTagValueForStatusCode(tagState.StatusCode.Value)));
7575

7676
// Error flag rule from https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/trace/sdk_exporters/zipkin.md#status
7777
if (tagState.StatusCode == StatusCode.Error)
7878
{
79-
PooledList<KeyValuePair<string, object>>.Add(
79+
PooledList<KeyValuePair<string, object?>>.Add(
8080
ref tagState.Tags,
81-
new KeyValuePair<string, object>(
81+
new KeyValuePair<string, object?>(
8282
ZipkinErrorFlagTagName,
8383
tagState.StatusDescription ?? string.Empty));
8484
}
@@ -87,30 +87,30 @@ internal static ZipkinSpan ToZipkinSpan(this Activity activity, ZipkinEndpoint l
8787
var activitySource = activity.Source;
8888
if (!string.IsNullOrEmpty(activitySource.Name))
8989
{
90-
PooledList<KeyValuePair<string, object>>.Add(ref tagState.Tags, new KeyValuePair<string, object>("otel.scope.name", activitySource.Name));
90+
PooledList<KeyValuePair<string, object?>>.Add(ref tagState.Tags, new KeyValuePair<string, object?>("otel.scope.name", activitySource.Name));
9191

9292
// otel.library.name is deprecated, but has to be propagated according to https://github.com/open-telemetry/opentelemetry-specification/blob/v1.31.0/specification/common/mapping-to-non-otlp.md#instrumentationscope
93-
PooledList<KeyValuePair<string, object>>.Add(ref tagState.Tags, new KeyValuePair<string, object>("otel.library.name", activitySource.Name));
93+
PooledList<KeyValuePair<string, object?>>.Add(ref tagState.Tags, new KeyValuePair<string, object?>("otel.library.name", activitySource.Name));
9494
if (!string.IsNullOrEmpty(activitySource.Version))
9595
{
96-
PooledList<KeyValuePair<string, object>>.Add(ref tagState.Tags, new KeyValuePair<string, object>("otel.scope.version", activitySource.Version));
96+
PooledList<KeyValuePair<string, object?>>.Add(ref tagState.Tags, new KeyValuePair<string, object?>("otel.scope.version", activitySource.Version));
9797

9898
// otel.library.version is deprecated, but has to be propagated according to https://github.com/open-telemetry/opentelemetry-specification/blob/v1.31.0/specification/common/mapping-to-non-otlp.md#instrumentationscope
99-
PooledList<KeyValuePair<string, object>>.Add(ref tagState.Tags, new KeyValuePair<string, object>("otel.library.version", activitySource.Version));
99+
PooledList<KeyValuePair<string, object?>>.Add(ref tagState.Tags, new KeyValuePair<string, object?>("otel.library.version", activitySource.Version));
100100
}
101101
}
102102

103-
ZipkinEndpoint remoteEndpoint = null;
103+
ZipkinEndpoint? remoteEndpoint = null;
104104
if (activity.Kind == ActivityKind.Client || activity.Kind == ActivityKind.Producer)
105105
{
106-
PeerServiceResolver.Resolve(ref tagState, out string peerServiceName, out bool addAsTag);
106+
PeerServiceResolver.Resolve(ref tagState, out string? peerServiceName, out bool addAsTag);
107107

108108
if (peerServiceName != null)
109109
{
110110
remoteEndpoint = RemoteEndpointCache.GetOrAdd((peerServiceName, default), ZipkinEndpoint.Create);
111111
if (addAsTag)
112112
{
113-
PooledList<KeyValuePair<string, object>>.Add(ref tagState.Tags, new KeyValuePair<string, object>(SemanticConventions.AttributePeerService, peerServiceName));
113+
PooledList<KeyValuePair<string, object?>>.Add(ref tagState.Tags, new KeyValuePair<string, object?>(SemanticConventions.AttributePeerService, peerServiceName));
114114
}
115115
}
116116
}
@@ -172,7 +172,7 @@ private static string EncodeTraceId(ActivityTraceId traceId, bool useShortTraceI
172172
return id;
173173
}
174174

175-
private static string ToActivityKind(Activity activity)
175+
private static string? ToActivityKind(Activity activity)
176176
{
177177
return activity.Kind switch
178178
{
@@ -186,15 +186,15 @@ private static string ToActivityKind(Activity activity)
186186

187187
internal struct TagEnumerationState : PeerServiceResolver.IPeerServiceState
188188
{
189-
public PooledList<KeyValuePair<string, object>> Tags;
189+
public PooledList<KeyValuePair<string, object?>> Tags;
190190

191-
public string PeerService { get; set; }
191+
public string? PeerService { get; set; }
192192

193193
public int? PeerServicePriority { get; set; }
194194

195-
public string HostName { get; set; }
195+
public string? HostName { get; set; }
196196

197-
public string IpAddress { get; set; }
197+
public string? IpAddress { get; set; }
198198

199199
public long Port { get; set; }
200200

@@ -239,7 +239,7 @@ public void EnumerateTags(Activity activity)
239239
PeerServiceResolver.InspectTag(ref this, key, intVal);
240240
}
241241

242-
PooledList<KeyValuePair<string, object>>.Add(ref this.Tags, tag);
242+
PooledList<KeyValuePair<string, object?>>.Add(ref this.Tags, tag);
243243
}
244244
}
245245
}

src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinEndpoint.cs

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -13,11 +13,11 @@ public ZipkinEndpoint(string serviceName)
1313
}
1414

1515
public ZipkinEndpoint(
16-
string serviceName,
17-
string ipv4,
18-
string ipv6,
16+
string? serviceName,
17+
string? ipv4,
18+
string? ipv6,
1919
int? port,
20-
Dictionary<string, object> tags)
20+
Dictionary<string, object>? tags)
2121
{
2222
this.ServiceName = serviceName;
2323
this.Ipv4 = ipv4;
@@ -26,15 +26,15 @@ public ZipkinEndpoint(
2626
this.Tags = tags;
2727
}
2828

29-
public string ServiceName { get; }
29+
public string? ServiceName { get; }
3030

31-
public string Ipv4 { get; }
31+
public string? Ipv4 { get; }
3232

33-
public string Ipv6 { get; }
33+
public string? Ipv6 { get; }
3434

3535
public int? Port { get; }
3636

37-
public Dictionary<string, object> Tags { get; }
37+
public Dictionary<string, object>? Tags { get; }
3838

3939
public static ZipkinEndpoint Create(string serviceName)
4040
{

src/OpenTelemetry.Exporter.Zipkin/Implementation/ZipkinSpan.cs

Lines changed: 10 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -11,16 +11,16 @@ internal readonly struct ZipkinSpan
1111
{
1212
public ZipkinSpan(
1313
string traceId,
14-
string parentId,
14+
string? parentId,
1515
string id,
16-
string kind,
16+
string? kind,
1717
string name,
1818
long? timestamp,
1919
long? duration,
2020
ZipkinEndpoint localEndpoint,
21-
ZipkinEndpoint remoteEndpoint,
21+
ZipkinEndpoint? remoteEndpoint,
2222
in PooledList<ZipkinAnnotation> annotations,
23-
in PooledList<KeyValuePair<string, object>> tags,
23+
in PooledList<KeyValuePair<string, object?>> tags,
2424
bool? debug,
2525
bool? shared)
2626
{
@@ -44,11 +44,11 @@ public ZipkinSpan(
4444

4545
public string TraceId { get; }
4646

47-
public string ParentId { get; }
47+
public string? ParentId { get; }
4848

4949
public string Id { get; }
5050

51-
public string Kind { get; }
51+
public string? Kind { get; }
5252

5353
public string Name { get; }
5454

@@ -58,11 +58,11 @@ public ZipkinSpan(
5858

5959
public ZipkinEndpoint LocalEndpoint { get; }
6060

61-
public ZipkinEndpoint RemoteEndpoint { get; }
61+
public ZipkinEndpoint? RemoteEndpoint { get; }
6262

6363
public PooledList<ZipkinAnnotation> Annotations { get; }
6464

65-
public PooledList<KeyValuePair<string, object>> Tags { get; }
65+
public PooledList<KeyValuePair<string, object?>> Tags { get; }
6666

6767
public bool? Debug { get; }
6868

@@ -148,7 +148,7 @@ public void Write(Utf8JsonWriter writer)
148148
writer.WriteEndArray();
149149
}
150150

151-
if (!this.Tags.IsEmpty || this.LocalEndpoint.Tags != null)
151+
if (!this.Tags.IsEmpty || this.LocalEndpoint!.Tags != null)
152152
{
153153
writer.WritePropertyName(ZipkinSpanJsonHelper.TagsPropertyName);
154154
writer.WriteStartObject();
@@ -161,7 +161,7 @@ public void Write(Utf8JsonWriter writer)
161161

162162
try
163163
{
164-
foreach (var tag in this.LocalEndpoint.Tags ?? Enumerable.Empty<KeyValuePair<string, object>>())
164+
foreach (var tag in this.LocalEndpoint!.Tags! ?? Enumerable.Empty<KeyValuePair<string, object?>>())
165165
{
166166
ZipkinTagWriter.Instance.TryWriteTag(ref writer, tag);
167167
}

src/OpenTelemetry.Exporter.Zipkin/OpenTelemetry.Exporter.Zipkin.csproj

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,6 @@
44
<Description>Zipkin exporter for OpenTelemetry .NET</Description>
55
<PackageTags>$(PackageTags);Zipkin;distributed-tracing</PackageTags>
66
<MinVerTagPrefix>core-</MinVerTagPrefix>
7-
8-
<!-- this is temporary. will remove in future PR. -->
9-
<Nullable>disable</Nullable>
107
</PropertyGroup>
118

129
<ItemGroup>

src/OpenTelemetry.Exporter.Zipkin/ZipkinExporter.cs

Lines changed: 15 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -30,7 +30,7 @@ public class ZipkinExporter : BaseExporter<Activity>
3030
/// </summary>
3131
/// <param name="options">Configuration options.</param>
3232
/// <param name="client">Http client to use to upload telemetry.</param>
33-
public ZipkinExporter(ZipkinExporterOptions options, HttpClient client = null)
33+
public ZipkinExporter(ZipkinExporterOptions options, HttpClient? client = null)
3434
{
3535
Guard.ThrowIfNull(options);
3636

@@ -39,7 +39,7 @@ public ZipkinExporter(ZipkinExporterOptions options, HttpClient client = null)
3939
this.httpClient = client ?? options.HttpClientFactory?.Invoke() ?? throw new InvalidOperationException("ZipkinExporter was missing HttpClientFactory or it returned null.");
4040
}
4141

42-
internal ZipkinEndpoint LocalEndpoint { get; private set; }
42+
internal ZipkinEndpoint? LocalEndpoint { get; private set; }
4343

4444
/// <inheritdoc/>
4545
public override ExportResult Export(in Batch<Activity> batch)
@@ -83,15 +83,15 @@ internal void SetLocalEndpointFromResource(Resource resource)
8383
{
8484
var hostName = ResolveHostName();
8585

86-
string ipv4 = null;
87-
string ipv6 = null;
86+
string? ipv4 = null;
87+
string? ipv6 = null;
8888
if (!string.IsNullOrEmpty(hostName))
8989
{
90-
ipv4 = ResolveHostAddress(hostName, AddressFamily.InterNetwork);
91-
ipv6 = ResolveHostAddress(hostName, AddressFamily.InterNetworkV6);
90+
ipv4 = ResolveHostAddress(hostName!, AddressFamily.InterNetwork);
91+
ipv6 = ResolveHostAddress(hostName!, AddressFamily.InterNetworkV6);
9292
}
9393

94-
string serviceName = null;
94+
string? serviceName = null;
9595
foreach (var label in resource.Attributes)
9696
{
9797
if (label.Key == ResourceSemanticConventions.AttributeServiceName)
@@ -115,9 +115,9 @@ internal void SetLocalEndpointFromResource(Resource resource)
115115
tags: null);
116116
}
117117

118-
private static string ResolveHostAddress(string hostName, AddressFamily family)
118+
private static string? ResolveHostAddress(string hostName, AddressFamily family)
119119
{
120-
string result = null;
120+
string? result = null;
121121

122122
try
123123
{
@@ -145,9 +145,9 @@ private static string ResolveHostAddress(string hostName, AddressFamily family)
145145
return result;
146146
}
147147

148-
private static string ResolveHostName()
148+
private static string? ResolveHostName()
149149
{
150-
string result = null;
150+
string? result = null;
151151

152152
try
153153
{
@@ -180,7 +180,7 @@ private sealed class JsonContent : HttpContent
180180

181181
private readonly ZipkinExporter exporter;
182182
private readonly Batch<Activity> batch;
183-
private Utf8JsonWriter writer;
183+
private Utf8JsonWriter? writer;
184184

185185
public JsonContent(ZipkinExporter exporter, in Batch<Activity> batch)
186186
{
@@ -191,13 +191,13 @@ public JsonContent(ZipkinExporter exporter, in Batch<Activity> batch)
191191
}
192192

193193
#if NET
194-
protected override void SerializeToStream(Stream stream, TransportContext context, CancellationToken cancellationToken)
194+
protected override void SerializeToStream(Stream stream, TransportContext? context, CancellationToken cancellationToken)
195195
{
196196
this.SerializeToStreamInternal(stream);
197197
}
198198
#endif
199199

200-
protected override Task SerializeToStreamAsync(Stream stream, TransportContext context)
200+
protected override Task SerializeToStreamAsync(Stream stream, TransportContext? context)
201201
{
202202
this.SerializeToStreamInternal(stream);
203203
return Task.CompletedTask;
@@ -226,7 +226,7 @@ private void SerializeToStreamInternal(Stream stream)
226226

227227
foreach (var activity in this.batch)
228228
{
229-
var zipkinSpan = activity.ToZipkinSpan(this.exporter.LocalEndpoint, this.exporter.options.UseShortTraceIds);
229+
var zipkinSpan = activity.ToZipkinSpan(this.exporter.LocalEndpoint!, this.exporter.options.UseShortTraceIds);
230230

231231
zipkinSpan.Write(this.writer);
232232

0 commit comments

Comments
 (0)