Skip to content

Flaky opentelemetry-sdk tests #5113

@xrmx

Description

@xrmx

It looks like there something off regarding the shutdown of a span processor and some issues with the metric exporter as seen in the following logs. The failures and the errors we have below looks unrelated though.

=================================== FAILURES ===================================
__________ TestEventLoggerProvider.test_event_logger_provider_default __________

self = <tests.events.test_events.TestEventLoggerProvider testMethod=test_event_logger_provider_default>

    def test_event_logger_provider_default(self):
        logger_provider = LoggerProvider()
        set_logger_provider(logger_provider)
        event_logger_provider = EventLoggerProvider()
    
>       self.assertEqual(
            event_logger_provider._logger_provider,
            logger_provider,
        )
E       AssertionError: <opentelemetry.sdk._logs._internal.LoggerProvider object at 0x7f4f07441690> != <opentelemetry.sdk._logs._internal.LoggerProvider object at 0x7f4f075e3070>

opentelemetry-sdk/tests/events/test_events.py:45: AssertionError
------------------------------ Captured log call -------------------------------
WARNING  opentelemetry._logs._internal:__init__.py:425 Overriding of current LoggerProvider is not allowed
________ TestParentChildSpanException.test_child_parent_span_exception _________

self = <tests.trace.test_trace.TestParentChildSpanException testMethod=test_child_parent_span_exception>

    def test_child_parent_span_exception(self):
        """
        Tests that a child span does not have its status set to ERROR when a
        parent span raises an exception and the parent span has its
        ``record_exception`` and ``set_status_on_exception`` attributes
        set to ``False``.
        """
    
        set_tracer_provider(TracerProvider())
        tracer = get_tracer(__name__)
    
        exception = Exception("exception")
    
        child_span = None
        try:
            with tracer.start_as_current_span(
                "parent",
                record_exception=False,
                set_status_on_exception=False,
            ) as parent_span:
                with tracer.start_as_current_span(
                    "child",
                ) as child_span:
                    pass
                raise exception
    
        except Exception:  # pylint: disable=broad-exception-caught
            pass
    
>       self.assertIsNotNone(child_span)
E       AssertionError: unexpectedly None

opentelemetry-sdk/tests/trace/test_trace.py:2297: AssertionError
------------------------------ Captured log call -------------------------------
WARNING  opentelemetry.trace:__init__.py:567 Overriding of current TracerProvider is not allowed
________ TestParentChildSpanException.test_parent_child_span_exception _________

self = <tests.trace.test_trace.TestParentChildSpanException testMethod=test_parent_child_span_exception>

    def test_parent_child_span_exception(self):
        """
        Tests that a parent span has its status set to ERROR when a child span
        raises an exception even when the child span has its
        ``record_exception`` and ``set_status_on_exception`` attributes
        set to ``False``.
        """
    
        set_tracer_provider(TracerProvider())
        tracer = get_tracer(__name__)
    
        exception = Exception("exception")
    
        exception_type = exception.__class__.__name__
        exception_message = exception.args[0]
    
        child_span = None
        try:
            with tracer.start_as_current_span(
                "parent",
            ) as parent_span:
                with tracer.start_as_current_span(
                    "child",
                    record_exception=False,
                    set_status_on_exception=False,
                ) as child_span:
                    raise exception
    
        except Exception:  # pylint: disable=broad-exception-caught
            pass
    
>       self.assertIsNotNone(child_span)
E       AssertionError: unexpectedly None

opentelemetry-sdk/tests/trace/test_trace.py:2249: AssertionError

=========================== short test summary info ============================
FAILED opentelemetry-sdk/tests/events/test_events.py::TestEventLoggerProvider::test_event_logger_provider_default
FAILED opentelemetry-sdk/tests/trace/test_trace.py::TestParentChildSpanException::test_child_parent_span_exception
FAILED opentelemetry-sdk/tests/trace/test_trace.py::TestParentChildSpanException::test_parent_child_span_exception
================= 3 failed, 960 passed, 84 warnings in 24.26s ==================
Exception ignored in atexit callback: <bound method TracerProvider.shutdown of <opentelemetry.sdk.trace.TracerProvider object at 0x7f4ef4c2be50>>
Traceback (most recent call last):
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py", line 1443, in shutdown
    self._active_span_processor.shutdown()
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py", line 200, in shutdown
    sp.shutdown()
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py", line 302, in shutdown
    self._submit_and_await(lambda sp: sp.shutdown)
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py", line 279, in _submit_and_await
    future = self._executor.submit(func(sp), *args, **kwargs)
  File "/opt/hostedtoolcache/Python/3.10.20/x64/lib/python3.10/concurrent/futures/thread.py", line 167, in submit
Error:     raise RuntimeError('cannot schedule new futures after shutdown')
RuntimeError: cannot schedule new futures after shutdown
Exception ignored in atexit callback: <bound method TracerProvider.shutdown of <opentelemetry.sdk.trace.TracerProvider object at 0x7f4ef4c50160>>
Traceback (most recent call last):
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py", line 1443, in shutdown
    self._active_span_processor.shutdown()
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py", line 200, in shutdown
    sp.shutdown()
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py", line 302, in shutdown
    self._submit_and_await(lambda sp: sp.shutdown)
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/trace/__init__.py", line 279, in _submit_and_await
    future = self._executor.submit(func(sp), *args, **kwargs)
  File "/opt/hostedtoolcache/Python/3.10.20/x64/lib/python3.10/concurrent/futures/thread.py", line 167, in submit
Error:     raise RuntimeError('cannot schedule new futures after shutdown')
RuntimeError: cannot schedule new futures after shutdown
Can't shutdown multiple times
Can't shutdown multiple times
Exception while exporting metrics
Traceback (most recent call last):
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/__init__.py", line 575, in _receive_metrics
    self._exporter.export(
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/__init__.py", line 176, in export
    self.out.write(self.formatter(metrics_data))
ValueError: I/O operation on closed file.
Exception while exporting metrics
Traceback (most recent call last):
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/__init__.py", line 575, in _receive_metrics
    self._exporter.export(
  File "/home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/src/opentelemetry/sdk/metrics/_internal/export/__init__.py", line 176, in export
    self.out.write(self.formatter(metrics_data))
ValueError: I/O operation on closed file.
py310-test-opentelemetry-sdk: exit 1 (24.96 seconds) /home/runner/work/opentelemetry-python/opentelemetry-python> pytest /home/runner/work/opentelemetry-python/opentelemetry-python/opentelemetry-sdk/tests -ra pid=2423
  py310-test-opentelemetry-sdk: FAIL code 1 (26.39=setup[1.43]+cmd[24.96] seconds)
  evaluation failed :( (27.37 seconds)

Example run https://github.com/open-telemetry/opentelemetry-python/actions/runs/24402949044/job/71282531351?pr=4646

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions