Skip to content

Commit 8da8764

Browse files
committed
Restored ActivityListener in ActivityTraceListenerManager so stopped Activity objects are collected again.
1 parent e22e948 commit 8da8764

File tree

5 files changed

+28
-4
lines changed

5 files changed

+28
-4
lines changed

ClassLibraries/Macross.OpenTelemetry.Extensions/Code/ActivityTraceListenerManager.cs

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ public class ActivityTraceListenerManager : IDisposable
2525
private readonly IDisposable _OptionsChangeToken;
2626
private ActivityTraceListenerManagerOptions? _Options;
2727
private Thread? _CleanupThread;
28+
private ActivityListener? _ActivityListener;
2829
private bool _HasInitialized;
2930
private long _LastRequestedListenerDateTimeBinary;
3031

@@ -120,10 +121,17 @@ protected virtual void Dispose(bool isDisposing)
120121
{
121122
_OptionsChangeToken.Dispose();
122123
_StopHandle.Dispose();
124+
_ActivityListener?.Dispose();
123125
_ActivityTraceListenerSampler.ActivityTraceListenerManager = null;
124126
}
125127
}
126128

129+
private void OnActivityStopped(Activity activity)
130+
{
131+
if (_TraceListeners.TryGetValue(activity.TraceId, out TraceListener? listener))
132+
listener.Add(activity);
133+
}
134+
127135
[MethodImpl(MethodImplOptions.AggressiveInlining)]
128136
private void EnsureInitialized()
129137
{
@@ -141,6 +149,15 @@ private void EnsureInitialized()
141149
};
142150
_CleanupThread.Start();
143151

152+
// Watch out doing this in prod, it's expensive.
153+
_ActivityListener = new ActivityListener
154+
{
155+
ShouldListenTo = source => true, // Listens to all sources.
156+
Sample = (ref ActivityCreationOptions<ActivityContext> options) => ActivitySamplingResult.None, // Let OpenTelemetry handle the sampling.
157+
ActivityStopped = OnActivityStopped
158+
};
159+
ActivitySource.AddActivityListener(_ActivityListener);
160+
144161
_ActivityTraceListenerSampler.ActivityTraceListenerManager = this;
145162

146163
_HasInitialized = true;
@@ -164,6 +181,8 @@ private void CleanupThreadBody()
164181
{
165182
_HasInitialized = false;
166183
_ActivityTraceListenerSampler.ActivityTraceListenerManager = null;
184+
_ActivityListener?.Dispose();
185+
_ActivityListener = null;
167186
}
168187

169188
_Options.ClosedAction?.Invoke();

ClassLibraries/Macross.OpenTelemetry.Extensions/Code/Macross.OpenTelemetry.Extensions.csproj

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@
2424
<GenerateAssemblyVersionAttribute>false</GenerateAssemblyVersionAttribute>
2525
<GeneratePackageOnBuild>false</GeneratePackageOnBuild>
2626
<VersionPrefix>1.0.0</VersionPrefix>
27-
<VersionSuffix>beta4</VersionSuffix>
27+
<VersionSuffix>beta5</VersionSuffix>
2828
<FileVersion>$(VersionPrefix)</FileVersion>
2929
<PackageProjectUrl>https://github.com/Macross-Software/core/tree/develop/ClassLibraries/Macross.OpenTelemetry.Extensions</PackageProjectUrl>
3030
</PropertyGroup>

ClassLibraries/Macross.OpenTelemetry.Extensions/Code/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -10,4 +10,4 @@
1010

1111
[assembly: InternalsVisibleTo("Macross.OpenTelemetry.Extensions.Tests, PublicKey=0024000004800000940000000602000000240000525341310004000001000100c1a4dad5605af5f97a39e67571c3a03a6762442db77512795feb38f00db953d7ec222951dd58cd511610c902b73577beb10f1bc868b539a3d1593ae2037524dbb116e7f137a3bfc8d0c9ad7c2e6ea5bb68a86b5fed17516d6678fd9b899e371a14ea4daca38722b8ca030480c69a418b92f5704b1e2a925e213ef9039b2420e7")]
1212

13-
[assembly: AssemblyVersion("1.0.0.21090")]
13+
[assembly: AssemblyVersion("1.0.0.21229")]

ClassLibraries/Macross.OpenTelemetry.Extensions/Test/ActivityTraceListenerManagerTests.cs

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
using System;
22
using System.Diagnostics;
3+
using System.Linq;
34

45
using Microsoft.VisualStudio.TestTools.UnitTesting;
56

@@ -63,13 +64,17 @@ public void ActivityNotSampledWithoutRegistration()
6364
[TestMethod]
6465
public void ActivitySampledWithRegistration()
6566
{
66-
using (IDisposable registration = _ActivityTraceListenerManager.RegisterTraceListener(_ActivityContext.TraceId))
67+
using (IActivityTraceListener registration = _ActivityTraceListenerManager.RegisterTraceListener(_ActivityContext.TraceId))
6768
{
6869
Activity? activity = _ActivitySource.StartActivity("Test", ActivityKind.Server, _ActivityContext);
6970

7071
Assert.IsNotNull(activity);
7172
Assert.IsTrue(activity.IsAllDataRequested);
7273
Assert.IsTrue(activity.Recorded);
74+
75+
activity.Stop();
76+
77+
Assert.IsTrue(registration.CompletedActivities.Contains(activity));
7378
}
7479

7580
ActivityNotSampledWithoutRegistration();

ClassLibraries/Macross.OpenTelemetry.Extensions/Test/Properties/AssemblyInfo.cs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,4 +7,4 @@
77

88
[assembly: Guid("beb815de-41a4-4cfe-80eb-a5a1d64559c5")]
99

10-
[assembly: AssemblyVersion("0.0.0.21090")]
10+
[assembly: AssemblyVersion("0.0.0.21229")]

0 commit comments

Comments
 (0)