[Otlp] Bump Google.Protobuf to 3.22.0 and remove reflection emit code (#4201)

This commit is contained in:
Mikel Blanchard 2023-02-24 17:26:30 -08:00 committed by GitHub
parent a3ec494c4a
commit f7f535866b
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 9 additions and 55 deletions

View File

@ -33,7 +33,7 @@
<BenchmarkDotNetPkgVer>[0.13.3,0.14)</BenchmarkDotNetPkgVer> <BenchmarkDotNetPkgVer>[0.13.3,0.14)</BenchmarkDotNetPkgVer>
<CommandLineParserPkgVer>[2.9.1,3.0)</CommandLineParserPkgVer> <CommandLineParserPkgVer>[2.9.1,3.0)</CommandLineParserPkgVer>
<DotNetXUnitCliVer>[2.3.1,3.0)</DotNetXUnitCliVer> <DotNetXUnitCliVer>[2.3.1,3.0)</DotNetXUnitCliVer>
<GoogleProtobufPkgVer>[3.19.4,4.0)</GoogleProtobufPkgVer> <GoogleProtobufPkgVer>[3.22.0,4.0)</GoogleProtobufPkgVer>
<GrpcAspNetCorePkgVer>[2.50.0,3.0)</GrpcAspNetCorePkgVer> <GrpcAspNetCorePkgVer>[2.50.0,3.0)</GrpcAspNetCorePkgVer>
<GrpcAspNetCoreServerPkgVer>[2.48.0, 3.0)</GrpcAspNetCoreServerPkgVer> <GrpcAspNetCoreServerPkgVer>[2.48.0, 3.0)</GrpcAspNetCoreServerPkgVer>
<GrpcToolsPkgVer>[2.48.0,3.0)</GrpcToolsPkgVer> <GrpcToolsPkgVer>[2.48.0,3.0)</GrpcToolsPkgVer>

View File

@ -27,7 +27,7 @@
Refer to https://docs.microsoft.com/nuget/concepts/package-versioning for semver syntax. Refer to https://docs.microsoft.com/nuget/concepts/package-versioning for semver syntax.
--> -->
<MinVerPkgVer>[4.2.0,5.0)</MinVerPkgVer> <MinVerPkgVer>[4.2.0,5.0)</MinVerPkgVer>
<GoogleProtobufPkgVer>[3.19.4,4.0)</GoogleProtobufPkgVer> <GoogleProtobufPkgVer>[3.22.0,4.0)</GoogleProtobufPkgVer>
<GrpcPkgVer>[2.44.0,3.0)</GrpcPkgVer> <GrpcPkgVer>[2.44.0,3.0)</GrpcPkgVer>
<GrpcNetClientPkgVer>[2.43.0,3.0)</GrpcNetClientPkgVer> <GrpcNetClientPkgVer>[2.43.0,3.0)</GrpcNetClientPkgVer>
<GrpcToolsPkgVer>[2.44.0,3.0)</GrpcToolsPkgVer> <GrpcToolsPkgVer>[2.44.0,3.0)</GrpcToolsPkgVer>
@ -49,7 +49,6 @@
<StyleCopAnalyzersPkgVer>[1.2.0-beta.435,2.0)</StyleCopAnalyzersPkgVer> <StyleCopAnalyzersPkgVer>[1.2.0-beta.435,2.0)</StyleCopAnalyzersPkgVer>
<SystemCollectionsImmutablePkgVer>1.4.0</SystemCollectionsImmutablePkgVer> <SystemCollectionsImmutablePkgVer>1.4.0</SystemCollectionsImmutablePkgVer>
<SystemDiagnosticSourcePkgVer>7.0.0</SystemDiagnosticSourcePkgVer> <SystemDiagnosticSourcePkgVer>7.0.0</SystemDiagnosticSourcePkgVer>
<SystemReflectionEmitLightweightPkgVer>4.7.0</SystemReflectionEmitLightweightPkgVer>
<SystemTextJsonPkgVer>4.7.2</SystemTextJsonPkgVer> <SystemTextJsonPkgVer>4.7.2</SystemTextJsonPkgVer>
<SystemThreadingTasksExtensionsPkgVer>4.5.4</SystemThreadingTasksExtensionsPkgVer> <SystemThreadingTasksExtensionsPkgVer>4.5.4</SystemThreadingTasksExtensionsPkgVer>
</PropertyGroup> </PropertyGroup>

View File

@ -2,6 +2,11 @@
## Unreleased ## 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 ## 1.4.0
Released 2023-Feb-24 Released 2023-Feb-24

View File

@ -16,11 +16,8 @@
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Diagnostics; using System.Diagnostics;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using Google.Protobuf; using Google.Protobuf;
using Google.Protobuf.Collections;
using OpenTelemetry.Internal; using OpenTelemetry.Internal;
using OpenTelemetry.Proto.Collector.Trace.V1; using OpenTelemetry.Proto.Collector.Trace.V1;
using OpenTelemetry.Proto.Common.V1; using OpenTelemetry.Proto.Common.V1;
@ -34,7 +31,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
internal static class ActivityExtensions internal static class ActivityExtensions
{ {
private static readonly ConcurrentBag<ScopeSpans> SpanListPool = new(); private static readonly ConcurrentBag<ScopeSpans> SpanListPool = new();
private static readonly Action<RepeatedField<Span>, int> RepeatedFieldOfSpanSetCountAction = CreateRepeatedFieldOfSpanSetCountAction();
internal static void AddBatch( internal static void AddBatch(
this ExportTraceServiceRequest request, this ExportTraceServiceRequest request,
@ -84,7 +80,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
foreach (var scope in resourceSpans.ScopeSpans) foreach (var scope in resourceSpans.ScopeSpans)
{ {
RepeatedFieldOfSpanSetCountAction(scope.Spans, 0); scope.Spans.Clear();
SpanListPool.Add(scope); SpanListPool.Add(scope);
} }
} }
@ -297,27 +293,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
return otlpEvent; return otlpEvent;
} }
private static Action<RepeatedField<Span>, int> CreateRepeatedFieldOfSpanSetCountAction()
{
FieldInfo repeatedFieldOfSpanCountField = typeof(RepeatedField<Span>).GetField("count", BindingFlags.NonPublic | BindingFlags.Instance);
DynamicMethod dynamicMethod = new DynamicMethod(
"CreateSetCountAction",
null,
new[] { typeof(RepeatedField<Span>), 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<RepeatedField<Span>, int>)dynamicMethod.CreateDelegate(typeof(Action<RepeatedField<Span>, int>));
}
private struct TagEnumerationState : PeerServiceResolver.IPeerServiceState private struct TagEnumerationState : PeerServiceResolver.IPeerServiceState
{ {
public SdkLimitOptions SdkLimitOptions; public SdkLimitOptions SdkLimitOptions;

View File

@ -15,8 +15,6 @@
// </copyright> // </copyright>
using System.Collections.Concurrent; using System.Collections.Concurrent;
using System.Reflection;
using System.Reflection.Emit;
using System.Runtime.CompilerServices; using System.Runtime.CompilerServices;
using Google.Protobuf.Collections; using Google.Protobuf.Collections;
using OpenTelemetry.Metrics; using OpenTelemetry.Metrics;
@ -30,7 +28,6 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
internal static class MetricItemExtensions internal static class MetricItemExtensions
{ {
private static readonly ConcurrentBag<OtlpMetrics.ScopeMetrics> MetricListPool = new(); private static readonly ConcurrentBag<OtlpMetrics.ScopeMetrics> MetricListPool = new();
private static readonly Action<RepeatedField<OtlpMetrics.Metric>, int> RepeatedFieldOfMetricSetCountAction = CreateRepeatedFieldOfMetricSetCountAction();
internal static void AddMetrics( internal static void AddMetrics(
this OtlpCollector.ExportMetricsServiceRequest request, this OtlpCollector.ExportMetricsServiceRequest request,
@ -81,7 +78,7 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
foreach (var scope in resourceMetrics.ScopeMetrics) foreach (var scope in resourceMetrics.ScopeMetrics)
{ {
RepeatedFieldOfMetricSetCountAction(scope.Metrics, 0); scope.Metrics.Clear();
MetricListPool.Add(scope); MetricListPool.Add(scope);
} }
} }
@ -338,26 +335,5 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation
return otlpExemplar; return otlpExemplar;
} }
*/ */
private static Action<RepeatedField<OtlpMetrics.Metric>, int> CreateRepeatedFieldOfMetricSetCountAction()
{
FieldInfo repeatedFieldOfMetricCountField = typeof(RepeatedField<OtlpMetrics.Metric>).GetField("count", BindingFlags.NonPublic | BindingFlags.Instance);
DynamicMethod dynamicMethod = new DynamicMethod(
"CreateSetCountAction",
null,
new[] { typeof(RepeatedField<OtlpMetrics.Metric>), 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<RepeatedField<OtlpMetrics.Metric>, int>)dynamicMethod.CreateDelegate(typeof(Action<RepeatedField<OtlpMetrics.Metric>, int>));
}
} }
} }

View File

@ -19,7 +19,6 @@
<PackageReference Include="Grpc" Version="$(GrpcPkgVer)" Condition="'$(TargetFramework)' == 'netstandard2.0' OR '$(TargetFramework)' == 'net462'" /> <PackageReference Include="Grpc" Version="$(GrpcPkgVer)" Condition="'$(TargetFramework)' == 'netstandard2.0' OR '$(TargetFramework)' == 'net462'" />
<PackageReference Include="Google.Protobuf" Version="$(GoogleProtobufPkgVer)" /> <PackageReference Include="Google.Protobuf" Version="$(GoogleProtobufPkgVer)" />
<PackageReference Include="Grpc.Tools" Version="$(GrpcToolsPkgVer)" PrivateAssets="all" /> <PackageReference Include="Grpc.Tools" Version="$(GrpcToolsPkgVer)" PrivateAssets="all" />
<PackageReference Include="System.Reflection.Emit.Lightweight" Version="$(SystemReflectionEmitLightweightPkgVer)" Condition="'$(TargetFramework)' != 'net6.0'" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>