Reinstate linearizer for federation_server.on_context_state_request

This commit is contained in:
Richard van der Hoff 2018-04-20 11:10:04 +01:00
parent 60f6014bb7
commit 0c280d4d99
1 changed files with 11 additions and 5 deletions

View File

@ -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))