Skip to content

Commit c4d17e9

Browse files
authored
Handle HTTP 2XX responses as successful in OTLP exporters (#3623)
* Handle HTTP 2XX responses as successful in OTLP exporters * Add test cases for 2XX HTTP responses * Add CHANGELOG entry * Fix lint
1 parent 4bac02e commit c4d17e9

File tree

7 files changed

+43
-7
lines changed

7 files changed

+43
-7
lines changed

CHANGELOG.md

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,12 +7,15 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
77

88
## Unreleased
99

10+
- Handle HTTP 2XX responses as successful in OTLP exporters
11+
([#3623](https://github.com/open-telemetry/opentelemetry-python/pull/3623))
1012
- Improve Resource Detector timeout messaging
1113
([#3645](https://github.com/open-telemetry/opentelemetry-python/pull/3645))
1214

1315
## Version 1.22.0/0.43b0 (2023-12-15)
1416

15-
- Prometheus exporter sanitize info metric ([#3572](https://github.com/open-telemetry/opentelemetry-python/pull/3572))
17+
- Prometheus exporter sanitize info metric
18+
([#3572](https://github.com/open-telemetry/opentelemetry-python/pull/3572))
1619
- Remove Jaeger exporters
1720
([#3554](https://github.com/open-telemetry/opentelemetry-python/pull/3554))
1821
- Log stacktrace on `UNKNOWN` status OTLP export error

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/_log_exporter/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -146,7 +146,7 @@ def export(self, batch: Sequence[LogData]) -> LogExportResult:
146146

147147
resp = self._export(serialized_data)
148148
# pylint: disable=no-else-return
149-
if resp.status_code in (200, 202):
149+
if resp.ok:
150150
return LogExportResult.SUCCESS
151151
elif self._retryable(resp):
152152
_logger.warning(

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/metric_exporter/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -178,7 +178,7 @@ def export(
178178

179179
resp = self._export(serialized_data.SerializeToString())
180180
# pylint: disable=no-else-return
181-
if resp.status_code in (200, 202):
181+
if resp.ok:
182182
return MetricExportResult.SUCCESS
183183
elif self._retryable(resp):
184184
_logger.warning(

exporter/opentelemetry-exporter-otlp-proto-http/src/opentelemetry/exporter/otlp/proto/http/trace_exporter/__init__.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -144,7 +144,7 @@ def export(self, spans) -> SpanExportResult:
144144

145145
resp = self._export(serialized_data)
146146
# pylint: disable=no-else-return
147-
if resp.status_code in (200, 202):
147+
if resp.ok:
148148
return SpanExportResult.SUCCESS
149149
elif self._retryable(resp):
150150
_logger.warning(

exporter/opentelemetry-exporter-otlp-proto-http/tests/metrics/test_otlp_metrics_exporter.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
from logging import WARNING
1616
from os import environ
1717
from unittest import TestCase
18-
from unittest.mock import patch
18+
from unittest.mock import MagicMock, Mock, patch
1919

2020
from requests import Session
2121
from requests.models import Response
@@ -476,3 +476,14 @@ def test_exponential_explicit_bucket_histogram(self):
476476
OTLPMetricExporter()._preferred_aggregation[Histogram],
477477
ExplicitBucketHistogramAggregation,
478478
)
479+
480+
@patch.object(OTLPMetricExporter, "_export", return_value=Mock(ok=True))
481+
def test_2xx_status_code(self, mock_otlp_metric_exporter):
482+
"""
483+
Test that any HTTP 2XX code returns a successful result
484+
"""
485+
486+
self.assertEqual(
487+
OTLPMetricExporter().export(MagicMock()),
488+
MetricExportResult.SUCCESS,
489+
)

exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_log_exporter.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@
1616

1717
import unittest
1818
from typing import List
19-
from unittest.mock import MagicMock, patch
19+
from unittest.mock import MagicMock, Mock, patch
2020

2121
import requests
2222
import responses
@@ -34,6 +34,7 @@
3434
from opentelemetry.exporter.otlp.proto.http.version import __version__
3535
from opentelemetry.sdk._logs import LogData
3636
from opentelemetry.sdk._logs import LogRecord as SDKLogRecord
37+
from opentelemetry.sdk._logs.export import LogExportResult
3738
from opentelemetry.sdk.environment_variables import (
3839
OTEL_EXPORTER_OTLP_CERTIFICATE,
3940
OTEL_EXPORTER_OTLP_COMPRESSION,
@@ -262,3 +263,13 @@ def _get_sdk_log_data() -> List[LogData]:
262263
)
263264

264265
return [log1, log2, log3, log4]
266+
267+
@patch.object(OTLPLogExporter, "_export", return_value=Mock(ok=True))
268+
def test_2xx_status_code(self, mock_otlp_metric_exporter):
269+
"""
270+
Test that any HTTP 2XX code returns a successful result
271+
"""
272+
273+
self.assertEqual(
274+
OTLPLogExporter().export(MagicMock()), LogExportResult.SUCCESS
275+
)

exporter/opentelemetry-exporter-otlp-proto-http/tests/test_proto_span_exporter.py

Lines changed: 12 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,7 @@
1414

1515
import unittest
1616
from collections import OrderedDict
17-
from unittest.mock import Mock, patch
17+
from unittest.mock import MagicMock, Mock, patch
1818

1919
import requests
2020
import responses
@@ -42,6 +42,7 @@
4242
OTEL_EXPORTER_OTLP_TRACES_TIMEOUT,
4343
)
4444
from opentelemetry.sdk.trace import _Span
45+
from opentelemetry.sdk.trace.export import SpanExportResult
4546

4647
OS_ENV_ENDPOINT = "os.env.base"
4748
OS_ENV_CERTIFICATE = "os/env/base.crt"
@@ -239,3 +240,13 @@ def generate_delays(*args, **kwargs):
239240

240241
exporter.export([span])
241242
mock_sleep.assert_called_once_with(1)
243+
244+
@patch.object(OTLPSpanExporter, "_export", return_value=Mock(ok=True))
245+
def test_2xx_status_code(self, mock_otlp_metric_exporter):
246+
"""
247+
Test that any HTTP 2XX code returns a successful result
248+
"""
249+
250+
self.assertEqual(
251+
OTLPSpanExporter().export(MagicMock()), SpanExportResult.SUCCESS
252+
)

0 commit comments

Comments
 (0)