diff --git a/src/OpenTelemetry.Api.ProviderBuilderExtensions/Logs/OpenTelemetryDependencyInjectionLoggerProviderBuilderExtensions.cs b/src/OpenTelemetry.Api.ProviderBuilderExtensions/Logs/OpenTelemetryDependencyInjectionLoggerProviderBuilderExtensions.cs index 4a96f1b0818..51a1af5c5c5 100644 --- a/src/OpenTelemetry.Api.ProviderBuilderExtensions/Logs/OpenTelemetryDependencyInjectionLoggerProviderBuilderExtensions.cs +++ b/src/OpenTelemetry.Api.ProviderBuilderExtensions/Logs/OpenTelemetryDependencyInjectionLoggerProviderBuilderExtensions.cs @@ -36,7 +36,7 @@ public static LoggerProviderBuilder AddInstrumentation< loggerProviderBuilder.ConfigureBuilder((sp, builder) => { - builder.AddInstrumentation(() => sp.GetRequiredService()); + builder.AddInstrumentation(sp.GetRequiredService); }); return loggerProviderBuilder; diff --git a/src/OpenTelemetry.Api.ProviderBuilderExtensions/Metrics/OpenTelemetryDependencyInjectionMeterProviderBuilderExtensions.cs b/src/OpenTelemetry.Api.ProviderBuilderExtensions/Metrics/OpenTelemetryDependencyInjectionMeterProviderBuilderExtensions.cs index fea2275e9a3..ff52ee37cb3 100644 --- a/src/OpenTelemetry.Api.ProviderBuilderExtensions/Metrics/OpenTelemetryDependencyInjectionMeterProviderBuilderExtensions.cs +++ b/src/OpenTelemetry.Api.ProviderBuilderExtensions/Metrics/OpenTelemetryDependencyInjectionMeterProviderBuilderExtensions.cs @@ -36,7 +36,7 @@ public static MeterProviderBuilder AddInstrumentation< meterProviderBuilder.ConfigureBuilder((sp, builder) => { - builder.AddInstrumentation(() => sp.GetRequiredService()); + builder.AddInstrumentation(sp.GetRequiredService); }); return meterProviderBuilder; diff --git a/src/OpenTelemetry.Api.ProviderBuilderExtensions/Trace/OpenTelemetryDependencyInjectionTracerProviderBuilderExtensions.cs b/src/OpenTelemetry.Api.ProviderBuilderExtensions/Trace/OpenTelemetryDependencyInjectionTracerProviderBuilderExtensions.cs index 2e6ab37628d..939fd34b366 100644 --- a/src/OpenTelemetry.Api.ProviderBuilderExtensions/Trace/OpenTelemetryDependencyInjectionTracerProviderBuilderExtensions.cs +++ b/src/OpenTelemetry.Api.ProviderBuilderExtensions/Trace/OpenTelemetryDependencyInjectionTracerProviderBuilderExtensions.cs @@ -36,7 +36,7 @@ public static TracerProviderBuilder AddInstrumentation< tracerProviderBuilder.ConfigureBuilder((sp, builder) => { - builder.AddInstrumentation(() => sp.GetRequiredService()); + builder.AddInstrumentation(sp.GetRequiredService); }); return tracerProviderBuilder; diff --git a/src/OpenTelemetry.Api/Internal/OpenTelemetryApiEventSource.cs b/src/OpenTelemetry.Api/Internal/OpenTelemetryApiEventSource.cs index 5ac56d362f3..c2e9cf9dfb2 100644 --- a/src/OpenTelemetry.Api/Internal/OpenTelemetryApiEventSource.cs +++ b/src/OpenTelemetry.Api/Internal/OpenTelemetryApiEventSource.cs @@ -12,7 +12,7 @@ namespace OpenTelemetry.Internal; [EventSource(Name = "OpenTelemetry-Api")] internal sealed class OpenTelemetryApiEventSource : EventSource { - public static OpenTelemetryApiEventSource Log = new(); + public static readonly OpenTelemetryApiEventSource Log = new(); [NonEvent] public void ActivityContextExtractException(string format, Exception ex) diff --git a/src/OpenTelemetry.Api/Trace/TracerProvider.cs b/src/OpenTelemetry.Api/Trace/TracerProvider.cs index 21197d0abdb..95b99be1ad7 100644 --- a/src/OpenTelemetry.Api/Trace/TracerProvider.cs +++ b/src/OpenTelemetry.Api/Trace/TracerProvider.cs @@ -78,7 +78,7 @@ protected override void Dispose(bool disposing) { if (disposing) { - var tracers = Interlocked.CompareExchange(ref this.Tracers, null, this.Tracers); + var tracers = Interlocked.Exchange(ref this.Tracers, null); if (tracers != null) { lock (tracers) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/PersistentStorage/PersistentStorageAbstractionsEventSource.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/PersistentStorage/PersistentStorageAbstractionsEventSource.cs index 0c8562ce319..b7494427763 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/PersistentStorage/PersistentStorageAbstractionsEventSource.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/PersistentStorage/PersistentStorageAbstractionsEventSource.cs @@ -9,7 +9,7 @@ namespace OpenTelemetry.PersistentStorage.Abstractions; [EventSource(Name = EventSourceName)] internal sealed class PersistentStorageAbstractionsEventSource : EventSource { - public static PersistentStorageAbstractionsEventSource Log = new PersistentStorageAbstractionsEventSource(); + public static readonly PersistentStorageAbstractionsEventSource Log = new PersistentStorageAbstractionsEventSource(); #if BUILDING_INTERNAL_PERSISTENT_STORAGE private const string EventSourceName = "OpenTelemetry-PersistentStorage-Abstractions-Otlp"; #else diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/PersistentStorage/PersistentStorageEventSource.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/PersistentStorage/PersistentStorageEventSource.cs index 69cdf419cac..554735b2501 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/PersistentStorage/PersistentStorageEventSource.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/PersistentStorage/PersistentStorageEventSource.cs @@ -9,7 +9,7 @@ namespace OpenTelemetry.PersistentStorage.FileSystem; [EventSource(Name = EventSourceName)] internal sealed class PersistentStorageEventSource : EventSource { - public static PersistentStorageEventSource Log = new PersistentStorageEventSource(); + public static readonly PersistentStorageEventSource Log = new PersistentStorageEventSource(); #if BUILDING_INTERNAL_PERSISTENT_STORAGE private const string EventSourceName = "OpenTelemetry-PersistentStorage-FileSystem-Otlp"; #else diff --git a/src/OpenTelemetry.Extensions.Hosting/Implementation/HostingExtensionsEventSource.cs b/src/OpenTelemetry.Extensions.Hosting/Implementation/HostingExtensionsEventSource.cs index 1d31393b0fa..af4bb57a7f2 100644 --- a/src/OpenTelemetry.Extensions.Hosting/Implementation/HostingExtensionsEventSource.cs +++ b/src/OpenTelemetry.Extensions.Hosting/Implementation/HostingExtensionsEventSource.cs @@ -11,7 +11,7 @@ namespace OpenTelemetry.Extensions.Hosting.Implementation; [EventSource(Name = "OpenTelemetry-Extensions-Hosting")] internal sealed class HostingExtensionsEventSource : EventSource { - public static HostingExtensionsEventSource Log = new(); + public static readonly HostingExtensionsEventSource Log = new(); [Event(1, Message = "OpenTelemetry TracerProvider was not found in application services. Tracing will remain disabled.", Level = EventLevel.Warning)] public void TracerProviderNotRegistered() diff --git a/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs b/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs index 88312e3a140..b3980c2a624 100644 --- a/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs +++ b/src/OpenTelemetry/Internal/OpenTelemetrySdkEventSource.cs @@ -16,7 +16,7 @@ namespace OpenTelemetry.Internal; [EventSource(Name = "OpenTelemetry-Sdk")] internal sealed class OpenTelemetrySdkEventSource : EventSource, IConfigurationExtensionsLogger { - public static OpenTelemetrySdkEventSource Log = new(); + public static readonly OpenTelemetrySdkEventSource Log = new(); #if DEBUG public static OpenTelemetryEventListener Listener = new(); #endif diff --git a/src/OpenTelemetry/Logs/LogRecord.cs b/src/OpenTelemetry/Logs/LogRecord.cs index 8009687d551..824e95bf0c1 100644 --- a/src/OpenTelemetry/Logs/LogRecord.cs +++ b/src/OpenTelemetry/Logs/LogRecord.cs @@ -429,19 +429,17 @@ public void ForEachScope(Action callback, TState { Guard.ThrowIfNull(callback); - var forEachScopeState = new ScopeForEachState(callback, state); - var bufferedScopes = this.ILoggerData.BufferedScopes; if (bufferedScopes != null) { foreach (object? scope in bufferedScopes) { - ScopeForEachState.ForEachScope(scope, forEachScopeState); + callback(new(scope), state); } } else { - this.ILoggerData.ScopeProvider?.ForEachScope(ScopeForEachState.ForEachScope, forEachScopeState); + this.ILoggerData.ScopeProvider?.ForEachScope(ScopeForEachState.ForEachScope, new(callback, state)); } } diff --git a/src/OpenTelemetry/Metrics/CircularBufferBuckets.cs b/src/OpenTelemetry/Metrics/CircularBufferBuckets.cs index a7205a41eab..2ccede024b1 100644 --- a/src/OpenTelemetry/Metrics/CircularBufferBuckets.cs +++ b/src/OpenTelemetry/Metrics/CircularBufferBuckets.cs @@ -263,10 +263,11 @@ internal void Reset() { if (this.trait != null) { - for (var i = 0; i < this.trait.Length; ++i) - { - this.trait[i] = 0; - } +#if NET + Array.Clear(this.trait); +#else + Array.Clear(this.trait, 0, this.trait.Length); +#endif } } diff --git a/src/OpenTelemetry/Metrics/MeterProviderSdk.cs b/src/OpenTelemetry/Metrics/MeterProviderSdk.cs index 91b709921b1..c2499f06bb0 100644 --- a/src/OpenTelemetry/Metrics/MeterProviderSdk.cs +++ b/src/OpenTelemetry/Metrics/MeterProviderSdk.cs @@ -143,12 +143,12 @@ internal MeterProviderSdk( } // Setup Listener - if (state.MeterSources.Any(s => WildcardHelper.ContainsWildcard(s))) + if (state.MeterSources.Exists(WildcardHelper.ContainsWildcard)) { var regex = WildcardHelper.GetWildcardRegex(state.MeterSources); this.shouldListenTo = instrument => regex.IsMatch(instrument.Meter.Name); } - else if (state.MeterSources.Any()) + else if (state.MeterSources.Count > 0) { var meterSourcesToSubscribe = new HashSet(state.MeterSources, StringComparer.OrdinalIgnoreCase); this.shouldListenTo = instrument => meterSourcesToSubscribe.Contains(instrument.Meter.Name); diff --git a/src/OpenTelemetry/Metrics/MetricPoint/MetricPointsAccessor.cs b/src/OpenTelemetry/Metrics/MetricPoint/MetricPointsAccessor.cs index b79c1ac7096..58fd9c772af 100644 --- a/src/OpenTelemetry/Metrics/MetricPoint/MetricPointsAccessor.cs +++ b/src/OpenTelemetry/Metrics/MetricPoint/MetricPointsAccessor.cs @@ -13,9 +13,9 @@ public readonly struct MetricPointsAccessor { private readonly MetricPoint[] metricsPoints; private readonly int[] metricPointsToProcess; - private readonly long targetCount; + private readonly int targetCount; - internal MetricPointsAccessor(MetricPoint[] metricsPoints, int[] metricPointsToProcess, long targetCount) + internal MetricPointsAccessor(MetricPoint[] metricsPoints, int[] metricPointsToProcess, int targetCount) { Debug.Assert(metricsPoints != null, "metricPoints was null"); Debug.Assert(metricPointsToProcess != null, "metricPointsToProcess was null"); @@ -39,10 +39,10 @@ public struct Enumerator { private readonly MetricPoint[] metricsPoints; private readonly int[] metricPointsToProcess; - private readonly long targetCount; - private long index; + private readonly int targetCount; + private int index; - internal Enumerator(MetricPoint[] metricsPoints, int[] metricPointsToProcess, long targetCount) + internal Enumerator(MetricPoint[] metricsPoints, int[] metricPointsToProcess, int targetCount) { this.metricsPoints = metricsPoints; this.metricPointsToProcess = metricPointsToProcess; diff --git a/src/OpenTelemetry/Metrics/Reader/MetricReader.cs b/src/OpenTelemetry/Metrics/Reader/MetricReader.cs index 52353a1155a..25bd7ca59c4 100644 --- a/src/OpenTelemetry/Metrics/Reader/MetricReader.cs +++ b/src/OpenTelemetry/Metrics/Reader/MetricReader.cs @@ -125,7 +125,7 @@ public bool Collect(int timeoutMilliseconds = Timeout.Infinite) if (!shouldRunCollect) { - return Task.WaitAny(tcs.Task, this.shutdownTcs.Task, Task.Delay(timeoutMilliseconds)) == 0 && tcs.Task.Result; + return Task.WaitAny([tcs.Task, this.shutdownTcs.Task], timeoutMilliseconds) == 0 && tcs.Task.Result; } var result = false; diff --git a/src/OpenTelemetry/Metrics/View/ExplicitBucketHistogramConfiguration.cs b/src/OpenTelemetry/Metrics/View/ExplicitBucketHistogramConfiguration.cs index 8d040da86a5..e00a698cf87 100644 --- a/src/OpenTelemetry/Metrics/View/ExplicitBucketHistogramConfiguration.cs +++ b/src/OpenTelemetry/Metrics/View/ExplicitBucketHistogramConfiguration.cs @@ -25,17 +25,7 @@ public class ExplicitBucketHistogramConfiguration : HistogramConfiguration /// public double[]? Boundaries { - get - { - if (this.CopiedBoundaries != null) - { - double[] copy = new double[this.CopiedBoundaries.Length]; - this.CopiedBoundaries.AsSpan().CopyTo(copy); - return copy; - } - - return null; - } + get => this.CopiedBoundaries != null ? this.CopiedBoundaries.AsSpan().ToArray() : null; set { @@ -46,9 +36,7 @@ public double[]? Boundaries throw new ArgumentException($"Histogram boundaries are invalid. Histogram boundaries must be in ascending order with distinct values.", nameof(value)); } - double[] copy = new double[value.Length]; - value.AsSpan().CopyTo(copy); - this.CopiedBoundaries = copy; + this.CopiedBoundaries = value.AsSpan().ToArray(); } else { diff --git a/src/OpenTelemetry/Metrics/View/MetricStreamConfiguration.cs b/src/OpenTelemetry/Metrics/View/MetricStreamConfiguration.cs index cf5e06661a0..5b80151a036 100644 --- a/src/OpenTelemetry/Metrics/View/MetricStreamConfiguration.cs +++ b/src/OpenTelemetry/Metrics/View/MetricStreamConfiguration.cs @@ -71,31 +71,8 @@ public string? Name /// public string[]? TagKeys { - get - { - if (this.CopiedTagKeys != null) - { - string[] copy = new string[this.CopiedTagKeys.Length]; - this.CopiedTagKeys.AsSpan().CopyTo(copy); - return copy; - } - - return null; - } - - set - { - if (value != null) - { - string[] copy = new string[value.Length]; - value.AsSpan().CopyTo(copy); - this.CopiedTagKeys = copy; - } - else - { - this.CopiedTagKeys = null; - } - } + get => this.CopiedTagKeys != null ? this.CopiedTagKeys.AsSpan().ToArray() : null; + set => this.CopiedTagKeys = value != null ? value.AsSpan().ToArray() : null; } /// diff --git a/src/OpenTelemetry/OpenTelemetrySdkExtensions.cs b/src/OpenTelemetry/OpenTelemetrySdkExtensions.cs index f1f01e0f20a..fc1782c864a 100644 --- a/src/OpenTelemetry/OpenTelemetrySdkExtensions.cs +++ b/src/OpenTelemetry/OpenTelemetrySdkExtensions.cs @@ -12,8 +12,6 @@ namespace OpenTelemetry; /// public static class OpenTelemetrySdkExtensions { - private static readonly NullLoggerFactory NoopLoggerFactory = new(); - /// /// Gets the contained in an instance. @@ -31,6 +29,6 @@ public static ILoggerFactory GetLoggerFactory(this OpenTelemetrySdk sdk) Guard.ThrowIfNull(sdk); return (ILoggerFactory?)sdk.Services.GetService(typeof(ILoggerFactory)) - ?? NoopLoggerFactory; + ?? NullLoggerFactory.Instance; } }