From 131bed5f8c1bee6b17563a2cc5a2661ef163c79d Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Mon, 11 Mar 2024 15:06:39 -0700 Subject: [PATCH 01/12] Add experimental options to trace and metric exporter --- .../Implementation/ExperimentalOptions.cs | 12 ++++++++++++ .../OtlpExporterExperimentalEnvVarKeyDefinitions.cs | 8 ++++++++ .../OtlpMetricExporter.cs | 4 +++- .../OtlpMetricExporterExtensions.cs | 11 +++++++++-- .../OtlpTraceExporter.cs | 4 +++- .../OtlpTraceExporterHelperExtensions.cs | 9 +++++++-- .../Exporter/OtlpGrpcExporterBenchmarks.cs | 1 + .../Exporter/OtlpHttpExporterBenchmarks.cs | 1 + .../IntegrationTest/IntegrationTests.cs | 2 ++ .../OtlpTraceExporterTests.cs | 4 +++- 10 files changed, 49 insertions(+), 7 deletions(-) create mode 100644 src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpExporterExperimentalEnvVarKeyDefinitions.cs diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs index 61f126b1229..42f6eea53d9 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs @@ -16,6 +16,8 @@ internal sealed class ExperimentalOptions public const string EmitLogEventEnvVar = "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES"; + public const string EnableInMemoryRetryEnvVar = "OTEL_DOTNET_EXPERIMENTAL_OTLP_ENABLE_RETRIES"; + public ExperimentalOptions() : this(new ConfigurationBuilder().AddEnvironmentVariables().Build()) { @@ -27,10 +29,20 @@ public ExperimentalOptions(IConfiguration configuration) { this.EmitLogEventAttributes = emitLogEventAttributes; } + + if (configuration.TryGetBoolValue(EnableInMemoryRetryEnvVar, out var enableInMemoryRetry)) + { + this.EnableInMemoryRetry = enableInMemoryRetry; + } } /// /// Gets or sets a value indicating whether log event attributes should be exported. /// public bool EmitLogEventAttributes { get; set; } = false; + + /// + /// Gets or sets a value indicating whether retries should be enabled in case of transient errors. + /// + public bool EnableInMemoryRetry { get; set; } = false; } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpExporterExperimentalEnvVarKeyDefinitions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpExporterExperimentalEnvVarKeyDefinitions.cs new file mode 100644 index 00000000000..22997573e66 --- /dev/null +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpExporterExperimentalEnvVarKeyDefinitions.cs @@ -0,0 +1,8 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; + +internal class OtlpExporterExperimentalEnvVarKeyDefinitions +{ +} diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs index a0026d1e9f4..d257dd059a7 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs @@ -25,7 +25,7 @@ public class OtlpMetricExporter : BaseExporter /// /// Configuration options for the exporter. public OtlpMetricExporter(OtlpExporterOptions options) - : this(options, transmissionHandler: null) + : this(options, experimentalOptions: new(), transmissionHandler: null) { } @@ -33,9 +33,11 @@ public OtlpMetricExporter(OtlpExporterOptions options) /// Initializes a new instance of the class. /// /// Configuration options for the export. + /// . /// . internal OtlpMetricExporter( OtlpExporterOptions options, + ExperimentalOptions experimentalOptions, OtlpExporterTransmissionHandler transmissionHandler = null) { // Each of the Otlp exporters: Traces, Metrics, and Logs set the same value for `OtlpKeyValueTransformer.LogUnsupportedAttributeType` diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs index 747cf46f949..84c9453aef8 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs @@ -7,6 +7,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using OpenTelemetry.Exporter; +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Internal; namespace OpenTelemetry.Metrics; @@ -98,6 +99,7 @@ public static MeterProviderBuilder AddOtlpExporter( return BuildOtlpExporterMetricReader( exporterOptions, sp.GetRequiredService>().Get(finalOptionsName), + sp.GetRequiredService>().Get(finalOptionsName), sp); }); } @@ -169,19 +171,24 @@ public static MeterProviderBuilder AddOtlpExporter( configureExporterAndMetricReader?.Invoke(exporterOptions, metricReaderOptions); - return BuildOtlpExporterMetricReader(exporterOptions, metricReaderOptions, sp); + return BuildOtlpExporterMetricReader( + exporterOptions, + metricReaderOptions, + sp.GetRequiredService>().Get(finalOptionsName), + sp); }); } internal static MetricReader BuildOtlpExporterMetricReader( OtlpExporterOptions exporterOptions, MetricReaderOptions metricReaderOptions, + ExperimentalOptions experimentalOptions, IServiceProvider serviceProvider, Func, BaseExporter>? configureExporterInstance = null) { exporterOptions.TryEnableIHttpClientFactoryIntegration(serviceProvider, "OtlpMetricExporter"); - BaseExporter metricExporter = new OtlpMetricExporter(exporterOptions); + BaseExporter metricExporter = new OtlpMetricExporter(exporterOptions, experimentalOptions); if (configureExporterInstance != null) { diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs index f017d075428..04c70f44b95 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs @@ -26,7 +26,7 @@ public class OtlpTraceExporter : BaseExporter /// /// Configuration options for the export. public OtlpTraceExporter(OtlpExporterOptions options) - : this(options, sdkLimitOptions: new(), transmissionHandler: null) + : this(options, sdkLimitOptions: new(), experimentalOptions: new(), transmissionHandler: null) { } @@ -35,10 +35,12 @@ public OtlpTraceExporter(OtlpExporterOptions options) /// /// . /// . + /// . /// . internal OtlpTraceExporter( OtlpExporterOptions exporterOptions, SdkLimitOptions sdkLimitOptions, + ExperimentalOptions experimentalOptions, OtlpExporterTransmissionHandler transmissionHandler = null) { Debug.Assert(exporterOptions != null, "exporterOptions was null"); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs index 45231f63604..7ccbdd33472 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs @@ -92,19 +92,24 @@ public static TracerProviderBuilder AddOtlpExporter( // instance. var sdkOptionsManager = sp.GetRequiredService>().CurrentValue; - return BuildOtlpExporterProcessor(exporterOptions, sdkOptionsManager, sp); + return BuildOtlpExporterProcessor( + exporterOptions, + sdkOptionsManager, + sp.GetRequiredService>().Get(finalOptionsName), + sp); }); } internal static BaseProcessor BuildOtlpExporterProcessor( OtlpExporterOptions exporterOptions, SdkLimitOptions sdkLimitOptions, + ExperimentalOptions experimentalOptions, IServiceProvider serviceProvider, Func, BaseExporter>? configureExporterInstance = null) { exporterOptions.TryEnableIHttpClientFactoryIntegration(serviceProvider, "OtlpTraceExporter"); - BaseExporter otlpExporter = new OtlpTraceExporter(exporterOptions, sdkLimitOptions); + BaseExporter otlpExporter = new OtlpTraceExporter(exporterOptions, sdkLimitOptions, experimentalOptions); if (configureExporterInstance != null) { diff --git a/test/Benchmarks/Exporter/OtlpGrpcExporterBenchmarks.cs b/test/Benchmarks/Exporter/OtlpGrpcExporterBenchmarks.cs index f80d59d2a14..412b344b32f 100644 --- a/test/Benchmarks/Exporter/OtlpGrpcExporterBenchmarks.cs +++ b/test/Benchmarks/Exporter/OtlpGrpcExporterBenchmarks.cs @@ -35,6 +35,7 @@ public void GlobalSetup() this.exporter = new OtlpTraceExporter( options, new SdkLimitOptions(), + new ExperimentalOptions(), new OtlpExporterTransmissionHandler(new OtlpGrpcTraceExportClient(options, new TestTraceServiceClient()))); this.activity = ActivityHelper.CreateTestActivity(); diff --git a/test/Benchmarks/Exporter/OtlpHttpExporterBenchmarks.cs b/test/Benchmarks/Exporter/OtlpHttpExporterBenchmarks.cs index 86e79812be0..c5aade80a2f 100644 --- a/test/Benchmarks/Exporter/OtlpHttpExporterBenchmarks.cs +++ b/test/Benchmarks/Exporter/OtlpHttpExporterBenchmarks.cs @@ -63,6 +63,7 @@ public void GlobalSetup() this.exporter = new OtlpTraceExporter( options, new SdkLimitOptions(), + new ExperimentalOptions(), new OtlpExporterTransmissionHandler(new OtlpHttpTraceExportClient(options, options.HttpClientFactory()))); this.activity = ActivityHelper.CreateTestActivity(); diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs index 11b5b797127..e7bb7822fba 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/IntegrationTest/IntegrationTests.cs @@ -72,6 +72,7 @@ public void TraceExportResultIsSuccess(OtlpExportProtocol protocol, string endpo builder.AddProcessor(OtlpTraceExporterHelperExtensions.BuildOtlpExporterProcessor( exporterOptions, DefaultSdkLimitOptions, + experimentalOptions: new(), serviceProvider: null, configureExporterInstance: otlpExporter => { @@ -153,6 +154,7 @@ public void MetricExportResultIsSuccess(OtlpExportProtocol protocol, string endp builder.AddReader(OtlpMetricExporterExtensions.BuildOtlpExporterMetricReader( exporterOptions, readerOptions, + experimentalOptions: new(), serviceProvider: null, configureExporterInstance: otlpExporter => { diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTraceExporterTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTraceExporterTests.cs index 0c7a5db76e2..4390a2b01d9 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTraceExporterTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpTraceExporterTests.cs @@ -23,6 +23,8 @@ public class OtlpTraceExporterTests : Http2UnencryptedSupportTests { private static readonly SdkLimitOptions DefaultSdkLimitOptions = new(); + private static readonly ExperimentalOptions DefaultExperimentalOptions = new(); + static OtlpTraceExporterTests() { Activity.DefaultIdFormat = ActivityIdFormat.W3C; @@ -632,7 +634,7 @@ public void Shutdown_ClientShutdownIsCalled() var transmissionHandler = new OtlpExporterTransmissionHandler(exportClientMock); - var exporter = new OtlpTraceExporter(new OtlpExporterOptions(), DefaultSdkLimitOptions, transmissionHandler); + var exporter = new OtlpTraceExporter(new OtlpExporterOptions(), DefaultSdkLimitOptions, DefaultExperimentalOptions, transmissionHandler); exporter.Shutdown(); From 445b27090b7d4bd825c7bb9e87418f1efe06748c Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Tue, 12 Mar 2024 09:27:35 -0700 Subject: [PATCH 02/12] update --- .../OtlpExporterOptionsExtensions.cs | 22 ++++++++++--------- .../OtlpLogExporter.cs | 2 +- .../OtlpMetricExporter.cs | 2 +- .../OtlpMetricExporterExtensions.cs | 4 ++++ .../OtlpTraceExporter.cs | 2 +- .../OtlpTraceExporterHelperExtensions.cs | 1 + 6 files changed, 20 insertions(+), 13 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptionsExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptionsExtensions.cs index 0ee3ee06a44..584ea385903 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptionsExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptionsExtensions.cs @@ -88,7 +88,7 @@ public static THeaders GetHeaders(this OtlpExporterOptions options, Ac return headers; } - public static OtlpExporterTransmissionHandler GetTraceExportTransmissionHandler(this OtlpExporterOptions options) + public static OtlpExporterTransmissionHandler GetTraceExportTransmissionHandler(this OtlpExporterOptions options, bool enableRetry = false) { var exportClient = GetTraceExportClient(options); @@ -99,10 +99,12 @@ public static THeaders GetHeaders(this OtlpExporterOptions options, Ac ? httpTraceExportClient.HttpClient.Timeout.TotalMilliseconds : options.TimeoutMilliseconds; - return new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); + return enableRetry + ? new OtlpExporterRetryTransmissionHandler(exportClient, timeoutMilliseconds) + : new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); } - public static OtlpExporterTransmissionHandler GetMetricsExportTransmissionHandler(this OtlpExporterOptions options) + public static OtlpExporterTransmissionHandler GetMetricsExportTransmissionHandler(this OtlpExporterOptions options, bool enableRetry = false) { var exportClient = GetMetricsExportClient(options); @@ -113,21 +115,21 @@ public static THeaders GetHeaders(this OtlpExporterOptions options, Ac ? httpMetricsExportClient.HttpClient.Timeout.TotalMilliseconds : options.TimeoutMilliseconds; - return new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); + return enableRetry + ? new OtlpExporterRetryTransmissionHandler(exportClient, timeoutMilliseconds) + : new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); } - public static OtlpExporterTransmissionHandler GetLogsExportTransmissionHandler(this OtlpExporterOptions options) + public static OtlpExporterTransmissionHandler GetLogsExportTransmissionHandler(this OtlpExporterOptions options, bool enableRetry = false) { var exportClient = GetLogExportClient(options); - - // `HttpClient.Timeout.TotalMilliseconds` would be populated with the correct timeout value for both the exporter configuration cases: - // 1. User provides their own HttpClient. This case is straightforward as the user wants to use their `HttpClient` and thereby the same client's timeout value. - // 2. If the user configures timeout via the exporter options, then the timeout set for the `HttpClient` initialized by the exporter will be set to user provided value. double timeoutMilliseconds = exportClient is OtlpHttpLogExportClient httpLogExportClient ? httpLogExportClient.HttpClient.Timeout.TotalMilliseconds : options.TimeoutMilliseconds; - return new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); + return enableRetry + ? new OtlpExporterRetryTransmissionHandler(exportClient, timeoutMilliseconds) + : new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); } public static IExportClient GetTraceExportClient(this OtlpExporterOptions options) => diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs index 8e5c626d917..38a212065f4 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs @@ -62,7 +62,7 @@ internal OtlpLogExporter( OpenTelemetryProtocolExporterEventSource.Log.InvalidEnvironmentVariable(key, value); }; - this.transmissionHandler = transmissionHandler ?? exporterOptions.GetLogsExportTransmissionHandler(); + this.transmissionHandler = transmissionHandler ?? exporterOptions.GetLogsExportTransmissionHandler(experimentalOptions.EnableInMemoryRetry); this.otlpLogRecordTransformer = new OtlpLogRecordTransformer(sdkLimitOptions!, experimentalOptions!); } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs index d257dd059a7..7775d96b375 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs @@ -52,7 +52,7 @@ internal OtlpMetricExporter( OpenTelemetryProtocolExporterEventSource.Log.InvalidEnvironmentVariable(key, value); }; - this.transmissionHandler = transmissionHandler ?? options.GetMetricsExportTransmissionHandler(); + this.transmissionHandler = transmissionHandler ?? options.GetMetricsExportTransmissionHandler(experimentalOptions.EnableInMemoryRetry); } internal OtlpResource.Resource ProcessResource => this.processResource ??= this.ParentProvider.GetResource().ToOtlpResource(); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs index 38cb1a44a66..19aca16cf18 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs @@ -61,6 +61,8 @@ public static MeterProviderBuilder AddOtlpExporter( OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); + services.RegisterOptionsFactory(configuration => new ExperimentalOptions(configuration)); + services.AddOptions(finalOptionsName).Configure( (readerOptions, config) => { @@ -139,6 +141,8 @@ public static MeterProviderBuilder AddOtlpExporter( { OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); + services.RegisterOptionsFactory(configuration => new ExperimentalOptions(configuration)); + services.AddOptions(finalOptionsName).Configure( (readerOptions, config) => { diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs index 04c70f44b95..48762563fcc 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs @@ -52,7 +52,7 @@ internal OtlpTraceExporter( ConfigurationExtensions.LogInvalidEnvironmentVariable = OpenTelemetryProtocolExporterEventSource.Log.InvalidEnvironmentVariable; - this.transmissionHandler = transmissionHandler ?? exporterOptions.GetTraceExportTransmissionHandler(); + this.transmissionHandler = transmissionHandler ?? exporterOptions.GetTraceExportTransmissionHandler(experimentalOptions.EnableInMemoryRetry); } internal OtlpResource.Resource ProcessResource => this.processResource ??= this.ParentProvider.GetResource().ToOtlpResource(); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs index 7ccbdd33472..78d716142fb 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs @@ -61,6 +61,7 @@ public static TracerProviderBuilder AddOtlpExporter( OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); services.RegisterOptionsFactory(configuration => new SdkLimitOptions(configuration)); + services.RegisterOptionsFactory(configuration => new ExperimentalOptions(configuration)); }); return builder.AddProcessor(sp => From ec50616f383c001bfffefa18cb84a398675026bd Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Tue, 12 Mar 2024 09:28:45 -0700 Subject: [PATCH 03/12] rmv unused file --- .../OtlpExporterExperimentalEnvVarKeyDefinitions.cs | 8 -------- 1 file changed, 8 deletions(-) delete mode 100644 src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpExporterExperimentalEnvVarKeyDefinitions.cs diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpExporterExperimentalEnvVarKeyDefinitions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpExporterExperimentalEnvVarKeyDefinitions.cs deleted file mode 100644 index 22997573e66..00000000000 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/OtlpExporterExperimentalEnvVarKeyDefinitions.cs +++ /dev/null @@ -1,8 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; - -internal class OtlpExporterExperimentalEnvVarKeyDefinitions -{ -} From a24eaf6bca94be5683e4b7d1be02113c06607d28 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Tue, 12 Mar 2024 12:03:51 -0700 Subject: [PATCH 04/12] fix nullable --- .../OtlpLogExporter.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs index 38a212065f4..6319389605e 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs @@ -62,7 +62,7 @@ internal OtlpLogExporter( OpenTelemetryProtocolExporterEventSource.Log.InvalidEnvironmentVariable(key, value); }; - this.transmissionHandler = transmissionHandler ?? exporterOptions.GetLogsExportTransmissionHandler(experimentalOptions.EnableInMemoryRetry); + this.transmissionHandler = transmissionHandler ?? exporterOptions.GetLogsExportTransmissionHandler(experimentalOptions!.EnableInMemoryRetry); this.otlpLogRecordTransformer = new OtlpLogRecordTransformer(sdkLimitOptions!, experimentalOptions!); } From b97adad4214d9dc700aeb21e8714fcefebeda608 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Tue, 12 Mar 2024 13:22:30 -0700 Subject: [PATCH 05/12] fix tests --- .../MockCollectorIntegrationTests.cs | 44 +++++-------------- 1 file changed, 12 insertions(+), 32 deletions(-) diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/MockCollectorIntegrationTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/MockCollectorIntegrationTests.cs index dc2a0aad5f8..3029519eac2 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/MockCollectorIntegrationTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/MockCollectorIntegrationTests.cs @@ -8,11 +8,11 @@ using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Http; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; -using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; -using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Transmission; +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Metrics; using OpenTelemetry.Proto.Collector.Trace.V1; using OpenTelemetry.Tests; @@ -172,23 +172,13 @@ public async Task GrpcRetryTests(bool useRetryTransmissionHandler, ExportResult var endpoint = new Uri($"http://localhost:{testGrpcPort}"); - var exporterOptions = new OtlpExporterOptions() { Endpoint = endpoint, TimeoutMilliseconds = 20000 }; + var exporterOptions = new OtlpExporterOptions() { Endpoint = endpoint, TimeoutMilliseconds = 20000, Protocol = OtlpExportProtocol.Grpc }; - var exportClient = new OtlpGrpcTraceExportClient(exporterOptions); + var configuration = new ConfigurationBuilder() + .AddInMemoryCollection(new Dictionary { [ExperimentalOptions.EnableInMemoryRetryEnvVar] = useRetryTransmissionHandler.ToString() }) + .Build(); - OtlpExporterTransmissionHandler transmissionHandler; - - // TODO: update this to configure via experimental environment variable. - if (useRetryTransmissionHandler) - { - transmissionHandler = new OtlpExporterRetryTransmissionHandler(exportClient, exporterOptions.TimeoutMilliseconds); - } - else - { - transmissionHandler = new OtlpExporterTransmissionHandler(exportClient, exporterOptions.TimeoutMilliseconds); - } - - var otlpExporter = new OtlpTraceExporter(exporterOptions, new(), transmissionHandler); + var otlpExporter = new OtlpTraceExporter(exporterOptions, new SdkLimitOptions(), new ExperimentalOptions(configuration)); var activitySourceName = "otel.grpc.retry.test"; using var source = new ActivitySource(activitySourceName); @@ -266,23 +256,13 @@ public async Task HttpRetryTests(bool useRetryTransmissionHandler, ExportResult var endpoint = new Uri($"http://localhost:{testHttpPort}/v1/traces"); - var exporterOptions = new OtlpExporterOptions() { Endpoint = endpoint, TimeoutMilliseconds = 20000 }; + var exporterOptions = new OtlpExporterOptions() { Endpoint = endpoint, TimeoutMilliseconds = 20000, Protocol = OtlpExportProtocol.HttpProtobuf }; - var exportClient = new OtlpHttpTraceExportClient(exporterOptions, new HttpClient()); - - OtlpExporterTransmissionHandler transmissionHandler; - - // TODO: update this to configure via experimental environment variable. - if (useRetryTransmissionHandler) - { - transmissionHandler = new OtlpExporterRetryTransmissionHandler(exportClient, exporterOptions.TimeoutMilliseconds); - } - else - { - transmissionHandler = new OtlpExporterTransmissionHandler(exportClient, exporterOptions.TimeoutMilliseconds); - } + var configuration = new ConfigurationBuilder() + .AddInMemoryCollection(new Dictionary { [ExperimentalOptions.EnableInMemoryRetryEnvVar] = useRetryTransmissionHandler.ToString() }) + .Build(); - var otlpExporter = new OtlpTraceExporter(exporterOptions, new(), transmissionHandler); + var otlpExporter = new OtlpTraceExporter(exporterOptions, new SdkLimitOptions(), new ExperimentalOptions(configuration)); var activitySourceName = "otel.http.retry.test"; using var source = new ActivitySource(activitySourceName); From 69897ff5cb502dbd01b45f5204048a7108777d5a Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Tue, 12 Mar 2024 13:25:47 -0700 Subject: [PATCH 06/12] refactor --- .../Implementation/ExperimentalOptions.cs | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs index 42f6eea53d9..b9280beed22 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs @@ -37,12 +37,12 @@ public ExperimentalOptions(IConfiguration configuration) } /// - /// Gets or sets a value indicating whether log event attributes should be exported. + /// Gets a value indicating whether log event attributes should be exported. /// - public bool EmitLogEventAttributes { get; set; } = false; + public bool EmitLogEventAttributes { get; private set; } = false; /// - /// Gets or sets a value indicating whether retries should be enabled in case of transient errors. + /// Gets a value indicating whether retries should be enabled in case of transient errors. /// - public bool EnableInMemoryRetry { get; set; } = false; + public bool EnableInMemoryRetry { get; private set; } = false; } From 659e001e57d48e1619e790eaeb3ba795e95ee426 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Tue, 12 Mar 2024 14:21:35 -0700 Subject: [PATCH 07/12] address feedback --- .../Implementation/ExperimentalOptions.cs | 6 +++--- .../OtlpExporterOptions.cs | 2 ++ .../OtlpExporterOptionsExtensions.cs | 13 +++++++------ .../OtlpLogExporter.cs | 2 +- .../OtlpMetricExporter.cs | 2 +- .../OtlpMetricExporterExtensions.cs | 4 ---- .../OtlpTraceExporter.cs | 2 +- .../OtlpTraceExporterHelperExtensions.cs | 1 - .../OtlpExporterOptionsExtensionsTests.cs | 7 ++++--- 9 files changed, 19 insertions(+), 20 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs index b9280beed22..f640bcbf872 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs @@ -16,7 +16,7 @@ internal sealed class ExperimentalOptions public const string EmitLogEventEnvVar = "OTEL_DOTNET_EXPERIMENTAL_OTLP_EMIT_EVENT_LOG_ATTRIBUTES"; - public const string EnableInMemoryRetryEnvVar = "OTEL_DOTNET_EXPERIMENTAL_OTLP_ENABLE_RETRIES"; + public const string EnableInMemoryRetryEnvVar = "OTEL_DOTNET_EXPERIMENTAL_OTLP_ENABLE_INMEMORY_RETRY"; public ExperimentalOptions() : this(new ConfigurationBuilder().AddEnvironmentVariables().Build()) @@ -39,10 +39,10 @@ public ExperimentalOptions(IConfiguration configuration) /// /// Gets a value indicating whether log event attributes should be exported. /// - public bool EmitLogEventAttributes { get; private set; } = false; + public bool EmitLogEventAttributes { get; } /// /// Gets a value indicating whether retries should be enabled in case of transient errors. /// - public bool EnableInMemoryRetry { get; private set; } = false; + public bool EnableInMemoryRetry { get; } } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs index 0523b12d99a..9c912b6b731 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptions.cs @@ -11,6 +11,7 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Internal; using OpenTelemetry.Trace; @@ -225,6 +226,7 @@ public Func HttpClientFactory internal static void RegisterOtlpExporterOptionsFactory(IServiceCollection services) { services.RegisterOptionsFactory(CreateOtlpExporterOptions); + services.RegisterOptionsFactory(configuration => new ExperimentalOptions(configuration)); } internal static OtlpExporterOptions CreateOtlpExporterOptions( diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptionsExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptionsExtensions.cs index 584ea385903..34e5a09d597 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptionsExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpExporterOptionsExtensions.cs @@ -6,6 +6,7 @@ #endif using System.Reflection; using Grpc.Core; +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; #if NETSTANDARD2_1 || NET6_0_OR_GREATER using Grpc.Net.Client; @@ -88,7 +89,7 @@ public static THeaders GetHeaders(this OtlpExporterOptions options, Ac return headers; } - public static OtlpExporterTransmissionHandler GetTraceExportTransmissionHandler(this OtlpExporterOptions options, bool enableRetry = false) + public static OtlpExporterTransmissionHandler GetTraceExportTransmissionHandler(this OtlpExporterOptions options, ExperimentalOptions experimentalOptions) { var exportClient = GetTraceExportClient(options); @@ -99,12 +100,12 @@ public static THeaders GetHeaders(this OtlpExporterOptions options, Ac ? httpTraceExportClient.HttpClient.Timeout.TotalMilliseconds : options.TimeoutMilliseconds; - return enableRetry + return experimentalOptions.EnableInMemoryRetry ? new OtlpExporterRetryTransmissionHandler(exportClient, timeoutMilliseconds) : new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); } - public static OtlpExporterTransmissionHandler GetMetricsExportTransmissionHandler(this OtlpExporterOptions options, bool enableRetry = false) + public static OtlpExporterTransmissionHandler GetMetricsExportTransmissionHandler(this OtlpExporterOptions options, ExperimentalOptions experimentalOptions) { var exportClient = GetMetricsExportClient(options); @@ -115,19 +116,19 @@ public static THeaders GetHeaders(this OtlpExporterOptions options, Ac ? httpMetricsExportClient.HttpClient.Timeout.TotalMilliseconds : options.TimeoutMilliseconds; - return enableRetry + return experimentalOptions.EnableInMemoryRetry ? new OtlpExporterRetryTransmissionHandler(exportClient, timeoutMilliseconds) : new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); } - public static OtlpExporterTransmissionHandler GetLogsExportTransmissionHandler(this OtlpExporterOptions options, bool enableRetry = false) + public static OtlpExporterTransmissionHandler GetLogsExportTransmissionHandler(this OtlpExporterOptions options, ExperimentalOptions experimentalOptions) { var exportClient = GetLogExportClient(options); double timeoutMilliseconds = exportClient is OtlpHttpLogExportClient httpLogExportClient ? httpLogExportClient.HttpClient.Timeout.TotalMilliseconds : options.TimeoutMilliseconds; - return enableRetry + return experimentalOptions.EnableInMemoryRetry ? new OtlpExporterRetryTransmissionHandler(exportClient, timeoutMilliseconds) : new OtlpExporterTransmissionHandler(exportClient, timeoutMilliseconds); } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs index 6319389605e..8835965e2c1 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs @@ -62,7 +62,7 @@ internal OtlpLogExporter( OpenTelemetryProtocolExporterEventSource.Log.InvalidEnvironmentVariable(key, value); }; - this.transmissionHandler = transmissionHandler ?? exporterOptions.GetLogsExportTransmissionHandler(experimentalOptions!.EnableInMemoryRetry); + this.transmissionHandler = transmissionHandler ?? exporterOptions.GetLogsExportTransmissionHandler(experimentalOptions!); this.otlpLogRecordTransformer = new OtlpLogRecordTransformer(sdkLimitOptions!, experimentalOptions!); } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs index 7775d96b375..6784ce2ed1d 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs @@ -52,7 +52,7 @@ internal OtlpMetricExporter( OpenTelemetryProtocolExporterEventSource.Log.InvalidEnvironmentVariable(key, value); }; - this.transmissionHandler = transmissionHandler ?? options.GetMetricsExportTransmissionHandler(experimentalOptions.EnableInMemoryRetry); + this.transmissionHandler = transmissionHandler ?? options.GetMetricsExportTransmissionHandler(experimentalOptions); } internal OtlpResource.Resource ProcessResource => this.processResource ??= this.ParentProvider.GetResource().ToOtlpResource(); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs index 19aca16cf18..38cb1a44a66 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporterExtensions.cs @@ -61,8 +61,6 @@ public static MeterProviderBuilder AddOtlpExporter( OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); - services.RegisterOptionsFactory(configuration => new ExperimentalOptions(configuration)); - services.AddOptions(finalOptionsName).Configure( (readerOptions, config) => { @@ -141,8 +139,6 @@ public static MeterProviderBuilder AddOtlpExporter( { OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); - services.RegisterOptionsFactory(configuration => new ExperimentalOptions(configuration)); - services.AddOptions(finalOptionsName).Configure( (readerOptions, config) => { diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs index 48762563fcc..4e2ee7cebcb 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs @@ -52,7 +52,7 @@ internal OtlpTraceExporter( ConfigurationExtensions.LogInvalidEnvironmentVariable = OpenTelemetryProtocolExporterEventSource.Log.InvalidEnvironmentVariable; - this.transmissionHandler = transmissionHandler ?? exporterOptions.GetTraceExportTransmissionHandler(experimentalOptions.EnableInMemoryRetry); + this.transmissionHandler = transmissionHandler ?? exporterOptions.GetTraceExportTransmissionHandler(experimentalOptions); } internal OtlpResource.Resource ProcessResource => this.processResource ??= this.ParentProvider.GetResource().ToOtlpResource(); diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs index 78d716142fb..7ccbdd33472 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporterHelperExtensions.cs @@ -61,7 +61,6 @@ public static TracerProviderBuilder AddOtlpExporter( OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); services.RegisterOptionsFactory(configuration => new SdkLimitOptions(configuration)); - services.RegisterOptionsFactory(configuration => new ExperimentalOptions(configuration)); }); return builder.AddProcessor(sp => diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsExtensionsTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsExtensionsTests.cs index dd8464d9145..55d9e092bb7 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsExtensionsTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/OtlpExporterOptionsExtensionsTests.cs @@ -4,6 +4,7 @@ #if NETFRAMEWORK using System.Net.Http; #endif +using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Transmission; using Xunit; @@ -185,19 +186,19 @@ public void GetTransmissionHandler_InitializesCorrectExportClientAndTimeoutValue if (exportClientType == typeof(OtlpGrpcTraceExportClient) || exportClientType == typeof(OtlpHttpTraceExportClient)) { - var transmissionHandler = exporterOptions.GetTraceExportTransmissionHandler(); + var transmissionHandler = exporterOptions.GetTraceExportTransmissionHandler(new ExperimentalOptions()); AssertTransmissionHandlerProperties(transmissionHandler, exportClientType, expectedTimeoutMilliseconds); } else if (exportClientType == typeof(OtlpGrpcMetricsExportClient) || exportClientType == typeof(OtlpHttpMetricsExportClient)) { - var transmissionHandler = exporterOptions.GetMetricsExportTransmissionHandler(); + var transmissionHandler = exporterOptions.GetMetricsExportTransmissionHandler(new ExperimentalOptions()); AssertTransmissionHandlerProperties(transmissionHandler, exportClientType, expectedTimeoutMilliseconds); } else { - var transmissionHandler = exporterOptions.GetLogsExportTransmissionHandler(); + var transmissionHandler = exporterOptions.GetLogsExportTransmissionHandler(new ExperimentalOptions()); AssertTransmissionHandlerProperties(transmissionHandler, exportClientType, expectedTimeoutMilliseconds); } From b91a7337f501c28629e3b55daa524156e0a4d0d5 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Tue, 12 Mar 2024 15:08:48 -0700 Subject: [PATCH 08/12] rmv duplciate registration --- .../OtlpLogExporterHelperExtensions.cs | 1 - 1 file changed, 1 deletion(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs index 1f99374c324..dbf156c1a0b 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporterHelperExtensions.cs @@ -404,7 +404,6 @@ private static void RegisterOptions(IServiceCollection services) { OtlpExporterOptions.RegisterOtlpExporterOptionsFactory(services); services.RegisterOptionsFactory(configuration => new SdkLimitOptions(configuration)); - services.RegisterOptionsFactory(configuration => new ExperimentalOptions(configuration)); } private static T GetOptions( From 99ba7244578bba178d88bae2d6a01d41b09f9490 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Wed, 13 Mar 2024 14:31:45 -0700 Subject: [PATCH 09/12] address feedback --- .../Implementation/ExperimentalOptions.cs | 1 + 1 file changed, 1 insertion(+) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs index f640bcbf872..a9291a67773 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs @@ -43,6 +43,7 @@ public ExperimentalOptions(IConfiguration configuration) /// /// Gets a value indicating whether retries should be enabled in case of transient errors. + /// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#retry /// public bool EnableInMemoryRetry { get; } } From 87fdbb04ba6ec0ae14588972f0cf5e5ea179822c Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Wed, 13 Mar 2024 14:43:15 -0700 Subject: [PATCH 10/12] fix doc --- .../Implementation/ExperimentalOptions.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs index a9291a67773..da706eee65c 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs @@ -43,7 +43,7 @@ public ExperimentalOptions(IConfiguration configuration) /// /// Gets a value indicating whether retries should be enabled in case of transient errors. - /// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#retry + /// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#retry. /// public bool EnableInMemoryRetry { get; } } From 09a5dded15f5bfbfc5b63240b90d67717a0a056b Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Wed, 13 Mar 2024 14:44:30 -0700 Subject: [PATCH 11/12] add remarks --- .../Implementation/ExperimentalOptions.cs | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs index da706eee65c..a5587bb681b 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExperimentalOptions.cs @@ -42,8 +42,11 @@ public ExperimentalOptions(IConfiguration configuration) public bool EmitLogEventAttributes { get; } /// - /// Gets a value indicating whether retries should be enabled in case of transient errors. - /// https://github.com/open-telemetry/opentelemetry-specification/blob/main/specification/protocol/exporter.md#retry. + /// Gets a value indicating whether or not in-memory retry should be enabled for transient errors. /// + /// + /// Specification: . + /// public bool EnableInMemoryRetry { get; } } From 0b4496cab717577f0a7bfbec5a268caeda894726 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Wed, 13 Mar 2024 15:22:06 -0700 Subject: [PATCH 12/12] add changelog --- .../CHANGELOG.md | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md index e88f15d58dd..bbd390269d7 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/CHANGELOG.md @@ -39,6 +39,12 @@ to `null` will now result in an `ArgumentNullException` being thrown. ([#5434](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5434)) +* Introduced experimental support for automatically retrying export to the otlp + endpoint when transient network errors occur. Users can enable this feature by + setting `OTEL_DOTNET_EXPERIMENTAL_OTLP_ENABLE_INMEMORY_RETRY` environment + variable to true. + ([#5435](https://github.com/open-telemetry/opentelemetry-dotnet/pull/5435)) + ## 1.7.0 Released 2023-Dec-08