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

Commit 313955b

Browse files
authored
Revert "Faster joins: filter out non local events when a room doesn't have its full state (#14404)"
This reverts commit 1526ff3.
1 parent 1526ff3 commit 313955b

File tree

5 files changed

+13
-43
lines changed

5 files changed

+13
-43
lines changed

changelog.d/14404.misc

Lines changed: 0 additions & 1 deletion
This file was deleted.

synapse/federation/sender/per_destination_queue.py

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -505,7 +505,6 @@ async def _catch_up_transmission_loop(self) -> None:
505505
new_pdus = await filter_events_for_server(
506506
self._storage_controllers,
507507
self._destination,
508-
self._server_name,
509508
new_pdus,
510509
redact=False,
511510
)

synapse/handlers/federation.py

Lines changed: 5 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -379,7 +379,6 @@ async def _maybe_backfill_inner(
379379
filtered_extremities = await filter_events_for_server(
380380
self._storage_controllers,
381381
self.server_name,
382-
self.server_name,
383382
events_to_check,
384383
redact=False,
385384
check_history_visibility_only=True,
@@ -1232,9 +1231,7 @@ async def get_state_ids_for_pdu(self, room_id: str, event_id: str) -> List[str]:
12321231
async def on_backfill_request(
12331232
self, origin: str, room_id: str, pdu_list: List[str], limit: int
12341233
) -> List[EventBase]:
1235-
# We allow partially joined rooms since in this case we are filtering out
1236-
# non-local events in `filter_events_for_server`.
1237-
await self._event_auth_handler.assert_host_in_room(room_id, origin, True)
1234+
await self._event_auth_handler.assert_host_in_room(room_id, origin)
12381235

12391236
# Synapse asks for 100 events per backfill request. Do not allow more.
12401237
limit = min(limit, 100)
@@ -1255,7 +1252,7 @@ async def on_backfill_request(
12551252
)
12561253

12571254
events = await filter_events_for_server(
1258-
self._storage_controllers, origin, self.server_name, events
1255+
self._storage_controllers, origin, events
12591256
)
12601257

12611258
return events
@@ -1286,7 +1283,7 @@ async def get_persisted_pdu(
12861283
await self._event_auth_handler.assert_host_in_room(event.room_id, origin)
12871284

12881285
events = await filter_events_for_server(
1289-
self._storage_controllers, origin, self.server_name, [event]
1286+
self._storage_controllers, origin, [event]
12901287
)
12911288
event = events[0]
12921289
return event
@@ -1299,9 +1296,7 @@ async def on_get_missing_events(
12991296
latest_events: List[str],
13001297
limit: int,
13011298
) -> List[EventBase]:
1302-
# We allow partially joined rooms since in this case we are filtering out
1303-
# non-local events in `filter_events_for_server`.
1304-
await self._event_auth_handler.assert_host_in_room(room_id, origin, True)
1299+
await self._event_auth_handler.assert_host_in_room(room_id, origin)
13051300

13061301
# Only allow up to 20 events to be retrieved per request.
13071302
limit = min(limit, 20)
@@ -1314,7 +1309,7 @@ async def on_get_missing_events(
13141309
)
13151310

13161311
missing_events = await filter_events_for_server(
1317-
self._storage_controllers, origin, self.server_name, missing_events
1312+
self._storage_controllers, origin, missing_events
13181313
)
13191314

13201315
return missing_events

synapse/visibility.py

Lines changed: 3 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -563,8 +563,7 @@ def get_effective_room_visibility_from_state(state: StateMap[EventBase]) -> str:
563563

564564
async def filter_events_for_server(
565565
storage: StorageControllers,
566-
target_server_name: str,
567-
local_server_name: str,
566+
server_name: str,
568567
events: List[EventBase],
569568
redact: bool = True,
570569
check_history_visibility_only: bool = False,
@@ -604,7 +603,7 @@ def check_event_is_visible(
604603
# if the server is either in the room or has been invited
605604
# into the room.
606605
for ev in memberships.values():
607-
assert get_domain_from_id(ev.state_key) == target_server_name
606+
assert get_domain_from_id(ev.state_key) == server_name
608607

609608
memtype = ev.membership
610609
if memtype == Membership.JOIN:
@@ -623,24 +622,6 @@ def check_event_is_visible(
623622
# to no users having been erased.
624623
erased_senders = {}
625624

626-
# Filter out non-local events when we are in the middle of a partial join, since our servers
627-
# list can be out of date and we could leak events to servers not in the room anymore.
628-
# This can also be true for local events but we consider it to be an acceptable risk.
629-
630-
# We do this check as a first step and before retrieving membership events because
631-
# otherwise a room could be fully joined after we retrieve those, which would then bypass
632-
# this check but would base the filtering on an outdated view of the membership events.
633-
634-
partial_state_invisible_events = set()
635-
if not check_history_visibility_only:
636-
for e in events:
637-
sender_domain = get_domain_from_id(e.sender)
638-
if (
639-
sender_domain != local_server_name
640-
and await storage.main.is_partial_state_room(e.room_id)
641-
):
642-
partial_state_invisible_events.add(e)
643-
644625
# Let's check to see if all the events have a history visibility
645626
# of "shared" or "world_readable". If that's the case then we don't
646627
# need to check membership (as we know the server is in the room).
@@ -655,7 +636,7 @@ def check_event_is_visible(
655636
if event_to_history_vis[e.event_id]
656637
not in (HistoryVisibility.SHARED, HistoryVisibility.WORLD_READABLE)
657638
],
658-
target_server_name,
639+
server_name,
659640
)
660641

661642
to_return = []
@@ -664,10 +645,6 @@ def check_event_is_visible(
664645
visible = check_event_is_visible(
665646
event_to_history_vis[e.event_id], event_to_memberships.get(e.event_id, {})
666647
)
667-
668-
if e in partial_state_invisible_events:
669-
visible = False
670-
671648
if visible and not erased:
672649
to_return.append(e)
673650
elif redact:

tests/test_visibility.py

Lines changed: 5 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -61,7 +61,7 @@ def test_filtering(self) -> None:
6161

6262
filtered = self.get_success(
6363
filter_events_for_server(
64-
self._storage_controllers, "test_server", "hs", events_to_filter
64+
self._storage_controllers, "test_server", events_to_filter
6565
)
6666
)
6767

@@ -83,7 +83,7 @@ def test_filter_outlier(self) -> None:
8383
self.assertEqual(
8484
self.get_success(
8585
filter_events_for_server(
86-
self._storage_controllers, "remote_hs", "hs", [outlier]
86+
self._storage_controllers, "remote_hs", [outlier]
8787
)
8888
),
8989
[outlier],
@@ -94,7 +94,7 @@ def test_filter_outlier(self) -> None:
9494

9595
filtered = self.get_success(
9696
filter_events_for_server(
97-
self._storage_controllers, "remote_hs", "local_hs", [outlier, evt]
97+
self._storage_controllers, "remote_hs", [outlier, evt]
9898
)
9999
)
100100
self.assertEqual(len(filtered), 2, f"expected 2 results, got: {filtered}")
@@ -106,7 +106,7 @@ def test_filter_outlier(self) -> None:
106106
# be redacted)
107107
filtered = self.get_success(
108108
filter_events_for_server(
109-
self._storage_controllers, "other_server", "local_hs", [outlier, evt]
109+
self._storage_controllers, "other_server", [outlier, evt]
110110
)
111111
)
112112
self.assertEqual(filtered[0], outlier)
@@ -141,7 +141,7 @@ def test_erased_user(self) -> None:
141141
# ... and the filtering happens.
142142
filtered = self.get_success(
143143
filter_events_for_server(
144-
self._storage_controllers, "test_server", "local_hs", events_to_filter
144+
self._storage_controllers, "test_server", events_to_filter
145145
)
146146
)
147147

0 commit comments

Comments
 (0)