summary refs log tree commit diff
path: root/synapse
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-04-04 18:02:48 +0100
committerErik Johnston <erik@matrix.org>2016-04-04 18:02:48 +0100
commit0c53d750e7145f57ed97c544efdb846cc9e37b67 (patch)
tree1a001c069a1e4f6351c2cd486025d3c4c2536d8d /synapse
parentAdd upgrade path, rename table (diff)
downloadsynapse-0c53d750e7145f57ed97c544efdb846cc9e37b67.tar.xz
Docs and indents
Diffstat (limited to 'synapse')
-rw-r--r--synapse/handlers/room_member.py5
-rw-r--r--synapse/storage/roommember.py18
-rw-r--r--synapse/storage/schema/delta/31/invites.sql22
3 files changed, 31 insertions, 14 deletions
diff --git a/synapse/handlers/room_member.py b/synapse/handlers/room_member.py
index 98e346d48e..f1c3e90ecd 100644
--- a/synapse/handlers/room_member.py
+++ b/synapse/handlers/room_member.py
@@ -400,7 +400,10 @@ class RoomMemberHandler(BaseHandler):
 
     @defer.inlineCallbacks
     def get_inviter(self, user_id, room_id):
-        invite = yield self.store.get_inviter(user_id=user_id, room_id=room_id)
+        invite = yield self.store.get_invite_for_user_in_room(
+            user_id=user_id,
+            room_id=room_id,
+        )
         if invite:
             defer.returnValue(UserID.from_string(invite.sender))
 
diff --git a/synapse/storage/roommember.py b/synapse/storage/roommember.py
index abe5942744..36456a75fc 100644
--- a/synapse/storage/roommember.py
+++ b/synapse/storage/roommember.py
@@ -66,11 +66,15 @@ class RoomMemberStore(SQLBaseStore):
                 self.get_invited_rooms_for_user.invalidate, (event.state_key,)
             )
 
-            is_mine = self.hs.is_mine_id(event.state_key)
+            # 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 and (
                 not event.internal_metadata.is_outlier()
                 or event.internal_metadata.is_invite_from_remote()
             )
+            is_mine = self.hs.is_mine_id(event.state_key)
             if is_new_state and is_mine:
                 if event.membership == Membership.INVITE:
                     self._simple_insert_txn(
@@ -163,7 +167,17 @@ class RoomMemberStore(SQLBaseStore):
         )
 
     @defer.inlineCallbacks
-    def get_inviter(self, user_id, room_id):
+    def get_invite_for_user_in_room(self, user_id, room_id):
+        """Gets the invite for the given user and room
+
+        Args:
+            user_id (str)
+            room_id (str)
+
+        Returns:
+            Deferred: Resolves to either a RoomsForUser or None if no invite was
+                found.
+        """
         invites = yield self.get_invited_rooms_for_user(user_id)
         for invite in invites:
             if invite.room_id == room_id:
diff --git a/synapse/storage/schema/delta/31/invites.sql b/synapse/storage/schema/delta/31/invites.sql
index 1c83430da4..2c57846d5a 100644
--- a/synapse/storage/schema/delta/31/invites.sql
+++ b/synapse/storage/schema/delta/31/invites.sql
@@ -26,17 +26,17 @@ CREATE TABLE local_invites(
 
 -- Insert all invites for local users into new `invites` table
 INSERT INTO local_invites SELECT
-    stream_ordering as stream_id,
-    sender as inviter,
-    state_key as invitee,
-    event_id,
-    room_id,
-    NULL as locally_rejected,
-    NULL as replaced_by
-FROM events
-NATURAL JOIN current_state_events
-NATURAL JOIN room_memberships
-WHERE membership = 'invite'  AND state_key IN (SELECT name FROM users);
+        stream_ordering as stream_id,
+        sender as inviter,
+        state_key as invitee,
+        event_id,
+        room_id,
+        NULL as locally_rejected,
+        NULL as replaced_by
+    FROM events
+    NATURAL JOIN current_state_events
+    NATURAL JOIN room_memberships
+    WHERE membership = 'invite'  AND state_key IN (SELECT name FROM users);
 
 CREATE INDEX local_invites_id ON local_invites(stream_id);
 CREATE INDEX local_invites_for_user_idx ON local_invites(invitee, locally_rejected, replaced_by, room_id);