Skip to content
Snippets Groups Projects
Unverified Commit 3cc7f43e authored by Brendan Abolivier's avatar Brendan Abolivier
Browse files

Fix summary rotation

parent cb6d4d07
No related branches found
No related tags found
No related merge requests found
...@@ -865,7 +865,7 @@ class EventPushActionsStore(EventPushActionsWorkerStore): ...@@ -865,7 +865,7 @@ class EventPushActionsStore(EventPushActionsWorkerStore):
sql % ("unread_count", "unread_count", "unread_count", ""), sql % ("unread_count", "unread_count", "unread_count", ""),
(old_rotate_stream_ordering, rotate_to_stream_ordering), (old_rotate_stream_ordering, rotate_to_stream_ordering),
) )
rows = txn.fetchall() unread_rows = txn.fetchall()
# Then get the count of notifications. # Then get the count of notifications.
txn.execute( txn.execute(
...@@ -874,7 +874,24 @@ class EventPushActionsStore(EventPushActionsWorkerStore): ...@@ -874,7 +874,24 @@ class EventPushActionsStore(EventPushActionsWorkerStore):
) )
notif_rows = txn.fetchall() notif_rows = txn.fetchall()
logger.info("Rotating notifications, handling %d rows", len(rows)) # We need to merge both lists into a single object because we might not have the
# same amount of rows in each of them. In this case we use a dict indexed on the
# user ID and room ID to make it easier to populate.
summaries = {}
for row in unread_rows:
summaries[(row[0], row[1])] = {
"unread_count": row[2],
"stream_ordering": row[3],
"old_user_id": row[4],
"notif_count": 0,
}
# notif_rows is populated based on a subset of the query used to populate
# unread_rows, so we can be sure that there will be no KeyError here.
for row in notif_rows:
summaries[(row[0], row[1])]["notif_count"] = row[2]
logger.info("Rotating notifications, handling %d rows", len(summaries))
# If the `old.user_id` above is NULL then we know there isn't already an # If the `old.user_id` above is NULL then we know there isn't already an
# entry in the table, so we simply insert it. Otherwise we update the # entry in the table, so we simply insert it. Otherwise we update the
...@@ -884,14 +901,14 @@ class EventPushActionsStore(EventPushActionsWorkerStore): ...@@ -884,14 +901,14 @@ class EventPushActionsStore(EventPushActionsWorkerStore):
table="event_push_summary", table="event_push_summary",
values=[ values=[
{ {
"user_id": rows[i][0], "user_id": key[0],
"room_id": rows[i][1], "room_id": key[1],
"notif_count": notif_rows[i][2], "notif_count": summary["notif_count"],
"unread_count": rows[i][2], "unread_count": summary["unread_count"],
"stream_ordering": rows[i][3], "stream_ordering": summary["stream_ordering"],
} }
for i, _ in enumerate(rows) for key, summary in summaries.items()
if rows[i][4] is None if summary["old_user_id"] is None
], ],
) )
...@@ -902,9 +919,15 @@ class EventPushActionsStore(EventPushActionsWorkerStore): ...@@ -902,9 +919,15 @@ class EventPushActionsStore(EventPushActionsWorkerStore):
WHERE user_id = ? AND room_id = ? WHERE user_id = ? AND room_id = ?
""", """,
( (
(notif_rows[i][2], rows[i][2], rows[i][3], rows[i][0], rows[i][1]) (
for i, _ in enumerate(rows) summary["notif_count"],
if rows[i][4] is not None summary["unread_count"],
summary["stream_ordering"],
key[0],
key[1],
)
for key, summary in summaries.items()
if summary["old_user_id"] is not None
), ),
) )
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment