Skip to content
This repository has been archived by the owner on Dec 13, 2023. It is now read-only.

More efficient notif count queries #1644

Merged
merged 2 commits into from Nov 23, 2016
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
41 changes: 33 additions & 8 deletions synapse/storage/event_push_actions.py
Expand Up @@ -39,6 +39,14 @@ def __init__(self, hs):
columns=["user_id", "stream_ordering"],
)

self.register_background_index_update(
"event_push_actions_highlights_index",
index_name="event_push_actions_highlights_index",
table="event_push_actions",
columns=["user_id", "room_id", "topological_ordering", "stream_ordering"],
where_clause="highlight=1"
)

def _set_push_actions_for_event_and_users_txn(self, txn, event, tuples):
"""
Args:
Expand Down Expand Up @@ -88,8 +96,11 @@ def _get_unread_event_push_actions_by_room(txn):
topological_ordering, stream_ordering
)

# First get number of notifications.
# We don't need to put a notif=1 clause as all rows always have
# notif=1
sql = (
"SELECT sum(notif), sum(highlight)"
"SELECT count(*)"
" FROM event_push_actions ea"
" WHERE"
" user_id = ?"
Expand All @@ -99,13 +110,27 @@ def _get_unread_event_push_actions_by_room(txn):

txn.execute(sql, (user_id, room_id))
row = txn.fetchone()
if row:
return {
"notify_count": row[0] or 0,
"highlight_count": row[1] or 0,
}
else:
return {"notify_count": 0, "highlight_count": 0}
notify_count = row[0] if row else 0

# Now get the number of highlights
sql = (
"SELECT count(*)"
" FROM event_push_actions ea"
" WHERE"
" highlight = 1"
" AND user_id = ?"
" AND room_id = ?"
" AND %s"
) % (lower_bound(token, self.database_engine, inclusive=False),)

txn.execute(sql, (user_id, room_id))
row = txn.fetchone()
highlight_count = row[0] if row else 0

return {
"notify_count": notify_count,
"highlight_count": highlight_count,
}

ret = yield self.runInteraction(
"get_unread_event_push_actions_by_room",
Expand Down
17 changes: 17 additions & 0 deletions synapse/storage/schema/delta/39/event_push_index.sql
@@ -0,0 +1,17 @@
/* Copyright 2016 OpenMarket Ltd
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/

INSERT INTO background_updates (update_name, progress_json) VALUES
('event_push_actions_highlights_index', '{}');