Skip to content

Commit 1b7e161

Browse files
ocelotlAlex Boten
andauthored
Make shutdown function be called always (#2405)
* Make shutdown function be called always Fixes #2404 * Fix warning handling * Log specific metric reader Co-authored-by: Alex Boten <[email protected]>
1 parent f0583e3 commit 1b7e161

File tree

2 files changed

+33
-5
lines changed

2 files changed

+33
-5
lines changed

opentelemetry-sdk/src/opentelemetry/sdk/_metrics/__init__.py

Lines changed: 9 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -198,21 +198,25 @@ def shutdown(self):
198198
_logger.warning("shutdown can only be called once")
199199
return False
200200

201-
result = True
201+
overall_result = True
202202

203203
for metric_reader in self._sdk_config.metric_readers:
204-
result = result and metric_reader.shutdown()
204+
metric_reader_result = metric_reader.shutdown()
205205

206-
if not result:
207-
_logger.warning("A MetricReader failed to shutdown")
206+
if not metric_reader_result:
207+
_logger.warning(
208+
"MetricReader {metric_reader} failed to shutdown"
209+
)
210+
211+
overall_result = overall_result and metric_reader_result
208212

209213
self._shutdown = True
210214

211215
if self._atexit_handler is not None:
212216
unregister(self._atexit_handler)
213217
self._atexit_handler = None
214218

215-
return result
219+
return overall_result
216220

217221
def get_meter(
218222
self,

opentelemetry-sdk/tests/metrics/test_metrics.py

Lines changed: 24 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,30 @@ def test_get_meter_duplicate(self):
9090
self.assertIs(meter1, meter2)
9191
self.assertIsNot(meter1, meter3)
9292

93+
def test_shutdown(self):
94+
95+
mock_metric_reader_0 = Mock(**{"shutdown.return_value": False})
96+
mock_metric_reader_1 = Mock(**{"shutdown.return_value": True})
97+
98+
meter_provider = MeterProvider(
99+
metric_readers=[mock_metric_reader_0, mock_metric_reader_1]
100+
)
101+
102+
self.assertFalse(meter_provider.shutdown())
103+
mock_metric_reader_0.shutdown.assert_called_once()
104+
mock_metric_reader_1.shutdown.assert_called_once()
105+
106+
mock_metric_reader_0 = Mock(**{"shutdown.return_value": True})
107+
mock_metric_reader_1 = Mock(**{"shutdown.return_value": True})
108+
109+
meter_provider = MeterProvider(
110+
metric_readers=[mock_metric_reader_0, mock_metric_reader_1]
111+
)
112+
113+
self.assertTrue(meter_provider.shutdown())
114+
mock_metric_reader_0.shutdown.assert_called_once()
115+
mock_metric_reader_1.shutdown.assert_called_once()
116+
93117
def test_shutdown_subsequent_calls(self):
94118
"""
95119
No subsequent attempts to get a `Meter` are allowed after calling

0 commit comments

Comments
 (0)