Skip to content

Commit e2edc9d

Browse files
authored
Check exceptions in force_flush too (#2671)
1 parent 3658e21 commit e2edc9d

File tree

1 file changed

+27
-4
lines changed
  • opentelemetry-sdk/src/opentelemetry/sdk/_metrics/_internal

1 file changed

+27
-4
lines changed

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

Lines changed: 27 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -373,12 +373,35 @@ def __init__(
373373
def force_flush(self, timeout_millis: float = 10_000) -> bool:
374374
deadline_ns = _time_ns() + timeout_millis * 10**6
375375

376+
metric_reader_error = {}
377+
376378
for metric_reader in self._sdk_config.metric_readers:
377379
current_ts = _time_ns()
378-
if current_ts >= deadline_ns:
379-
raise Exception("Timed out while flushing metric readers")
380-
metric_reader.collect(
381-
timeout_millis=(deadline_ns - current_ts) / 10**6
380+
try:
381+
if current_ts >= deadline_ns:
382+
raise Exception("Timed out while flushing metric readers")
383+
metric_reader.collect(
384+
timeout_millis=(deadline_ns - current_ts) / 10**6
385+
)
386+
387+
# pylint: disable=broad-except
388+
except Exception as error:
389+
390+
metric_reader_error[metric_reader] = error
391+
392+
if metric_reader_error:
393+
394+
metric_reader_error_string = "\n".join(
395+
[
396+
f"{metric_reader.__class__.__name__}: {repr(error)}"
397+
for metric_reader, error in metric_reader_error.items()
398+
]
399+
)
400+
401+
raise Exception(
402+
"MeterProvider.force_flush failed because the following "
403+
"metric readers failed during collect:\n"
404+
f"{metric_reader_error_string}"
382405
)
383406
return True
384407

0 commit comments

Comments
 (0)