Skip to content

Commit 30e5da0

Browse files
Merge branch 'dev'
2 parents b4ec404 + d09fa60 commit 30e5da0

File tree

11 files changed

+56
-22
lines changed

11 files changed

+56
-22
lines changed

.github/workflows/aws-ci.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ jobs:
1616
runs-on: ubuntu-latest
1717
steps:
1818
- name: Configure AWS Credentials
19-
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 #v4
19+
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df #v4
2020
with:
2121
role-to-assume: ${{ secrets.CI_MAIN_TESTING_ACCOUNT_ROLE_ARN }}
2222
role-duration-seconds: 7200
@@ -29,7 +29,7 @@ jobs:
2929
$roleArn=$(cat ./response.json)
3030
"roleArn=$($roleArn -replace '"', '')" >> $env:GITHUB_OUTPUT
3131
- name: Configure Test Runner Credentials
32-
uses: aws-actions/configure-aws-credentials@e3dd6a429d7300a6a4c196c26e071d42e0343502 #v4
32+
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df #v4
3333
with:
3434
role-to-assume: ${{ steps.lambda.outputs.roleArn }}
3535
role-duration-seconds: 7200

.github/workflows/change-file-in-pr.yml

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,11 @@ jobs:
1212

1313
steps:
1414
- name: Checkout PR code
15-
uses: actions/checkout@f43a0e5ff2bd294095638e18286ca9a3d1956744 #v3.6.0
15+
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 #v4.2.2
1616

1717
- name: Get List of Changed Files
1818
id: changed-files
19-
uses: tj-actions/changed-files@4edd678ac3f81e2dc578756871e4d00c19191daf #v45
19+
uses: tj-actions/changed-files@ed68ef82c095e0d48ec87eccea555d944a631a4c #v45
2020

2121
- name: Check for Change File(s) in .autover/changes/
2222
run: |

.github/workflows/create-release-pr.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ jobs:
2525
steps:
2626
# Assume an AWS Role that provides access to the Access Token
2727
- name: Configure AWS Credentials
28-
uses: aws-actions/configure-aws-credentials@8c3f20df09ac63af7b3ae3d7c91f105f857d8497 #v4
28+
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df #v4
2929
with:
3030
role-to-assume: ${{ secrets.RELEASE_WORKFLOW_ACCESS_TOKEN_ROLE_ARN }}
3131
aws-region: us-west-2

.github/workflows/doc-site.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ jobs:
2828
- name: Checkout
2929
uses: actions/checkout@11bd71901bbe5b1630ceea73d27597364c9af683 # pinning V4 #v4.2.2
3030
- name: Dotnet Setup
31-
uses: actions/setup-dotnet@4d6c8fcf3c8f7a60068d26b594648e99df24cee3 # pinning V4 #v4.0.0
31+
uses: actions/setup-dotnet@67a3573c9a986a3f9c594539f4ab511d57bb3ce9 # pinning V4 #v4.3.1
3232
with:
3333
dotnet-version: 8.x
3434

.github/workflows/semgrep-analysis.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -35,7 +35,7 @@ jobs:
3535
p/owasp-top-ten
3636
3737
- name: Upload SARIF file for GitHub Advanced Security Dashboard
38-
uses: github/codeql-action/upload-sarif@28deaeda66b76a05916b6923827895f2b14ab387 #v3.28.16
38+
uses: github/codeql-action/upload-sarif@60168efe1c415ce0f5521ea06d5c2062adbeed1b #v3.28.17
3939
with:
4040
sarif_file: semgrep.sarif
4141
if: always()

.github/workflows/sync-main-dev.yml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -27,7 +27,7 @@ jobs:
2727
steps:
2828
# Assume an AWS Role that provides access to the Access Token
2929
- name: Configure AWS Credentials
30-
uses: aws-actions/configure-aws-credentials@8c3f20df09ac63af7b3ae3d7c91f105f857d8497 #v4
30+
uses: aws-actions/configure-aws-credentials@b47578312673ae6fa5b5096b330d9fbac3d116df #v4
3131
with:
3232
role-to-assume: ${{ secrets.RELEASE_WORKFLOW_ACCESS_TOKEN_ROLE_ARN }}
3333
aws-region: us-west-2

CHANGELOG.md

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,8 @@
1+
## Release 2025-06-03
2+
3+
### AWS.Messaging.Telemetry.OpenTelemetry (0.23.0)
4+
* Updated consumer processing logic to use Links for connecting to publisher instead of parent-child relationship
5+
16
## Release 2025-05-05
27

38
### AWS.Messaging (1.0.0)

src/AWS.Messaging.Telemetry.OpenTelemetry/AWS.Messaging.Telemetry.OpenTelemetry.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,7 @@
1818
<WarningsAsErrors>CA1727</WarningsAsErrors>
1919
<SignAssembly>true</SignAssembly>
2020
<AssemblyOriginatorKeyFile>..\..\public.snk</AssemblyOriginatorKeyFile>
21-
<Version>0.22.0</Version>
21+
<Version>0.23.0</Version>
2222
<PublishRepositoryUrl>true</PublishRepositoryUrl>
2323
<EmbedUntrackedSources>true</EmbedUntrackedSources>
2424
<IncludeSymbols>true</IncludeSymbols>

