Skip to content

Commit 13ed57d

Browse files
committed
Change to always link, optionally parent/child
1 parent 542d785 commit 13ed57d

File tree

5 files changed

+24
-28
lines changed

5 files changed

+24
-28
lines changed

projects/RabbitMQ.Client/Impl/RabbitMQActivitySource.cs

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -116,10 +116,9 @@ public static class RabbitMQActivitySource
116116
}
117117

118118
// Extract the PropagationContext of the upstream parent from the message headers.
119-
ActivityContext linkedContext = LinkType == OpenTelemetryLinkType.AlwaysLink
120-
? ContextExtractor(readOnlyBasicProperties) : default;
121-
ActivityContext parentContext = LinkType == OpenTelemetryLinkType.AlwaysParentChild
122-
? ContextExtractor(readOnlyBasicProperties) : default;
119+
ActivityContext linkedContext = ContextExtractor(readOnlyBasicProperties);
120+
ActivityContext parentContext = LinkType == OpenTelemetryLinkType.AlwaysParentChildAndLink
121+
? linkedContext : default;
123122

124123
Activity? activity = s_subscriberSource.StartLinkedRabbitMQActivity(
125124
UseRoutingKeyAsOperationName ? $"{MessagingOperationNameBasicGet} {routingKey}" : MessagingOperationNameBasicGet, ActivityKind.Consumer,
@@ -144,10 +143,9 @@ public static class RabbitMQActivitySource
144143
}
145144

146145
// Extract the PropagationContext of the upstream parent from the message headers.
147-
ActivityContext linkedContext = LinkType == OpenTelemetryLinkType.AlwaysLink
148-
? ContextExtractor(readOnlyBasicProperties) : default;
149-
ActivityContext parentContext = LinkType == OpenTelemetryLinkType.AlwaysParentChild
150-
? ContextExtractor(readOnlyBasicProperties) : default;
146+
ActivityContext linkedContext = ContextExtractor(readOnlyBasicProperties);
147+
ActivityContext parentContext = LinkType == OpenTelemetryLinkType.AlwaysParentChildAndLink
148+
? linkedContext : default;
151149

152150
Activity? activity = s_subscriberSource.StartLinkedRabbitMQActivity(
153151
UseRoutingKeyAsOperationName ? $"{MessagingOperationNameBasicDeliver} {routingKey}" : MessagingOperationNameBasicDeliver,

projects/RabbitMQ.Client/Impl/RabbitMQOpenTelemetryOptions.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -3,7 +3,7 @@
33
public enum OpenTelemetryLinkType
44
{
55
AlwaysLink,
6-
AlwaysParentChild
6+
AlwaysParentChildAndLink
77
}
88

99
public class RabbitMQOpenTelemetryOptions

projects/RabbitMQ.Client/PublicAPI.Unshipped.txt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
RabbitMQ.Client.OpenTelemetryLinkType
22
RabbitMQ.Client.OpenTelemetryLinkType.AlwaysLink = 0 -> RabbitMQ.Client.OpenTelemetryLinkType
3-
RabbitMQ.Client.OpenTelemetryLinkType.AlwaysParentChild = 1 -> RabbitMQ.Client.OpenTelemetryLinkType
3+
RabbitMQ.Client.OpenTelemetryLinkType.AlwaysParentChildAndLink = 1 -> RabbitMQ.Client.OpenTelemetryLinkType
44
RabbitMQ.Client.RabbitMQOpenTelemetryOptions
55
RabbitMQ.Client.RabbitMQOpenTelemetryOptions.LinkType.get -> RabbitMQ.Client.OpenTelemetryLinkType
66
RabbitMQ.Client.RabbitMQOpenTelemetryOptions.LinkType.set -> void

projects/Test/SequentialIntegration/TestActivitySource.cs

Lines changed: 10 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -83,7 +83,7 @@ void AssertIntTagGreaterThanZero(Activity activity, string name)
8383
public async Task TestPublisherAndConsumerActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
8484
{
8585
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
86-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
86+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
8787
var _activities = new List<Activity>();
8888
using ActivityListener activityListener = StartActivityListener(_activities);
8989
await Task.Delay(500);
@@ -120,7 +120,7 @@ public async Task TestPublisherAndConsumerActivityTags(bool useRoutingKeyAsOpera
120120
public async Task TestPublisherWithCachedStringsAndConsumerActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
121121
{
122122
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
123-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
123+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
124124
var _activities = new List<Activity>();
125125
using ActivityListener activityListener = StartActivityListener(_activities);
126126
await Task.Delay(500);
@@ -159,7 +159,7 @@ public async Task TestPublisherWithCachedStringsAndConsumerActivityTags(bool use
159159
public async Task TestPublisherWithPublicationAddressAndConsumerActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
160160
{
161161
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
162-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
162+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
163163
var _activities = new List<Activity>();
164164
using ActivityListener activityListener = StartActivityListener(_activities);
165165
await Task.Delay(500);
@@ -197,7 +197,7 @@ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTags(boo
197197
public async Task TestPublisherAndConsumerActivityTagsAsync(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
198198
{
199199
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
200-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
200+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
201201
var activities = new List<Activity>();
202202
using ActivityListener activityListener = StartActivityListener(activities);
203203
await Task.Delay(500);
@@ -235,7 +235,7 @@ public async Task TestPublisherAndConsumerActivityTagsAsync(bool useRoutingKeyAs
235235
public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
236236
{
237237
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
238-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
238+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
239239
var activities = new List<Activity>();
240240
using ActivityListener activityListener = StartActivityListener(activities);
241241
await Task.Delay(500);
@@ -275,7 +275,7 @@ public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync(boo
275275
public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsync(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
276276
{
277277
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
278-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
278+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
279279
var activities = new List<Activity>();
280280
using ActivityListener activityListener = StartActivityListener(activities);
281281
await Task.Delay(500);
@@ -314,7 +314,7 @@ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsyn
314314
public async Task TestPublisherAndBasicGetActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
315315
{
316316
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
317-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
317+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
318318
var activities = new List<Activity>();
319319
using ActivityListener activityListener = StartActivityListener(activities);
320320
await Task.Delay(500);
@@ -348,7 +348,7 @@ public async Task TestPublisherAndBasicGetActivityTags(bool useRoutingKeyAsOpera
348348
public async Task TestPublisherWithCachedStringsAndBasicGetActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
349349
{
350350
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
351-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
351+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
352352
var activities = new List<Activity>();
353353
using ActivityListener activityListener = StartActivityListener(activities);
354354
await Task.Delay(500);
@@ -384,7 +384,7 @@ public async Task TestPublisherWithCachedStringsAndBasicGetActivityTags(bool use
384384
public async Task TestPublisherWithPublicationAddressAndBasicGetActivityTags(bool useRoutingKeyAsOperationName, bool useParentChildLinking)
385385
{
386386
RabbitMQActivitySource.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
387-
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
387+
RabbitMQActivitySource.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
388388
var activities = new List<Activity>();
389389
using ActivityListener activityListener = StartActivityListener(activities);
390390
await Task.Delay(500);
@@ -452,15 +452,14 @@ private void AssertActivityData(bool useRoutingKeyAsOperationName, bool useParen
452452
x.OperationName == (useRoutingKeyAsOperationName ? $"{childName} {queueName}" : childName));
453453
Assert.Equal(ActivityKind.Producer, sendActivity.Kind);
454454
Assert.Equal(ActivityKind.Consumer, receiveActivity.Kind);
455+
Assert.Equal(sendActivity.TraceId, receiveActivity.Links.Single().Context.TraceId);
455456
if (useParentChildLinking)
456457
{
457-
Assert.Empty(receiveActivity.Links);
458458
Assert.Equal(sendActivity.Id, receiveActivity.ParentId);
459459
Assert.Equal(sendActivity.TraceId, receiveActivity.TraceId);
460460
}
461461
else
462462
{
463-
Assert.Equal(sendActivity.TraceId, receiveActivity.Links.Single().Context.TraceId);
464463
Assert.Null(receiveActivity.ParentId);
465464
Assert.NotEqual(sendActivity.TraceId, receiveActivity.TraceId);
466465
}

projects/Test/SequentialIntegration/TestOpenTelemetry.cs

Lines changed: 6 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -94,7 +94,7 @@ public async Task TestPublisherAndConsumerActivityTags(bool useRoutingKeyAsOpera
9494
.AddRabbitMQInstrumentation(options =>
9595
{
9696
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
97-
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
97+
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
9898
})
9999
.AddInMemoryExporter(exportedItems)
100100
.Build();
@@ -152,7 +152,7 @@ public async Task TestPublisherAndConsumerActivityTagsAsync(bool useRoutingKeyAs
152152
.AddRabbitMQInstrumentation(options =>
153153
{
154154
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
155-
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
155+
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
156156
})
157157
.AddInMemoryExporter(exportedItems)
158158
.Build();
@@ -211,7 +211,7 @@ public async Task TestPublisherWithPublicationAddressAndConsumerActivityTagsAsyn
211211
.AddRabbitMQInstrumentation(options =>
212212
{
213213
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
214-
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
214+
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
215215
})
216216
.AddInMemoryExporter(exportedItems)
217217
.Build();
@@ -271,7 +271,7 @@ public async Task TestPublisherWithCachedStringsAndConsumerActivityTagsAsync(boo
271271
.AddRabbitMQInstrumentation(options =>
272272
{
273273
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
274-
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
274+
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
275275
})
276276
.AddInMemoryExporter(exportedItems)
277277
.Build();
@@ -332,7 +332,7 @@ public async Task TestPublisherAndBasicGetActivityTags(bool useRoutingKeyAsOpera
332332
.AddRabbitMQInstrumentation(options =>
333333
{
334334
options.UseRoutingKeyAsOperationName = useRoutingKeyAsOperationName;
335-
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChild : OpenTelemetryLinkType.AlwaysLink;
335+
options.LinkType = useParentChildLinking ? OpenTelemetryLinkType.AlwaysParentChildAndLink : OpenTelemetryLinkType.AlwaysLink;
336336
})
337337
.AddInMemoryExporter(exportedItems)
338338
.Build();
@@ -387,15 +387,14 @@ private void AssertActivityData(bool useRoutingKeyAsOperationName, bool useParen
387387
x.OperationName == (useRoutingKeyAsOperationName ? $"{childName} {queueName}" : childName));
388388
Assert.Equal(ActivityKind.Producer, sendActivity.Kind);
389389
Assert.Equal(ActivityKind.Consumer, receiveActivity.Kind);
390+
Assert.Equal(sendActivity.TraceId, receiveActivity.Links.Single().Context.TraceId);
390391
if (useParentChildLinking)
391392
{
392-
Assert.Empty(receiveActivity.Links);
393393
Assert.Equal(sendActivity.Id, receiveActivity.ParentId);
394394
Assert.Equal(sendActivity.TraceId, receiveActivity.TraceId);
395395
}
396396
else
397397
{
398-
Assert.Equal(sendActivity.TraceId, receiveActivity.Links.Single().Context.TraceId);
399398
Assert.Null(receiveActivity.ParentId);
400399
Assert.NotEqual(sendActivity.TraceId, receiveActivity.TraceId);
401400
}

0 commit comments

Comments
 (0)