Skip to content

Don't print deferred backtraces into the logs #19061

@famfo

Description

@famfo

Description:

Currently, Synapse prints backtraces when a media download timeout is reached. Example:

1970-01-01 00:00:00,000 - synapse.media.media_repository - 966 - ERROR - GET-2713980 - Failed to fetch remote media <domain>/<id>
Traceback (most recent call last):
  File "/usr/local/lib/python3.12/site-packages/synapse/media/media_repository.py", line 921, in _federation_download_remote_file
    res = await self.client.federation_download_media(
          ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/synapse/federation/federation_client.py", line 1959, in federation_download_media
    return await self.transport_layer.federation_download_media(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/synapse/federation/transport/client.py", line 912, in federation_download_media
    return await self.client.federation_get_file(
           ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/synapse/http/matrixfederationclient.py", line 1758, in federation_get_file
    multipart_response = await make_deferred_yieldable(deferred)
                         ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/twisted/internet/defer.py", line 1187, in __iter__
    yield self
  File "/usr/local/lib/python3.12/site-packages/twisted/internet/defer.py", line 1092, in _runCallbacks
    current.result = callback(  # type: ignore[misc]
                     ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/twisted/internet/defer.py", line 824, in convertCancelled
    return toCall(result, timeout)
           ^^^^^^^^^^^^^^^^^^^^^^^
  File "/usr/local/lib/python3.12/site-packages/twisted/internet/defer.py", line 297, in _cancelledToTimedOutError
    raise TimeoutError(timeout, "Deferred")
twisted.internet.defer.TimeoutError: (60.0, 'Deferred')

The timeout is already logged and in general I think it makes sense to only show critical backtraces in the log since it clutters it a lot.

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions