Skip to content

Commit 3e3bdd8

Browse files
fix(config): scope deflate compression to OTLP HTTP
Signed-off-by: Asish Kumar <officialasishkumar@gmail.com>
1 parent 2007531 commit 3e3bdd8

4 files changed

Lines changed: 37 additions & 10 deletions

File tree

opentelemetry-sdk/src/opentelemetry/sdk/_configuration/_common.py

Lines changed: 10 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -80,18 +80,25 @@ def _parse_headers(
8080

8181

8282
def _map_compression(
83-
value: Optional[str], compression_enum: type
83+
value: Optional[str],
84+
compression_enum: type,
85+
*,
86+
allow_deflate: bool = False,
8487
) -> Optional[object]:
8588
"""Map a compression string to the given Compression enum value."""
8689
if value is None or value.lower() == "none":
8790
return None
8891
if value.lower() == "gzip":
8992
return compression_enum.Gzip # type: ignore[attr-defined]
90-
if value.lower() == "deflate" and hasattr(compression_enum, "Deflate"):
93+
if (
94+
value.lower() == "deflate"
95+
and allow_deflate
96+
and hasattr(compression_enum, "Deflate")
97+
):
9198
return compression_enum.Deflate # type: ignore[attr-defined]
9299

93100
supported_values = ["'gzip'", "'none'"]
94-
if hasattr(compression_enum, "Deflate"):
101+
if allow_deflate and hasattr(compression_enum, "Deflate"):
95102
supported_values.insert(1, "'deflate'")
96103

97104
raise ConfigurationError(

opentelemetry-sdk/src/opentelemetry/sdk/_configuration/_meter_provider.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -286,7 +286,9 @@ def _create_otlp_http_metric_exporter(
286286
"Install it with: pip install opentelemetry-exporter-otlp-proto-http"
287287
) from exc
288288

289-
compression = _map_compression(config.compression, Compression)
289+
compression = _map_compression(
290+
config.compression, Compression, allow_deflate=True
291+
)
290292
headers = _parse_headers(config.headers, config.headers_list)
291293
timeout = (config.timeout / 1000.0) if config.timeout is not None else None
292294
preferred_temporality = _map_temporality(config.temporality_preference)

opentelemetry-sdk/src/opentelemetry/sdk/_configuration/_tracer_provider.py

Lines changed: 3 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,9 @@ def _create_otlp_http_span_exporter(
9595
"Install it with: pip install opentelemetry-exporter-otlp-proto-http"
9696
) from exc
9797

98-
compression = _map_compression(config.compression, Compression)
98+
compression = _map_compression(
99+
config.compression, Compression, allow_deflate=True
100+
)
99101
headers = _parse_headers(config.headers, config.headers_list)
100102
timeout = (config.timeout / 1000.0) if config.timeout is not None else None
101103

opentelemetry-sdk/tests/_configuration/test_common.py

Lines changed: 21 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -162,15 +162,29 @@ def test_gzip_maps_to_gzip(self):
162162
_map_compression("gzip", _CompressionWithDeflate), "gzip"
163163
)
164164

165-
def test_deflate_maps_when_supported(self):
165+
def test_deflate_maps_when_enabled(self):
166166
self.assertEqual(
167-
_map_compression("deflate", _CompressionWithDeflate),
167+
_map_compression(
168+
"deflate", _CompressionWithDeflate, allow_deflate=True
169+
),
168170
"deflate",
169171
)
170172

171-
def test_deflate_raises_when_unsupported(self):
173+
def test_deflate_raises_by_default(self):
172174
with self.assertRaises(ConfigurationError) as ctx:
173-
_map_compression("deflate", _CompressionWithoutDeflate)
175+
_map_compression("deflate", _CompressionWithDeflate)
176+
177+
self.assertEqual(
178+
str(ctx.exception),
179+
"Unsupported compression value 'deflate'. Supported values: "
180+
"'gzip', 'none'.",
181+
)
182+
183+
def test_deflate_raises_when_http_enum_lacks_support(self):
184+
with self.assertRaises(ConfigurationError) as ctx:
185+
_map_compression(
186+
"deflate", _CompressionWithoutDeflate, allow_deflate=True
187+
)
174188

175189
self.assertEqual(
176190
str(ctx.exception),
@@ -180,7 +194,9 @@ def test_deflate_raises_when_unsupported(self):
180194

181195
def test_http_error_message_includes_deflate(self):
182196
with self.assertRaises(ConfigurationError) as ctx:
183-
_map_compression("brotli", _CompressionWithDeflate)
197+
_map_compression(
198+
"brotli", _CompressionWithDeflate, allow_deflate=True
199+
)
184200

185201
self.assertEqual(
186202
str(ctx.exception),

0 commit comments

Comments
 (0)