Skip to content
This repository was archived by the owner on Apr 26, 2024. It is now read-only.

Commit 81eb4ab

Browse files
author
David Robertson
committed
Update rate limiter in the event persister logic
Simpler, cleaner, faster, stronger.
1 parent e16294e commit 81eb4ab

File tree

5 files changed

+17
-26
lines changed

5 files changed

+17
-26
lines changed

synapse/federation/federation_server.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -667,7 +667,7 @@ async def on_send_join_request(
667667
await self._room_member_handler._join_rate_per_room_limiter.ratelimit( # type: ignore[has-type]
668668
requester=None,
669669
key=room_id,
670-
update=self.hs.persists_events_for_room(room_id),
670+
update=False,
671671
)
672672

673673
event, context = await self._on_send_membership_event(

synapse/handlers/message.py

Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -461,6 +461,7 @@ def __init__(self, hs: "HomeServer"):
461461
)
462462
self._events_shard_config = self.config.worker.events_shard_config
463463
self._instance_name = hs.get_instance_name()
464+
self._notifier = hs.get_notifier()
464465

465466
self.room_prejoin_state_types = self.hs.config.api.room_prejoin_state
466467

@@ -1511,6 +1512,18 @@ async def persist_and_notify_client_event(
15111512
original_event and event.sender != original_event.sender
15121513
)
15131514

1515+
if event.type == EventTypes.Member and event.membership == Membership.JOIN:
1516+
(
1517+
current_membership,
1518+
_,
1519+
) = await self.store.get_local_current_membership_for_user_in_room(
1520+
event.state_key, event.room_id
1521+
)
1522+
if current_membership != Membership.JOIN:
1523+
self._notifier.notify_user_joined_room(
1524+
event.event_id, event.room_id
1525+
)
1526+
15141527
await self.request_ratelimiter.ratelimit(
15151528
requester, is_admin_redaction=is_admin_redaction
15161529
)

synapse/handlers/room_member.py

Lines changed: 3 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -105,6 +105,7 @@ def __init__(self, hs: "HomeServer"):
105105
)
106106
# TODO: find a better place to keep this Ratelimiter.
107107
# It needs to be
108+
# - written to by event persistence code
108109
# - written to by something which can snoop on replication streams
109110
# - read by the RoomMemberHandler to rate limit joins from local users
110111
# - read by the FederationServer to rate limit make_joins and send_joins from
@@ -404,9 +405,7 @@ async def _local_membership_update(
404405
if newly_joined and ratelimit:
405406
await self._join_rate_limiter_local.ratelimit(requester)
406407
await self._join_rate_per_room_limiter.ratelimit(
407-
requester,
408-
key=room_id,
409-
update=self.hs.persists_events_for_room(room_id),
408+
requester, key=room_id, update=False
410409
)
411410

412411
result_event = await self.event_creation_handler.handle_new_client_event(
@@ -859,7 +858,7 @@ async def update_membership_locked(
859858
await self._join_rate_per_room_limiter.ratelimit(
860859
requester,
861860
key=room_id,
862-
update=self.hs.persists_events_for_room(room_id),
861+
update=False,
863862
)
864863

865864
inviter = await self._get_inviter(target.to_string(), room_id)

synapse/replication/http/send_event.py

Lines changed: 0 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@
1717

1818
from twisted.web.server import Request
1919

20-
from synapse.api.constants import EventTypes, Membership
2120
from synapse.api.room_versions import KNOWN_ROOM_VERSIONS
2221
from synapse.events import EventBase, make_event_from_dict
2322
from synapse.events.snapshot import EventContext
@@ -73,7 +72,6 @@ def __init__(self, hs: "HomeServer"):
7372
self.store = hs.get_datastores().main
7473
self._storage_controllers = hs.get_storage_controllers()
7574
self.clock = hs.get_clock()
76-
self._notifier = hs.get_notifier()
7775

7876
@staticmethod
7977
async def _serialize_payload( # type: ignore[override]
@@ -140,16 +138,6 @@ async def _handle_request( # type: ignore[override]
140138
"Got event to send with ID: %s into room: %s", event.event_id, event.room_id
141139
)
142140

143-
if event.type == EventTypes.Member and event.membership == Membership.JOIN:
144-
(
145-
current_membership,
146-
_,
147-
) = await self.store.get_local_current_membership_for_user_in_room(
148-
event.state_key, event.room_id
149-
)
150-
if current_membership != Membership.JOIN:
151-
self._notifier.notify_user_joined_room(event.event_id, event.room_id)
152-
153141
event = await self.event_creation_handler.persist_and_notify_client_event(
154142
requester, event, context, ratelimit=ratelimit, extra_users=extra_users
155143
)

synapse/server.py

Lines changed: 0 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -827,12 +827,3 @@ def get_request_ratelimiter(self) -> RequestRatelimiter:
827827
self.config.ratelimiting.rc_message,
828828
self.config.ratelimiting.rc_admin_redaction,
829829
)
830-
831-
def persists_events_for_room(self, room_id: str) -> bool:
832-
"""Is this worker responsible for persisting events in the given room?
833-
834-
Or does it ask another worker to do that for us?"""
835-
return (
836-
self.get_instance_name()
837-
== self.config.worker.events_shard_config.get_instance(room_id)
838-
)

0 commit comments

Comments
 (0)