From fdc7106c1fd0dcc56049da68512ce6b13562d114 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Wed, 15 Jun 2022 13:08:19 -0700 Subject: [PATCH 1/5] Forward SetParentProvider to children of CompositeProcessor. --- src/OpenTelemetry/CompositeProcessor.cs | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/src/OpenTelemetry/CompositeProcessor.cs b/src/OpenTelemetry/CompositeProcessor.cs index 49c2258bd49..72eb166f074 100644 --- a/src/OpenTelemetry/CompositeProcessor.cs +++ b/src/OpenTelemetry/CompositeProcessor.cs @@ -79,6 +79,16 @@ public override void OnStart(T data) } } + internal override void SetParentProvider(BaseProvider parentProvider) + { + base.SetParentProvider(parentProvider); + + for (var cur = this.head; cur != null; cur = cur.Next) + { + cur.Value.SetParentProvider(parentProvider); + } + } + /// protected override bool OnForceFlush(int timeoutMilliseconds) { From 4b88dbe0afedb3744e04cff048f56fad188be9da Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Wed, 15 Jun 2022 13:32:57 -0700 Subject: [PATCH 2/5] CHANGELOG update. --- src/OpenTelemetry/CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/src/OpenTelemetry/CHANGELOG.md b/src/OpenTelemetry/CHANGELOG.md index cbd76ab1688..13f7b12e21d 100644 --- a/src/OpenTelemetry/CHANGELOG.md +++ b/src/OpenTelemetry/CHANGELOG.md @@ -11,6 +11,9 @@ null-valued tag. ([#3325](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3325)) +* `CompositeProcessor` will now ensure `ParentProvider` is set on its children + ([#3368](https://github.com/open-telemetry/opentelemetry-dotnet/pull/3368)) + ## 1.3.0 Released 2022-Jun-03 From 84cfe78aeff935d0d1a87fbeef8caae7b22c0b87 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Wed, 15 Jun 2022 13:36:53 -0700 Subject: [PATCH 3/5] Test. --- .../Trace/CompositeActivityProcessorTests.cs | 23 +++++++++++++++++++ 1 file changed, 23 insertions(+) diff --git a/test/OpenTelemetry.Tests/Trace/CompositeActivityProcessorTests.cs b/test/OpenTelemetry.Tests/Trace/CompositeActivityProcessorTests.cs index c73f212cab7..85ea060e162 100644 --- a/test/OpenTelemetry.Tests/Trace/CompositeActivityProcessorTests.cs +++ b/test/OpenTelemetry.Tests/Trace/CompositeActivityProcessorTests.cs @@ -99,5 +99,28 @@ public void CompositeActivityProcessor_ForceFlush(int timeout) Assert.True(p1.ForceFlushCalled); Assert.True(p2.ForceFlushCalled); } + + [Fact] + public void CompositeActivityProcessor_ForwardsParentProviderl() + { + using TracerProvider provider = new TestProvider(); + + using var p1 = new TestActivityProcessor(null, null); + using var p2 = new TestActivityProcessor(null, null); + + using var processor = new CompositeProcessor(new[] { p1, p2 }); + + Assert.Null(p1.ParentProvider); + Assert.Null(p2.ParentProvider); + + processor.SetParentProvider(provider); + + Assert.Equal(provider, p1.ParentProvider); + Assert.Equal(provider, p2.ParentProvider); + } + + private sealed class TestProvider : TracerProvider + { + } } } From 8b29b34284a5e4fdbb826dc54dbb7ca2ab9e2b90 Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Wed, 15 Jun 2022 13:48:29 -0700 Subject: [PATCH 4/5] Test tweak + typo. --- .../Trace/CompositeActivityProcessorTests.cs | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/test/OpenTelemetry.Tests/Trace/CompositeActivityProcessorTests.cs b/test/OpenTelemetry.Tests/Trace/CompositeActivityProcessorTests.cs index 85ea060e162..37522f89aac 100644 --- a/test/OpenTelemetry.Tests/Trace/CompositeActivityProcessorTests.cs +++ b/test/OpenTelemetry.Tests/Trace/CompositeActivityProcessorTests.cs @@ -101,7 +101,7 @@ public void CompositeActivityProcessor_ForceFlush(int timeout) } [Fact] - public void CompositeActivityProcessor_ForwardsParentProviderl() + public void CompositeActivityProcessor_ForwardsParentProvider() { using TracerProvider provider = new TestProvider(); @@ -110,11 +110,13 @@ public void CompositeActivityProcessor_ForwardsParentProviderl() using var processor = new CompositeProcessor(new[] { p1, p2 }); + Assert.Null(processor.ParentProvider); Assert.Null(p1.ParentProvider); Assert.Null(p2.ParentProvider); processor.SetParentProvider(provider); + Assert.Equal(provider, processor.ParentProvider); Assert.Equal(provider, p1.ParentProvider); Assert.Equal(provider, p2.ParentProvider); } From e9e437991b7dc867fa71c1e20af2042c3de45e7e Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Wed, 15 Jun 2022 14:07:42 -0700 Subject: [PATCH 5/5] Fixed automatically created CompositeProcessor missing ParentProvider. --- .../Logs/OpenTelemetryLoggerProvider.cs | 6 ++++-- src/OpenTelemetry/Trace/TracerProviderSdk.cs | 6 ++++-- .../Trace/TracerProviderSdkTest.cs | 14 +++++++++++--- 3 files changed, 19 insertions(+), 7 deletions(-) diff --git a/src/OpenTelemetry/Logs/OpenTelemetryLoggerProvider.cs b/src/OpenTelemetry/Logs/OpenTelemetryLoggerProvider.cs index 0c33a7268a3..d4a7a2d15da 100644 --- a/src/OpenTelemetry/Logs/OpenTelemetryLoggerProvider.cs +++ b/src/OpenTelemetry/Logs/OpenTelemetryLoggerProvider.cs @@ -128,11 +128,13 @@ internal OpenTelemetryLoggerProvider AddProcessor(BaseProcessor proce } else { - this.Processor = new CompositeProcessor(new[] + var newCompositeProcessor = new CompositeProcessor(new[] { this.Processor, - processor, }); + newCompositeProcessor.SetParentProvider(this); + newCompositeProcessor.AddProcessor(processor); + this.Processor = newCompositeProcessor; } return this; diff --git a/src/OpenTelemetry/Trace/TracerProviderSdk.cs b/src/OpenTelemetry/Trace/TracerProviderSdk.cs index cd760e29548..88f4e15e2b9 100644 --- a/src/OpenTelemetry/Trace/TracerProviderSdk.cs +++ b/src/OpenTelemetry/Trace/TracerProviderSdk.cs @@ -277,11 +277,13 @@ internal TracerProviderSdk AddProcessor(BaseProcessor processor) } else { - this.processor = new CompositeProcessor(new[] + var newCompositeProcessor = new CompositeProcessor(new[] { this.processor, - processor, }); + newCompositeProcessor.SetParentProvider(this); + newCompositeProcessor.AddProcessor(processor); + this.processor = newCompositeProcessor; } return this; diff --git a/test/OpenTelemetry.Tests/Trace/TracerProviderSdkTest.cs b/test/OpenTelemetry.Tests/Trace/TracerProviderSdkTest.cs index a18a24df015..59c1335bee4 100644 --- a/test/OpenTelemetry.Tests/Trace/TracerProviderSdkTest.cs +++ b/test/OpenTelemetry.Tests/Trace/TracerProviderSdkTest.cs @@ -700,9 +700,11 @@ public void SdkProcessesLegacyActivityEvenAfterAddingNewProcessor() // AddLegacyOperationName chained to TracerProviderBuilder using var tracerProvider = Sdk.CreateTracerProviderBuilder() - .AddProcessor(testActivityProcessor) - .AddLegacySource(operationNameForLegacyActivity) - .Build(); + .AddProcessor(testActivityProcessor) + .AddLegacySource(operationNameForLegacyActivity) + .Build(); + + Assert.Equal(tracerProvider, testActivityProcessor.ParentProvider); Activity activity = new Activity(operationNameForLegacyActivity); activity.Start(); @@ -736,6 +738,12 @@ public void SdkProcessesLegacyActivityEvenAfterAddingNewProcessor() tracerProvider.AddProcessor(testActivityProcessorNew); + var sdkProvider = (TracerProviderSdk)tracerProvider; + + Assert.True(sdkProvider.Processor is CompositeProcessor); + Assert.Equal(tracerProvider, sdkProvider.Processor.ParentProvider); + Assert.Equal(tracerProvider, testActivityProcessorNew.ParentProvider); + Activity activityNew = new Activity(operationNameForLegacyActivity); // Create a new Activity with the same operation name activityNew.Start(); activityNew.Stop();