diff --git a/changelog.d/20100.bugfix b/changelog.d/20100.bugfix new file mode 100644 index 00000000000..1c73ada4da9 --- /dev/null +++ b/changelog.d/20100.bugfix @@ -0,0 +1 @@ +Improve server concurrency by opening local media thumbnails asynchronously. Contributed by @guillemo12. \ No newline at end of file diff --git a/synapse/media/thumbnailer.py b/synapse/media/thumbnailer.py index a75a4207509..8e90aeb8def 100644 --- a/synapse/media/thumbnailer.py +++ b/synapse/media/thumbnailer.py @@ -31,6 +31,7 @@ from synapse.config.repository import THUMBNAIL_SUPPORTED_MEDIA_FORMAT_MAP from synapse.http.server import respond_with_json from synapse.http.site import SynapseRequest +from synapse.logging.context import defer_to_thread from synapse.logging.opentracing import trace from synapse.media._base import ( FileInfo, @@ -533,10 +534,11 @@ async def select_or_generate_local_thumbnail( assert file_info.thumbnail is not None if for_federation: + f = await defer_to_thread(self.hs.get_reactor(), open, file_path, "rb") await respond_with_multipart_responder( self.hs.get_clock(), request, - FileResponder(self.hs, open(file_path, "rb")), + FileResponder(self.hs, f), file_info.thumbnail.type, file_info.thumbnail.length, None,