From 6002debbde185a62690b6c556c2d44cb665f1264 Mon Sep 17 00:00:00 2001 From: Erik Johnston Date: Wed, 25 Jun 2025 13:35:03 +0100 Subject: [PATCH] Timeout Linearizer --- synapse/handlers/message.py | 16 ++++++++++++++-- synapse/util/__init__.py | 3 ++- 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/synapse/handlers/message.py b/synapse/handlers/message.py index 5d6ee6996f..6f31900443 100644 --- a/synapse/handlers/message.py +++ b/synapse/handlers/message.py @@ -76,7 +76,13 @@ from synapse.types import ( create_requester, ) from synapse.types.state import StateFilter -from synapse.util import json_decoder, json_encoder, log_failure, unwrapFirstError +from synapse.util import ( + Duration, + json_decoder, + json_encoder, + log_failure, + unwrapFirstError, +) from synapse.util.async_helpers import Linearizer, gather_results from synapse.util.caches.expiringcache import ExpiringCache from synapse.util.metrics import measure_func @@ -506,7 +512,13 @@ class EventCreationHandler: # We limit concurrent event creation for a room to 1. This prevents state resolution # from occurring when sending bursts of events to a local room - self.limiter = Linearizer(max_count=1, name="room_event_creation_limit") + self.limiter = Linearizer( + max_count=1, + name="room_event_creation_limit", + # We timeout queued requests after 90 seconds, as the client will + # likely have timed out by then. + timeout=90 * Duration.SECOND_MS, + ) self._bulk_push_rule_evaluator = hs.get_bulk_push_rule_evaluator() diff --git a/synapse/util/__init__.py b/synapse/util/__init__.py index bd4d20accb..b95aa32726 100644 --- a/synapse/util/__init__.py +++ b/synapse/util/__init__.py @@ -59,7 +59,8 @@ class Duration: """Helper class that holds constants for common time durations in milliseconds.""" - MINUTE_MS = 60 * 1000 + SECOND_MS = 1000 + MINUTE_MS = 60 * SECOND_MS HOUR_MS = 60 * MINUTE_MS DAY_MS = 24 * HOUR_MS