From f7f535866b3c4cfef19661c4e97b41cf3a2091df Mon Sep 17 00:00:00 2001 From: Mikel Blanchard Date: Fri, 24 Feb 2023 17:26:30 -0800 Subject: [PATCH] [Otlp] Bump Google.Protobuf to 3.22.0 and remove reflection emit code (#4201) --- build/Common.nonprod.props | 2 +- build/Common.props | 3 +-- .../CHANGELOG.md | 5 ++++ .../Implementation/ActivityExtensions.cs | 27 +------------------ .../Implementation/MetricItemExtensions.cs | 26 +----------------- ...etry.Exporter.OpenTelemetryProtocol.csproj | 1 - 6 files changed, 9 insertions(+), 55 deletions(-) diff --git a/build/Common.nonprod.props b/build/Common.nonprod.props index 12049e6e3..fc4cb09c5 100644 --- a/build/Common.nonprod.props +++ b/build/Common.nonprod.props @@ -33,7 +33,7 @@ [0.13.3,0.14) [2.9.1,3.0) [2.3.1,3.0) - [3.19.4,4.0) + [3.22.0,4.0) [2.50.0,3.0) [2.48.0, 3.0) [2.48.0,3.0) diff --git a/build/Common.props b/build/Common.props index d725d4210..7179ee4e3 100644 --- a/build/Common.props +++ b/build/Common.props @@ -27,7 +27,7 @@ Refer to https://docs.microsoft.com/nuget/concepts/package-versioning for semver syntax. --> [4.2.0,5.0) - [3.19.4,4.0) + [3.22.0,4.0) [2.44.0,3.0) [2.43.0,3.0) [2.44.0,3.0) @@ -49,7 +49,6 @@ [1.2.0-beta.435,2.0) 1.4.0 7.0.0 - 4.7.0 4.7.2 4.5.4 diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md index 94e8e5bc7..a9f861786 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md @@ -2,6 +2,11 @@ ## Unreleased +* Bumped the version of `Google.Protobuf` used by the project to `3.22.0` so + that a new performance feature can be used instead of reflection. Removed the + dependency on `System.Reflection.Emit.Lightweight`. + ([#4201](https://github.com/open-telemetry/opentelemetry-dotnet/pull/4201)) + ## 1.4.0 Released 2023-Feb-24 diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs index df2499e2c..b76ac227c 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ActivityExtensions.cs @@ -16,11 +16,8 @@ using System.Collections.Concurrent; using System.Diagnostics; -using System.Reflection; -using System.Reflection.Emit; using System.Runtime.CompilerServices; using Google.Protobuf; -using Google.Protobuf.Collections; using OpenTelemetry.Internal; using OpenTelemetry.Proto.Collector.Trace.V1; using OpenTelemetry.Proto.Common.V1; @@ -34,7 +31,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation internal static class ActivityExtensions { private static readonly ConcurrentBag SpanListPool = new(); - private static readonly Action, int> RepeatedFieldOfSpanSetCountAction = CreateRepeatedFieldOfSpanSetCountAction(); internal static void AddBatch( this ExportTraceServiceRequest request, @@ -84,7 +80,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation foreach (var scope in resourceSpans.ScopeSpans) { - RepeatedFieldOfSpanSetCountAction(scope.Spans, 0); + scope.Spans.Clear(); SpanListPool.Add(scope); } } @@ -297,27 +293,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation return otlpEvent; } - private static Action, int> CreateRepeatedFieldOfSpanSetCountAction() - { - FieldInfo repeatedFieldOfSpanCountField = typeof(RepeatedField).GetField("count", BindingFlags.NonPublic | BindingFlags.Instance); - - DynamicMethod dynamicMethod = new DynamicMethod( - "CreateSetCountAction", - null, - new[] { typeof(RepeatedField), typeof(int) }, - typeof(ActivityExtensions).Module, - skipVisibility: true); - - var generator = dynamicMethod.GetILGenerator(); - - generator.Emit(OpCodes.Ldarg_0); - generator.Emit(OpCodes.Ldarg_1); - generator.Emit(OpCodes.Stfld, repeatedFieldOfSpanCountField); - generator.Emit(OpCodes.Ret); - - return (Action, int>)dynamicMethod.CreateDelegate(typeof(Action, int>)); - } - private struct TagEnumerationState : PeerServiceResolver.IPeerServiceState { public SdkLimitOptions SdkLimitOptions; diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs index 24a7fb673..31e3438d8 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/MetricItemExtensions.cs @@ -15,8 +15,6 @@ // using System.Collections.Concurrent; -using System.Reflection; -using System.Reflection.Emit; using System.Runtime.CompilerServices; using Google.Protobuf.Collections; using OpenTelemetry.Metrics; @@ -30,7 +28,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation internal static class MetricItemExtensions { private static readonly ConcurrentBag MetricListPool = new(); - private static readonly Action, int> RepeatedFieldOfMetricSetCountAction = CreateRepeatedFieldOfMetricSetCountAction(); internal static void AddMetrics( this OtlpCollector.ExportMetricsServiceRequest request, @@ -81,7 +78,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation foreach (var scope in resourceMetrics.ScopeMetrics) { - RepeatedFieldOfMetricSetCountAction(scope.Metrics, 0); + scope.Metrics.Clear(); MetricListPool.Add(scope); } } @@ -338,26 +335,5 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation return otlpExemplar; } */ - - private static Action, int> CreateRepeatedFieldOfMetricSetCountAction() - { - FieldInfo repeatedFieldOfMetricCountField = typeof(RepeatedField).GetField("count", BindingFlags.NonPublic | BindingFlags.Instance); - - DynamicMethod dynamicMethod = new DynamicMethod( - "CreateSetCountAction", - null, - new[] { typeof(RepeatedField), typeof(int) }, - typeof(MetricItemExtensions).Module, - skipVisibility: true); - - var generator = dynamicMethod.GetILGenerator(); - - generator.Emit(OpCodes.Ldarg_0); - generator.Emit(OpCodes.Ldarg_1); - generator.Emit(OpCodes.Stfld, repeatedFieldOfMetricCountField); - generator.Emit(OpCodes.Ret); - - return (Action, int>)dynamicMethod.CreateDelegate(typeof(Action, int>)); - } } } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj index 0a4cdcb22..7a6c5164d 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OpenTelemetry.Exporter.OpenTelemetryProtocol.csproj @@ -19,7 +19,6 @@ -