src/AWS.Messaging.Telemetry.OpenTelemetry/OpenTelemetryProvider.cs

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,7 @@ public ITelemetryTrace Trace(string traceName)
3434
}
3535

3636
activity = _activitySource.StartActivity(traceName, ActivityKind.Producer, parentContext: default, links: links);
37-
37+
3838
return new OpenTelemetryTrace(activity, parentActivity);
3939
}
4040

@@ -44,23 +44,43 @@ public ITelemetryTrace Trace(string traceName, MessageEnvelope envelope)
4444
var propogatedContext = Propagators.DefaultTextMapPropagator.Extract(default, envelope, ExtractTraceContextFromEnvelope);
4545
Baggage.Current = propogatedContext.Baggage;
4646

47-
var activity = _activitySource.StartActivity(traceName, ActivityKind.Consumer, parentContext: propogatedContext.ActivityContext);
47+
// Create links list for both propagated context and current activity
48+
var links = new List<ActivityLink>();
49+
if (propogatedContext.ActivityContext.IsValid())
50+
{
51+
links.Add(new ActivityLink(propogatedContext.ActivityContext));
52+
}
53+
54+
// Create a new root activity with link to producer
55+
var activity = _activitySource.StartActivity(
56+
traceName,
57+
ActivityKind.Consumer,
58+
default(ActivityContext),
59+
null,
60+
links);
61+
4862
if (activity != null)
4963
{
64+
activity.SetStatus(ActivityStatusCode.Ok);
5065
return new OpenTelemetryTrace(activity);
5166
}
5267

53-
// If we initially failed to create an activity, attempt to force creation with
54-
// a link to the current activity, see https://opentelemetry.io/docs/instrumentation/net/manual/#creating-new-root-activities
68+
// If we initially failed to create an activity, attempt to force creation
5569
var parentActivity = Activity.Current;
5670
Activity.Current = null;
57-
ActivityLink[]? links = null;
71+
72+
// Add link to parent activity if it exists
5873
if (parentActivity != null)
5974
{
60-
links = new[] { new ActivityLink(parentActivity.Context) };
75+
links.Add(new ActivityLink(parentActivity.Context));
6176
}
6277

63-
activity = _activitySource.StartActivity(traceName, ActivityKind.Consumer, parentContext: propogatedContext.ActivityContext, links: links);
78+
activity = _activitySource.StartActivity(
79+
traceName,
80+
ActivityKind.Consumer,
81+
default(ActivityContext),
82+
null,
83+
links);
6484

6585
return new OpenTelemetryTrace(activity, parentActivity);
6686
}

src/AWS.Messaging.Telemetry.OpenTelemetry/README.md

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,9 @@ public class Startup
4343
}
4444
```
4545

46+
### AWS X-Ray Linked Spans Configuration
47+
1. If you are using OTEL with X-Ray, make sure you configure your OTEL setup to use OTLP for Cloudwatch. This is needed in order to view linked spans in the AWS X-Ray console. https://docs.aws.amazon.com/AmazonCloudWatch/latest/monitoring/CloudWatch-OTLPSimplesetup.html
48+
4649
# Useful Links
4750
* [AWS Message Processing Framework for .NET Design Document](../../docs/docs/design/message-processing-framework-design.md)
4851
* [Sample Applications](https://github.com/awslabs/aws-dotnet-messaging/tree/main/sampleapps) - contains sample applications of a publisher service, long-running subscriber service, Lambda function handlers, and using Polly to override the framework's built-in backoff logic.

test/AWS.Messaging.UnitTests/OpenTelemetryTests.cs

Lines changed: 12 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -185,8 +185,8 @@ public async Task OpenTelemetry_Handler_ExpectedTracesAndTags()
185185
}
186186

187187
/// <summary>
188-
/// Verifies that the handler trace has the correct parent when included
189-
/// in the message envelope
188+
/// Verifies that the handler trace has the correct link to the trace context
189+
/// included in the message envelope
190190
/// </summary>
191191
[Fact]
192192
public async Task OpenTelemetry_Handler_ParentFromEnvelope()
@@ -212,14 +212,20 @@ public async Task OpenTelemetry_Handler_ParentFromEnvelope()
212212
.ConfigureResource(resource => resource.AddService("unittest"))
213213
.AddInMemoryExporter(activities).Build())
214214
{
215-
216215
await _handler.InvokeAsync(envelope, _subscriberMapping);
217216
}
218217

219218
Assert.Single(activities);
220-
Assert.Equal("AWS.Messaging: Processing message", activities[0].OperationName);
219+
var activity = activities[0];
220+
Assert.Equal("AWS.Messaging: Processing message", activity.OperationName);
221+
222+
// Verify the activity is a root activity (no parent)
223+
Assert.Null(activity.ParentId);
221224

222-
// The MPF activity's parent should be the one specified in envelope.Metadata above
223-
Assert.Equal("00-d2d8865217873923d2d74cf680a30ac3-d63e320582f9ff94-01", activities[0].ParentId);
225+
// Verify the activity has exactly one link to the trace context from the envelope
226+
Assert.Single(activity.Links);
227+
var link = activity.Links.Single();
228+
Assert.Equal("d2d8865217873923d2d74cf680a30ac3", link.Context.TraceId.ToString());
229+
Assert.Equal("d63e320582f9ff94", link.Context.SpanId.ToString());
224230
}
225231
}

0 commit comments

Comments
 (0)