mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-11-12 21:12:25 -05:00
Merge branch 'develop' of github.com:matrix-org/synapse into erikj/make_notif_highlight_query_fast
This commit is contained in:
commit
7fe42cf949
16 changed files with 132 additions and 47 deletions
|
|
@ -361,14 +361,12 @@ class EventPushActionsStore(SQLBaseStore):
|
|||
before_clause += " "
|
||||
before_clause += "AND epa.highlight = 1"
|
||||
|
||||
# NB. This assumes event_ids are globally unique since
|
||||
# it makes the query easier to index
|
||||
sql = (
|
||||
"SELECT epa.event_id, epa.room_id,"
|
||||
" epa.stream_ordering, epa.topological_ordering,"
|
||||
" epa.actions, epa.profile_tag, e.received_ts"
|
||||
" FROM event_push_actions epa, events e"
|
||||
" WHERE epa.event_id = e.event_id"
|
||||
" WHERE epa.room_id = e.room_id AND epa.event_id = e.event_id"
|
||||
" AND epa.user_id = ? %s"
|
||||
" ORDER BY epa.stream_ordering DESC"
|
||||
" LIMIT ?"
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** Using CREATE INDEX directly is deprecated in favour of using background
|
||||
* update see synapse/storage/schema/delta/33/access_tokens_device_index.sql
|
||||
* and synapse/storage/registration.py for an example using
|
||||
* "access_tokens_device_index" **/
|
||||
CREATE INDEX receipts_linearized_room_stream ON receipts_linearized(
|
||||
room_id, stream_id
|
||||
);
|
||||
|
|
|
|||
|
|
@ -13,4 +13,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** Using CREATE INDEX directly is deprecated in favour of using background
|
||||
* update see synapse/storage/schema/delta/33/access_tokens_device_index.sql
|
||||
* and synapse/storage/registration.py for an example using
|
||||
* "access_tokens_device_index" **/
|
||||
CREATE INDEX events_room_stream on events(room_id, stream_ordering);
|
||||
|
|
|
|||
|
|
@ -13,4 +13,8 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** Using CREATE INDEX directly is deprecated in favour of using background
|
||||
* update see synapse/storage/schema/delta/33/access_tokens_device_index.sql
|
||||
* and synapse/storage/registration.py for an example using
|
||||
* "access_tokens_device_index" **/
|
||||
CREATE INDEX public_room_index on rooms(is_public);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** Using CREATE INDEX directly is deprecated in favour of using background
|
||||
* update see synapse/storage/schema/delta/33/access_tokens_device_index.sql
|
||||
* and synapse/storage/registration.py for an example using
|
||||
* "access_tokens_device_index" **/
|
||||
CREATE INDEX receipts_linearized_user ON receipts_linearized(
|
||||
user_id
|
||||
);
|
||||
|
|
|
|||
|
|
@ -26,6 +26,10 @@ UPDATE event_push_actions SET stream_ordering = (
|
|||
|
||||
UPDATE event_push_actions SET notif = 1, highlight = 0;
|
||||
|
||||
/** Using CREATE INDEX directly is deprecated in favour of using background
|
||||
* update see synapse/storage/schema/delta/33/access_tokens_device_index.sql
|
||||
* and synapse/storage/registration.py for an example using
|
||||
* "access_tokens_device_index" **/
|
||||
CREATE INDEX event_push_actions_rm_tokens on event_push_actions(
|
||||
user_id, room_id, topological_ordering, stream_ordering
|
||||
);
|
||||
|
|
|
|||
|
|
@ -13,6 +13,10 @@
|
|||
* limitations under the License.
|
||||
*/
|
||||
|
||||
/** Using CREATE INDEX directly is deprecated in favour of using background
|
||||
* update see synapse/storage/schema/delta/33/access_tokens_device_index.sql
|
||||
* and synapse/storage/registration.py for an example using
|
||||
* "access_tokens_device_index" **/
|
||||
CREATE INDEX event_push_actions_stream_ordering on event_push_actions(
|
||||
stream_ordering, user_id
|
||||
);
|
||||
|
|
|
|||
|
|
@ -306,13 +306,6 @@ class StateStore(SQLBaseStore):
|
|||
defer.returnValue(results)
|
||||
|
||||
def _get_state_groups_from_groups_txn(self, txn, groups, types=None):
|
||||
if types is not None:
|
||||
where_clause = "AND (%s)" % (
|
||||
" OR ".join(["(type = ? AND state_key = ?)"] * len(types)),
|
||||
)
|
||||
else:
|
||||
where_clause = ""
|
||||
|
||||
results = {group: {} for group in groups}
|
||||
if isinstance(self.database_engine, PostgresEngine):
|
||||
# Temporarily disable sequential scans in this transaction. This is
|
||||
|
|
@ -342,20 +335,43 @@ class StateStore(SQLBaseStore):
|
|||
WHERE state_group IN (
|
||||
SELECT state_group FROM state
|
||||
)
|
||||
%s;
|
||||
""") % (where_clause,)
|
||||
%s
|
||||
""")
|
||||
|
||||
for group in groups:
|
||||
args = [group]
|
||||
if types is not None:
|
||||
args.extend([i for typ in types for i in typ])
|
||||
# Turns out that postgres doesn't like doing a list of OR's and
|
||||
# is about 1000x slower, so we just issue a query for each specific
|
||||
# type seperately.
|
||||
if types:
|
||||
clause_to_args = [
|
||||
(
|
||||
"AND type = ? AND state_key = ?",
|
||||
(etype, state_key)
|
||||
)
|
||||
for etype, state_key in types
|
||||
]
|
||||
else:
|
||||
# If types is None we fetch all the state, and so just use an
|
||||
# empty where clause with no extra args.
|
||||
clause_to_args = [("", [])]
|
||||
|
||||
txn.execute(sql, args)
|
||||
rows = self.cursor_to_dict(txn)
|
||||
for row in rows:
|
||||
key = (row["type"], row["state_key"])
|
||||
results[group][key] = row["event_id"]
|
||||
for where_clause, where_args in clause_to_args:
|
||||
for group in groups:
|
||||
args = [group]
|
||||
args.extend(where_args)
|
||||
|
||||
txn.execute(sql % (where_clause,), args)
|
||||
rows = self.cursor_to_dict(txn)
|
||||
for row in rows:
|
||||
key = (row["type"], row["state_key"])
|
||||
results[group][key] = row["event_id"]
|
||||
else:
|
||||
if types is not None:
|
||||
where_clause = "AND (%s)" % (
|
||||
" OR ".join(["(type = ? AND state_key = ?)"] * len(types)),
|
||||
)
|
||||
else:
|
||||
where_clause = ""
|
||||
|
||||
# We don't use WITH RECURSIVE on sqlite3 as there are distributions
|
||||
# that ship with an sqlite3 version that doesn't support it (e.g. wheezy)
|
||||
for group in groups:
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue