diff --git a/.changelog/5655.fixed b/.changelog/5655.fixed new file mode 100644 index 00000000000..70b570c6563 --- /dev/null +++ b/.changelog/5655.fixed @@ -0,0 +1 @@ +`opentelemetry-sdk`: add validation for export_timeout_millis <= 0 in PeriodicExportingMetricReader diff --git a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/__init__.py b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/__init__.py index cb1040537d3..7559689c1e3 100644 --- a/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/__init__.py +++ b/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/__init__.py @@ -480,6 +480,11 @@ def _after_in_child() -> None: f"interval value {self._export_interval_millis} is invalid \ and needs to be larger than zero." ) + if self._export_timeout_millis <= 0: + raise ValueError( + f"timeout value {self._export_timeout_millis} is invalid \ + and needs to be larger than zero." + ) def _at_fork_reinit(self): self._daemon_thread = Thread( diff --git a/opentelemetry-sdk/tests/metrics/test_periodic_exporting_metric_reader.py b/opentelemetry-sdk/tests/metrics/test_periodic_exporting_metric_reader.py index 76ad37b8dbc..746ad841358 100644 --- a/opentelemetry-sdk/tests/metrics/test_periodic_exporting_metric_reader.py +++ b/opentelemetry-sdk/tests/metrics/test_periodic_exporting_metric_reader.py @@ -212,6 +212,26 @@ def test_ticker_value_exception_on_negative(self): export_interval_millis=-100, ) + def test_timeout_value_exception_on_zero(self): + exporter = FakeMetricsExporter() + exporter.export = Mock() + self.assertRaises( + ValueError, + PeriodicExportingMetricReader, + exporter, + export_timeout_millis=0, + ) + + def test_timeout_value_exception_on_negative(self): + exporter = FakeMetricsExporter() + exporter.export = Mock() + self.assertRaises( + ValueError, + PeriodicExportingMetricReader, + exporter, + export_timeout_millis=-100, + ) + @pytest.mark.flaky(max_runs=3, min_passes=1) def test_ticker_collects_metrics(self): exporter = FakeMetricsExporter()