From 890115bdad4ff698f83d543e90ade68880fa1923 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Thu, 8 Feb 2024 14:56:38 -0800 Subject: [PATCH 1/3] otlp export client refactor to enable retries --- .../ExportClient/BaseOtlpGrpcExportClient.cs | 4 +- .../ExportClient/BaseOtlpHttpExportClient.cs | 18 +++-- .../ExportClient/ExportClientGrpcResponse.cs | 17 +++++ .../ExportClient/ExportClientHttpResponse.cs | 30 ++++++++ .../ExportClient/ExportClientResponse.cs | 22 ++++++ .../ExportClient/IExportClient.cs | 6 +- .../ExportClient/OtlpGrpcLogExportClient.cs | 9 ++- .../OtlpGrpcMetricsExportClient.cs | 9 ++- .../ExportClient/OtlpGrpcTraceExportClient.cs | 9 ++- .../Retry/OtlpExporterTransmissionHandler.cs | 76 ------------------- .../OtlpLogExporter.cs | 2 +- .../OtlpMetricExporter.cs | 2 +- .../OtlpTraceExporter.cs | 2 +- .../OtlpHttpTraceExportClientTests.cs | 2 +- .../TestExportClient.cs | 12 ++- 15 files changed, 117 insertions(+), 103 deletions(-) create mode 100644 src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientGrpcResponse.cs create mode 100644 src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientHttpResponse.cs create mode 100644 src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientResponse.cs delete mode 100644 src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Retry/OtlpExporterTransmissionHandler.cs diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpGrpcExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpGrpcExportClient.cs index dd9390004ae..4bb48cb8fe6 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpGrpcExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpGrpcExportClient.cs @@ -13,6 +13,8 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClie /// Type of export request. internal abstract class BaseOtlpGrpcExportClient : IExportClient { + protected static readonly ExportClientGrpcResponse SuccessExportResponse = new ExportClientGrpcResponse(success: true, deadlineUtc: null, exception: null); + protected BaseOtlpGrpcExportClient(OtlpExporterOptions options) { Guard.ThrowIfNull(options); @@ -38,7 +40,7 @@ protected BaseOtlpGrpcExportClient(OtlpExporterOptions options) internal int TimeoutMilliseconds { get; } /// - public abstract bool SendExportRequest(TRequest request, CancellationToken cancellationToken = default); + public abstract ExportClientResponse SendExportRequest(TRequest request, CancellationToken cancellationToken = default); /// public virtual bool Shutdown(int timeoutMilliseconds) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs index 076cdb7f506..ae923e04c3a 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs @@ -12,6 +12,8 @@ namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClie /// Type of export request. internal abstract class BaseOtlpHttpExportClient : IExportClient { + private static readonly ExportClientHttpResponse SuccessExportResponse = new ExportClientHttpResponse(success: true, deadlineUtc: null, response: null, exception: null); + protected BaseOtlpHttpExportClient(OtlpExporterOptions options, HttpClient httpClient, string signalPath) { Guard.ThrowIfNull(options); @@ -34,24 +36,28 @@ protected BaseOtlpHttpExportClient(OtlpExporterOptions options, HttpClient httpC internal IReadOnlyDictionary Headers { get; } /// - public bool SendExportRequest(TRequest request, CancellationToken cancellationToken = default) + public ExportClientResponse SendExportRequest(TRequest request, CancellationToken cancellationToken = default) { + DateTime deadline = DateTime.UtcNow.AddMilliseconds(this.HttpClient.Timeout.TotalMilliseconds); + + HttpResponseMessage httpResponseMessage = null; try { using var httpRequest = this.CreateHttpRequest(request); - using var httpResponse = this.SendHttpRequest(httpRequest, cancellationToken); + httpResponseMessage = this.SendHttpRequest(httpRequest, cancellationToken); + + httpResponseMessage?.EnsureSuccessStatusCode(); - httpResponse?.EnsureSuccessStatusCode(); + // We do not need to return back response and deadline for successful response so using cached value. + return SuccessExportResponse; } catch (HttpRequestException ex) { OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); - return false; + return new ExportClientHttpResponse(success: false, deadlineUtc: deadline, response: httpResponseMessage, exception: ex); } - - return true; } /// diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientGrpcResponse.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientGrpcResponse.cs new file mode 100644 index 00000000000..cadecc5b3c8 --- /dev/null +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientGrpcResponse.cs @@ -0,0 +1,17 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#nullable enable + +namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; + +internal sealed class ExportClientGrpcResponse : ExportClientResponse +{ + public ExportClientGrpcResponse( + bool success, + DateTime? deadlineUtc, + Exception? exception) + : base(success, deadlineUtc, exception) + { + } +} diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientHttpResponse.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientHttpResponse.cs new file mode 100644 index 00000000000..a3c6e581b93 --- /dev/null +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientHttpResponse.cs @@ -0,0 +1,30 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#nullable enable + +using System.Net; +#if NETFRAMEWORK +using System.Net.Http; +#endif +using System.Net.Http.Headers; + +namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; + +internal sealed class ExportClientHttpResponse : ExportClientResponse +{ + public ExportClientHttpResponse( + bool success, + DateTime? deadlineUtc, + HttpResponseMessage? response, + Exception? exception) + : base(success, deadlineUtc, exception) + { + this.Headers = response?.Headers; + this.StatusCode = response?.StatusCode; + } + + public HttpResponseHeaders? Headers { get; } + + public HttpStatusCode? StatusCode { get; } +} diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientResponse.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientResponse.cs new file mode 100644 index 00000000000..2113e96d870 --- /dev/null +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/ExportClientResponse.cs @@ -0,0 +1,22 @@ +// Copyright The OpenTelemetry Authors +// SPDX-License-Identifier: Apache-2.0 + +#nullable enable + +namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; + +internal abstract class ExportClientResponse +{ + protected ExportClientResponse(bool success, DateTime? deadlineUtc, Exception? exception) + { + this.Success = success; + this.Exception = exception; + this.DeadlineUtc = deadlineUtc; + } + + public bool Success { get; } + + public Exception? Exception { get; } + + public DateTime? DeadlineUtc { get; } +} diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/IExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/IExportClient.cs index 7cb2822b478..a13a63e743c 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/IExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/IExportClient.cs @@ -1,6 +1,8 @@ // Copyright The OpenTelemetry Authors // SPDX-License-Identifier: Apache-2.0 +#nullable enable + namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; /// Export client interface. @@ -12,8 +14,8 @@ internal interface IExportClient /// /// The request to send to the server. /// An optional token for canceling the call. - /// True if the request has been sent successfully, otherwise false. - bool SendExportRequest(TRequest request, CancellationToken cancellationToken = default); + /// . + ExportClientResponse SendExportRequest(TRequest request, CancellationToken cancellationToken = default); /// /// Method for shutting down the export client. diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcLogExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcLogExportClient.cs index 9790be3b850..4caf8a7d6ae 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcLogExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcLogExportClient.cs @@ -26,21 +26,22 @@ public OtlpGrpcLogExportClient(OtlpExporterOptions options, OtlpCollector.LogsSe } /// - public override bool SendExportRequest(OtlpCollector.ExportLogsServiceRequest request, CancellationToken cancellationToken = default) + public override ExportClientResponse SendExportRequest(OtlpCollector.ExportLogsServiceRequest request, CancellationToken cancellationToken = default) { var deadline = DateTime.UtcNow.AddMilliseconds(this.TimeoutMilliseconds); try { this.logsClient.Export(request, headers: this.Headers, deadline: deadline, cancellationToken: cancellationToken); + + // We do not need to return back response and deadline for successful response so using cached value. + return SuccessExportResponse; } catch (RpcException ex) { OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); - return false; + return new ExportClientGrpcResponse(success: false, deadlineUtc: deadline, exception: ex); } - - return true; } } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcMetricsExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcMetricsExportClient.cs index 117334d8347..666413c874f 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcMetricsExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcMetricsExportClient.cs @@ -26,21 +26,22 @@ public OtlpGrpcMetricsExportClient(OtlpExporterOptions options, OtlpCollector.Me } /// - public override bool SendExportRequest(OtlpCollector.ExportMetricsServiceRequest request, CancellationToken cancellationToken = default) + public override ExportClientResponse SendExportRequest(OtlpCollector.ExportMetricsServiceRequest request, CancellationToken cancellationToken = default) { var deadline = DateTime.UtcNow.AddMilliseconds(this.TimeoutMilliseconds); try { this.metricsClient.Export(request, headers: this.Headers, deadline: deadline, cancellationToken: cancellationToken); + + // We do not need to return back response and deadline for successful response so using cached value. + return SuccessExportResponse; } catch (RpcException ex) { OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); - return false; + return new ExportClientGrpcResponse(success: false, deadlineUtc: deadline, exception: ex); } - - return true; } } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcTraceExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcTraceExportClient.cs index 8210587698a..6918189f5c7 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcTraceExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/OtlpGrpcTraceExportClient.cs @@ -26,21 +26,22 @@ public OtlpGrpcTraceExportClient(OtlpExporterOptions options, OtlpCollector.Trac } /// - public override bool SendExportRequest(OtlpCollector.ExportTraceServiceRequest request, CancellationToken cancellationToken = default) + public override ExportClientResponse SendExportRequest(OtlpCollector.ExportTraceServiceRequest request, CancellationToken cancellationToken = default) { var deadline = DateTime.UtcNow.AddMilliseconds(this.TimeoutMilliseconds); try { this.traceClient.Export(request, headers: this.Headers, deadline: deadline, cancellationToken: cancellationToken); + + // We do not need to return back response and deadline for successful response so using cached value. + return SuccessExportResponse; } catch (RpcException ex) { OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); - return false; + return new ExportClientGrpcResponse(success: false, deadlineUtc: deadline, exception: ex); } - - return true; } } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Retry/OtlpExporterTransmissionHandler.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Retry/OtlpExporterTransmissionHandler.cs deleted file mode 100644 index 10ae69e7a3f..00000000000 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/Retry/OtlpExporterTransmissionHandler.cs +++ /dev/null @@ -1,76 +0,0 @@ -// Copyright The OpenTelemetry Authors -// SPDX-License-Identifier: Apache-2.0 - -#nullable enable - -using OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.ExportClient; - -namespace OpenTelemetry.Exporter.OpenTelemetryProtocol.Implementation.Retry; - -internal class OtlpExporterTransmissionHandler -{ - internal IExportClient? ExportClient; - - public OtlpExporterOptions? Options { get; internal set; } - - /// - /// Sends export request to the server. - /// - /// The request to send to the server. - /// True if the request is sent successfully or else false. - public virtual bool SubmitRequest(T request) - { - try - { - return this.ExportClient != null && this.ExportClient.SendExportRequest(request); - } - catch (Exception ex) - { - OpenTelemetryProtocolExporterEventSource.Log.ExportMethodException(ex); - return this.OnSubmitRequestExceptionThrown(request, ex); - } - } - - /// - /// Retries sending request to the server. - /// - /// The request to send to the server. - /// Exception encountered when trying to send request. - /// True if the request is sent successfully or else false. - protected virtual bool RetryRequest(T request, out Exception? exception) - { - try - { - var result = this.ExportClient != null && this.ExportClient.SendExportRequest(request); - exception = null; - return result; - } - catch (Exception ex) - { - OpenTelemetryProtocolExporterEventSource.Log.ExportMethodException(ex, isRetry: true); - exception = ex; - return false; - } - } - - /// - /// Callback to call when encountered exception while sending request to server. - /// - /// The request that was attempted to send to the server. - /// Exception that was encountered during request processing. - /// True or False, based on the implementation of handling errors. - protected virtual bool OnSubmitRequestExceptionThrown(T request, Exception exception) - { - return this.OnHandleDroppedRequest(request); - } - - /// - /// Action to take when dropping request. - /// - /// The request that was attempted to send to the server. - /// True or False, based on the implementation. - protected virtual bool OnHandleDroppedRequest(T request) - { - return false; - } -} diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs index 6577cbfae95..7ee6bf74f3c 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpLogExporter.cs @@ -89,7 +89,7 @@ public override ExportResult Export(in Batch logRecordBatch) { request = this.otlpLogRecordTransformer.BuildExportRequest(this.ProcessResource, logRecordBatch); - if (!this.exportClient.SendExportRequest(request)) + if (!this.exportClient.SendExportRequest(request).Success) { return ExportResult.Failure; } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs index 8a65a26ad01..ecc97994166 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpMetricExporter.cs @@ -72,7 +72,7 @@ public override ExportResult Export(in Batch metrics) { request.AddMetrics(this.ProcessResource, metrics); - if (!this.exportClient.SendExportRequest(request)) + if (!this.exportClient.SendExportRequest(request).Success) { return ExportResult.Failure; } diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs index 9e3ce7d283c..5febb7f4d01 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/OtlpTraceExporter.cs @@ -80,7 +80,7 @@ public override ExportResult Export(in Batch activityBatch) { request.AddBatch(this.sdkLimitOptions, this.ProcessResource, activityBatch); - if (!this.exportClient.SendExportRequest(request)) + if (!this.exportClient.SendExportRequest(request).Success) { return ExportResult.Failure; } diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/OtlpHttpTraceExportClientTests.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/OtlpHttpTraceExportClientTests.cs index a952490ca7b..ad216916c1f 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/OtlpHttpTraceExportClientTests.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/Implementation/ExportClient/OtlpHttpTraceExportClientTests.cs @@ -135,7 +135,7 @@ void RunTest(Batch batch) var httpRequest = testHttpHandler.HttpRequestMessage; // Assert - Assert.True(result); + Assert.True(result.Success); Assert.NotNull(httpRequest); Assert.Equal(HttpMethod.Post, httpRequest.Method); Assert.Equal("http://localhost:4317/", httpRequest.RequestUri.AbsoluteUri); diff --git a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/TestExportClient.cs b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/TestExportClient.cs index e9b538c8f41..c16a4f1665a 100644 --- a/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/TestExportClient.cs +++ b/test/OpenTelemetry.Exporter.OpenTelemetryProtocol.Tests/TestExportClient.cs @@ -13,7 +13,7 @@ internal class TestExportClient(bool throwException = false) : IExportClient< public bool ThrowException { get; set; } = throwException; - public bool SendExportRequest(T request, CancellationToken cancellationToken = default) + public ExportClientResponse SendExportRequest(T request, CancellationToken cancellationToken = default) { if (this.ThrowException) { @@ -21,7 +21,7 @@ public bool SendExportRequest(T request, CancellationToken cancellationToken = d } this.SendExportRequestCalled = true; - return true; + return new TestExportClientResponse(true, null, null); } public bool Shutdown(int timeoutMilliseconds) @@ -29,4 +29,12 @@ public bool Shutdown(int timeoutMilliseconds) this.ShutdownCalled = true; return true; } + + private class TestExportClientResponse : ExportClientResponse + { + public TestExportClientResponse(bool success, DateTime? deadline, Exception exception) + : base(success, deadline, exception) + { + } + } } From 2b5f5f62e425bba3bcfef4e3a0f1f250e9e4f177 Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Thu, 8 Feb 2024 15:02:33 -0800 Subject: [PATCH 2/3] refactor --- .../ExportClient/BaseOtlpHttpExportClient.cs | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs index ae923e04c3a..4a7505f2516 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs @@ -39,15 +39,20 @@ protected BaseOtlpHttpExportClient(OtlpExporterOptions options, HttpClient httpC public ExportClientResponse SendExportRequest(TRequest request, CancellationToken cancellationToken = default) { DateTime deadline = DateTime.UtcNow.AddMilliseconds(this.HttpClient.Timeout.TotalMilliseconds); - - HttpResponseMessage httpResponseMessage = null; try { using var httpRequest = this.CreateHttpRequest(request); - httpResponseMessage = this.SendHttpRequest(httpRequest, cancellationToken); + using var httpResponse = this.SendHttpRequest(httpRequest, cancellationToken); - httpResponseMessage?.EnsureSuccessStatusCode(); + try + { + httpResponse.EnsureSuccessStatusCode(); + } + catch (HttpRequestException ex) + { + return new ExportClientHttpResponse(success: false, deadlineUtc: deadline, response: httpResponse, ex); + } // We do not need to return back response and deadline for successful response so using cached value. return SuccessExportResponse; From 5fb05a612cb8848e4e0e438eefd17eb31cc3cd5f Mon Sep 17 00:00:00 2001 From: Vishwesh Bankwar Date: Thu, 8 Feb 2024 16:31:29 -0800 Subject: [PATCH 3/3] fix --- .../Implementation/ExportClient/BaseOtlpHttpExportClient.cs | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs index 4a7505f2516..56f0118aa87 100644 --- a/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs +++ b/src/OpenTelemetry.Exporter.OpenTelemetryProtocol/Implementation/ExportClient/BaseOtlpHttpExportClient.cs @@ -61,7 +61,7 @@ public ExportClientResponse SendExportRequest(TRequest request, CancellationToke { OpenTelemetryProtocolExporterEventSource.Log.FailedToReachCollector(this.Endpoint, ex); - return new ExportClientHttpResponse(success: false, deadlineUtc: deadline, response: httpResponseMessage, exception: ex); + return new ExportClientHttpResponse(success: false, deadlineUtc: deadline, response: null, exception: ex); } }