Skip to content
Snippets Groups Projects
Commit e5537cf9 authored by Erik Johnston's avatar Erik Johnston Committed by Richard van der Hoff
Browse files

Limit concurrent AS joins

parent 43bb12e6
No related branches found
No related tags found
No related merge requests found
...@@ -31,7 +31,7 @@ from synapse.api.constants import ( ...@@ -31,7 +31,7 @@ from synapse.api.constants import (
) )
from synapse.api.errors import AuthError, SynapseError, Codes from synapse.api.errors import AuthError, SynapseError, Codes
from synapse.types import UserID, RoomID from synapse.types import UserID, RoomID
from synapse.util.async import Linearizer from synapse.util.async import Linearizer, Limiter
from synapse.util.distributor import user_left_room, user_joined_room from synapse.util.distributor import user_left_room, user_joined_room
...@@ -68,6 +68,7 @@ class RoomMemberHandler(object): ...@@ -68,6 +68,7 @@ class RoomMemberHandler(object):
self.event_creation_hander = hs.get_event_creation_handler() self.event_creation_hander = hs.get_event_creation_handler()
self.member_linearizer = Linearizer(name="member") self.member_linearizer = Linearizer(name="member")
self.member_limiter = Limiter(3)
self.clock = hs.get_clock() self.clock = hs.get_clock()
self.spam_checker = hs.get_spam_checker() self.spam_checker = hs.get_spam_checker()
...@@ -241,18 +242,23 @@ class RoomMemberHandler(object): ...@@ -241,18 +242,23 @@ class RoomMemberHandler(object):
): ):
key = (room_id,) key = (room_id,)
with (yield self.member_linearizer.queue(key)): as_id = object()
result = yield self._update_membership( if requester.app_service:
requester, as_id = requester.app_service.id
target,
room_id, with (yield self.member_limiter.queue(as_id)):
action, with (yield self.member_linearizer.queue(key)):
txn_id=txn_id, result = yield self._update_membership(
remote_room_hosts=remote_room_hosts, requester,
third_party_signed=third_party_signed, target,
ratelimit=ratelimit, room_id,
content=content, action,
) txn_id=txn_id,
remote_room_hosts=remote_room_hosts,
third_party_signed=third_party_signed,
ratelimit=ratelimit,
content=content,
)
defer.returnValue(result) defer.returnValue(result)
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment