summary refs log tree commit diff
diff options
context:
space:
mode:
-rw-r--r--changelog.d/16954.bugfix1
-rw-r--r--synapse/storage/databases/main/event_push_actions.py18
2 files changed, 16 insertions, 3 deletions
diff --git a/changelog.d/16954.bugfix b/changelog.d/16954.bugfix
new file mode 100644
index 0000000000..7e5ad69094
--- /dev/null
+++ b/changelog.d/16954.bugfix
@@ -0,0 +1 @@
+Fix a bug introduced in v1.100.0 where notifications from rooms you've left would continue to be counted.
\ No newline at end of file
diff --git a/synapse/storage/databases/main/event_push_actions.py b/synapse/storage/databases/main/event_push_actions.py
index d7aa8a0ee0..56c549ae66 100644
--- a/synapse/storage/databases/main/event_push_actions.py
+++ b/synapse/storage/databases/main/event_push_actions.py
@@ -404,7 +404,11 @@ class EventPushActionsWorkerStore(ReceiptsWorkerStore, StreamWorkerStore, SQLBas
                 SELECT e.room_id, notif_count, e.stream_ordering, e.thread_id, last_receipt_stream_ordering,
                     ev.stream_ordering AS receipt_stream_ordering
                 FROM event_push_summary AS e
-                INNER JOIN local_current_membership USING (user_id, room_id)
+                INNER JOIN local_current_membership AS lcm ON (
+                    e.user_id = lcm.user_id
+                    AND e.room_id = lcm.room_id
+                    AND lcm.membership = 'join'
+                )
                 LEFT JOIN receipts_linearized AS r ON (
                     e.user_id = r.user_id
                     AND e.room_id = r.room_id
@@ -472,7 +476,11 @@ class EventPushActionsWorkerStore(ReceiptsWorkerStore, StreamWorkerStore, SQLBas
                 SELECT e.room_id, e.stream_ordering, e.thread_id,
                     ev.stream_ordering AS receipt_stream_ordering
                 FROM event_push_actions AS e
-                INNER JOIN local_current_membership USING (user_id, room_id)
+                INNER JOIN local_current_membership AS lcm ON (
+                    e.user_id = lcm.user_id
+                    AND e.room_id = lcm.room_id
+                    AND lcm.membership = 'join'
+                )
                 LEFT JOIN receipts_linearized AS r ON (
                     e.user_id = r.user_id
                     AND e.room_id = r.room_id
@@ -514,7 +522,11 @@ class EventPushActionsWorkerStore(ReceiptsWorkerStore, StreamWorkerStore, SQLBas
                     SELECT e.room_id, e.stream_ordering, e.thread_id,
                         ev.stream_ordering AS receipt_stream_ordering
                     FROM event_push_actions AS e
-                    INNER JOIN local_current_membership USING (user_id, room_id)
+                    INNER JOIN local_current_membership AS lcm ON (
+                        e.user_id = lcm.user_id
+                        AND e.room_id = lcm.room_id
+                        AND lcm.membership = 'join'
+                    )
                     LEFT JOIN receipts_linearized AS r ON (
                         e.user_id = r.user_id
                         AND e.room_id = r.room_id