Reinstate linearizer for federation_server.on_context_state_request
This commit is contained in:
parent
60f6014bb7
commit
0c280d4d99
|
@ -211,11 +211,17 @@ class FederationServer(FederationBase):
|
||||||
if not in_room:
|
if not in_room:
|
||||||
raise AuthError(403, "Host not in room.")
|
raise AuthError(403, "Host not in room.")
|
||||||
|
|
||||||
resp = yield self._state_resp_cache.wrap(
|
# we grab the linearizer to protect ourselves from servers which hammer
|
||||||
(room_id, event_id),
|
# us. In theory we might already have the response to this query
|
||||||
self._on_context_state_request_compute,
|
# in the cache so we could return it without waiting for the linearizer
|
||||||
room_id, event_id,
|
# - but that's non-trivial to get right, and anyway somewhat defeats
|
||||||
)
|
# the point of the linearizer.
|
||||||
|
with (yield self._server_linearizer.queue((origin, room_id))):
|
||||||
|
resp = yield self._state_resp_cache.wrap(
|
||||||
|
(room_id, event_id),
|
||||||
|
self._on_context_state_request_compute,
|
||||||
|
room_id, event_id,
|
||||||
|
)
|
||||||
|
|
||||||
defer.returnValue((200, resp))
|
defer.returnValue((200, resp))
|
||||||
|
|
||||||
|
|
Loading…
Reference in New Issue