summary refs log tree commit diff
diff options
context:
space:
mode:
authorDavid Robertson <davidr@element.io>2021-12-07 16:31:16 +0000
committerDavid Robertson <davidr@element.io>2021-12-07 18:23:49 +0000
commit0d0783caa35c8483c5a9b2198a35e4a358d03115 (patch)
tree3a94e0d4081bb889c3552efb8ab3e4bf14d64988
parentPull out `_fetch_membership_event_at` (diff)
downloadsynapse-0d0783caa35c8483c5a9b2198a35e4a358d03115.tar.xz
Always call `old_mem_ev`---exactly once.
I claim this is identical to the existing behaviour. Proof: consider the
boolean `room_id in sync_result_builder.joined_room_ids or has_join`.
If this is true, we make the first call to `_fetch_membership_event_at`.
Otherwise:

- `room_id not in sync_result_builder.joined_room_ids` and `not has_join`.
- The former means we continue on to inspect `events[-1].membership`.
- This is not `"join"`, or else `room_id in
  sync_result_builder.joined_room_ids` would be true.
- `has_join` is False, so we hit the `else` branch and make the second
  call to `_fetch_membership_event_at`.

So, assuming we continue beyond the first `continue`, we always call
fetch the old membership event exactly once. Do it up front to make the
reader's life easier.
-rw-r--r--synapse/handlers/sync.py10
1 files changed, 3 insertions, 7 deletions
diff --git a/synapse/handlers/sync.py b/synapse/handlers/sync.py
index a2045412d8..fc2562cd7b 100644
--- a/synapse/handlers/sync.py
+++ b/synapse/handlers/sync.py
@@ -1855,11 +1855,10 @@ class SyncHandler:
                 # User is in the room so we don't need to do the invite/leave checks
                 continue
 
+            old_mem_ev = await self._fetch_membership_event_at(
+                room_id, user_id, since_token
+            )
             if room_id in sync_result_builder.joined_room_ids or has_join:
-                old_mem_ev = await self._fetch_membership_event_at(
-                    room_id, user_id, since_token
-                )
-
                 # debug for #4422
                 if has_join and old_mem_ev is not None:
                     issue4422_logger.debug(
@@ -1883,9 +1882,6 @@ class SyncHandler:
                 if has_join:
                     newly_left_rooms.append(room_id)
                 else:
-                    old_mem_ev = await self._fetch_membership_event_at(
-                        room_id, user_id, since_token
-                    )
                     if (
                         old_mem_ev is not None
                         and old_mem_ev.membership == Membership.JOIN