summary refs log tree commit diff
path: root/synapse/storage/roommember.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2019-01-23 20:05:44 +0000
committerErik Johnston <erik@matrix.org>2019-01-23 20:07:47 +0000
commit7c288c22500e2045d36a29c38d2671fad6484e30 (patch)
tree39bbd259e15dfae1daf77003f7eff4bb9e6ce5b5 /synapse/storage/roommember.py
parentRemove unnecessary '_sign_event' (diff)
downloadsynapse-7c288c22500e2045d36a29c38d2671fad6484e30.tar.xz
Clarify the invite flows
Diffstat (limited to 'synapse/storage/roommember.py')
-rw-r--r--synapse/storage/roommember.py11
1 files changed, 7 insertions, 4 deletions
diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py
index c7488f4259..40b13de80b 100644
--- a/synapse/storage/roommember.py
+++ b/synapse/storage/roommember.py
@@ -588,10 +588,13 @@ class RoomMemberStore(RoomMemberWorkerStore):
             )
 
             # We update the local_invites table only if the event is "current",
-            # i.e., its something that has just happened.
-            # The only current event that can also be an outlier is if its an
-            # invite that has come in across federation.
-            is_new_state = not backfilled
+            # i.e., its something that has just happened. If the event is an
+            # outlier it is only current if its a "new remote event", like a
+            # remote invite or a rejection of a remote invite.
+            is_new_state = not backfilled and (
+                not event.internal_metadata.is_outlier()
+                or event.internal_metadata.is_new_remote_event()
+            )
             is_mine = self.hs.is_mine_id(event.state_key)
             if is_new_state and is_mine:
                 if event.membership == Membership.INVITE: