From d355a8720b8df75adba49649e3b53810bcbdd678 Mon Sep 17 00:00:00 2001 From: "datadog-official[bot]" <214633350+datadog-official[bot]@users.noreply.github.com> Date: Thu, 9 Oct 2025 17:32:37 +0000 Subject: [PATCH 1/2] Skip manual configure when tracer is locked Co-authored-by: bouwkast <8877527+bouwkast@users.noreply.github.com> --- .../Tracer/ConfigureIntegration.cs | 10 +++++ .../ConfigureIntegrationTests.cs | 41 +++++++++++++++++++ 2 files changed, 51 insertions(+) create mode 100644 tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ConfigureIntegrationTests.cs diff --git a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs index cd5c0c751dc9..179845faeff2 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs @@ -7,6 +7,7 @@ using System.Collections.Generic; using System.ComponentModel; using Datadog.Trace.ClrProfiler.CallTarget; +using Datadog.Trace.Logging; using Datadog.Trace.Configuration; using Datadog.Trace.Configuration.ConfigurationSources; using Datadog.Trace.Configuration.ConfigurationSources.Telemetry; @@ -32,6 +33,7 @@ namespace Datadog.Trace.ClrProfiler.AutoInstrumentation.ManualInstrumentation.Tr [EditorBrowsable(EditorBrowsableState.Never)] public class ConfigureIntegration { + private static readonly IDatadogLogger Log = DatadogLogging.GetLoggerFor(); internal static CallTargetState OnMethodBegin(Dictionary values) { ConfigureSettingsWithManualOverrides(values, useLegacySettings: false); @@ -43,6 +45,14 @@ internal static void ConfigureSettingsWithManualOverrides(Dictionary +// Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. +// This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. +// + +using System.Collections.Generic; +using Datadog.Trace.ClrProfiler.AutoInstrumentation.ManualInstrumentation.Tracer; +using Datadog.Trace.Logging.TracerFlare; +using Datadog.Trace.RemoteConfigurationManagement; +using Datadog.Trace.TestHelpers; +using FluentAssertions; +using Moq; +using Xunit; + +namespace Datadog.Trace.Tests.ManualInstrumentation; + +[Collection(nameof(TracerInstanceTestCollection))] +[TracerRestorer] +public class ConfigureIntegrationTests +{ + [Fact] + public void ConfigureSettingsWithManualOverrides_DoesNotThrow_WhenTracerIsLocked() + { + // Arrange: lock the global tracer manager + TracerManager.UnsafeReplaceGlobalManager(new LockedTracerManager()); + TracerManager.Instance.Should().BeAssignableTo(); + + // Act/Assert: should not throw and should not replace the manager + ConfigureIntegration.ConfigureSettingsWithManualOverrides(new Dictionary(), useLegacySettings: false); + + TracerManager.Instance.Should().BeAssignableTo(); + } + + private class LockedTracerManager : TracerManager, ILockedTracer + { + public LockedTracerManager() + : base(new TracerSettings(), null, null, null, null, null, null, null, null, null, null, null, null, Mock.Of(), Mock.Of(), Mock.Of(), Mock.Of()) + { + } + } +} From 943bc0a4aca147662eb7d37a3220ab9ee5e1fa3e Mon Sep 17 00:00:00 2001 From: Steven Bouwkamp Date: Thu, 9 Oct 2025 13:58:41 -0400 Subject: [PATCH 2/2] Fix formatting and mising usings from Bits --- .../ManualInstrumentation/Tracer/ConfigureIntegration.cs | 5 +++-- .../ManualInstrumentation/ConfigureIntegrationTests.cs | 4 ++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs index 179845faeff2..c58650f96475 100644 --- a/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs +++ b/tracer/src/Datadog.Trace/ClrProfiler/AutoInstrumentation/ManualInstrumentation/Tracer/ConfigureIntegration.cs @@ -1,4 +1,4 @@ -// +// // Unless explicitly stated otherwise all files in this repository are licensed under the Apache 2 License. // This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. // @@ -7,11 +7,11 @@ using System.Collections.Generic; using System.ComponentModel; using Datadog.Trace.ClrProfiler.CallTarget; -using Datadog.Trace.Logging; using Datadog.Trace.Configuration; using Datadog.Trace.Configuration.ConfigurationSources; using Datadog.Trace.Configuration.ConfigurationSources.Telemetry; using Datadog.Trace.Configuration.Telemetry; +using Datadog.Trace.Logging; using Datadog.Trace.Telemetry; using Datadog.Trace.Telemetry.Metrics; @@ -34,6 +34,7 @@ namespace Datadog.Trace.ClrProfiler.AutoInstrumentation.ManualInstrumentation.Tr public class ConfigureIntegration { private static readonly IDatadogLogger Log = DatadogLogging.GetLoggerFor(); + internal static CallTargetState OnMethodBegin(Dictionary values) { ConfigureSettingsWithManualOverrides(values, useLegacySettings: false); diff --git a/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ConfigureIntegrationTests.cs b/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ConfigureIntegrationTests.cs index 213a665ac4e6..ae572d058a31 100644 --- a/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ConfigureIntegrationTests.cs +++ b/tracer/test/Datadog.Trace.Tests/ManualInstrumentation/ConfigureIntegrationTests.cs @@ -3,8 +3,12 @@ // This product includes software developed at Datadog (https://www.datadoghq.com/). Copyright 2017 Datadog, Inc. // +#nullable enable + using System.Collections.Generic; +using Datadog.Trace.Agent; using Datadog.Trace.ClrProfiler.AutoInstrumentation.ManualInstrumentation.Tracer; +using Datadog.Trace.Configuration; using Datadog.Trace.Logging.TracerFlare; using Datadog.Trace.RemoteConfigurationManagement; using Datadog.Trace.TestHelpers;