summary refs log tree commit diff
path: root/synapse/storage/events.py
diff options
context:
space:
mode:
authorErik Johnston <erik@matrix.org>2016-02-10 11:25:32 +0000
committerErik Johnston <erik@matrix.org>2016-02-10 11:25:32 +0000
commitf7ef5c1d57617f4bd0d40251fdd3145a82a47742 (patch)
tree5e93b2013aa788f52ea61fd5271204c411f9abfa /synapse/storage/events.py
parentMerge pull request #532 from floviolleau/floviolleau/documentation (diff)
parentRename functions (diff)
downloadsynapse-f7ef5c1d57617f4bd0d40251fdd3145a82a47742.tar.xz
Merge pull request #568 from matrix-org/erikj/unread_notif
	Atomically persit push actions when we persist the event
Diffstat (limited to 'synapse/storage/events.py')
-rw-r--r--synapse/storage/events.py26
1 files changed, 16 insertions, 10 deletions
diff --git a/synapse/storage/events.py b/synapse/storage/events.py
index c6ed54721c..3a5c6ee4b1 100644
--- a/synapse/storage/events.py
+++ b/synapse/storage/events.py
@@ -205,23 +205,29 @@ class EventsStore(SQLBaseStore):
     @log_function
     def _persist_events_txn(self, txn, events_and_contexts, backfilled,
                             is_new_state=True):
-
-        # Remove the any existing cache entries for the event_ids
-        for event, _ in events_and_contexts:
+        depth_updates = {}
+        for event, context in events_and_contexts:
+            # Remove the any existing cache entries for the event_ids
             txn.call_after(self._invalidate_get_event_cache, event.event_id)
-
             if not backfilled:
                 txn.call_after(
                     self._events_stream_cache.entity_has_changed,
                     event.room_id, event.internal_metadata.stream_ordering,
                 )
 
-        depth_updates = {}
-        for event, _ in events_and_contexts:
-            if event.internal_metadata.is_outlier():
-                continue
-            depth_updates[event.room_id] = max(
-                event.depth, depth_updates.get(event.room_id, event.depth)
+            if not event.internal_metadata.is_outlier():
+                depth_updates[event.room_id] = max(
+                    event.depth, depth_updates.get(event.room_id, event.depth)
+                )
+
+            if context.push_actions:
+                self._set_push_actions_for_event_and_users_txn(
+                    txn, event, context.push_actions
+                )
+
+        if event.type == EventTypes.Redaction and event.redacts is not None:
+            self._remove_push_actions_for_event_id_txn(
+                txn, event.room_id, event.redacts
             )
 
         for room_id, depth in depth_updates.items():