summary refs log tree commit diff
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2017-01-20 17:13:24 +0000
committerErik Johnston <erik@matrix.org>2017-01-20 17:13:24 +0000
commit5d2134d485be6c9e4e5881d099ad7dee5229e1cd (patch)
tree596d1a4b26c4ff0b8dc73a095813735db7295fae
parentInsert delta of current_state_events to be more efficient (diff)
downloadsynapse-5d2134d485be6c9e4e5881d099ad7dee5229e1cd.tar.xz
Comments
-rw-r--r--synapse/storage/events.py27
1 files changed, 19 insertions, 8 deletions
diff --git a/synapse/storage/events.py b/synapse/storage/events.py
index 9f57760ab0..2fd9f4045b 100644
--- a/synapse/storage/events.py
+++ b/synapse/storage/events.py
@@ -483,6 +483,10 @@ class EventsStore(SQLBaseStore):
                 retcols=["event_id", "type", "state_key"],
             )
 
+            # Figure out what has changed (if anything). Then we simply delete
+            # and readd the keys that have been changed.
+            # This saves us from deleting and reinserting thousands of rows for
+            # large rooms.
             existing_events = set(row["event_id"] for row in existing_state_rows)
             new_events = set(ev_id for ev_id in current_state.itervalues())
             changed_events = existing_events ^ new_events
@@ -492,14 +496,6 @@ class EventsStore(SQLBaseStore):
                     [(ev_id,) for ev_id in changed_events],
                 )
 
-                # Add an entry to the current_state_resets table to record the point
-                # where we clobbered the current state
-                self._simple_insert_txn(
-                    txn,
-                    table="current_state_resets",
-                    values={"event_stream_ordering": max_stream_order}
-                )
-
                 events_to_insert = (new_events - existing_events)
                 to_insert = [
                     (key, ev_id) for key, ev_id in current_state.iteritems()
@@ -519,6 +515,13 @@ class EventsStore(SQLBaseStore):
                     ],
                 )
 
+                # Invalidate the various caches
+
+                # Figure out the changes of membership to invalidate the
+                # `get_rooms_for_user` cache.
+                # We find out which membership events we may have deleted
+                # and which we have added, then we invlidate the caches for all
+                # those users.
                 members_changed = set(
                     row["state_key"] for row in existing_state_rows
                     if row["event_id"] in changed_events
@@ -534,6 +537,14 @@ class EventsStore(SQLBaseStore):
 
                 txn.call_after(self.get_users_in_room.invalidate, (room_id,))
 
+                # Add an entry to the current_state_resets table to record the point
+                # where we clobbered the current state
+                self._simple_insert_txn(
+                    txn,
+                    table="current_state_resets",
+                    values={"event_stream_ordering": max_stream_order}
+                )
+
         for room_id, new_extrem in new_forward_extremeties.items():
             self._simple_delete_txn(
                 txn,