mirror of
https://git.anonymousland.org/anonymousland/synapse.git
synced 2025-05-07 01:44:57 -04:00
Track unconverted device list outbound pokes using a position instead (#14516)
When a local device list change is added to `device_lists_changes_in_room`, the `converted_to_destinations` flag is set to `FALSE` and the `_handle_new_device_update_async` background process is started. This background process looks for unconverted rows in `device_lists_changes_in_room`, copies them to `device_lists_outbound_pokes` and updates the flag. To update the `converted_to_destinations` flag, the database performs a `DELETE` and `INSERT` internally, which fragments the table. To avoid this, track unconverted rows using a `(stream ID, room ID)` position instead of the flag. From now on, the `converted_to_destinations` column indicates rows that need converting to outbound pokes, but does not indicate whether the conversion has already taken place. Closes #14037. Signed-off-by: Sean Quah <seanq@matrix.org>
This commit is contained in:
parent
7eb7460042
commit
9cae44f49e
6 changed files with 158 additions and 49 deletions
|
@ -2075,13 +2075,14 @@ class DatabasePool:
|
|||
retcols: Collection[str],
|
||||
allow_none: bool = False,
|
||||
) -> Optional[Dict[str, Any]]:
|
||||
select_sql = "SELECT %s FROM %s WHERE %s" % (
|
||||
", ".join(retcols),
|
||||
table,
|
||||
" AND ".join("%s = ?" % (k,) for k in keyvalues),
|
||||
)
|
||||
select_sql = "SELECT %s FROM %s" % (", ".join(retcols), table)
|
||||
|
||||
if keyvalues:
|
||||
select_sql += " WHERE %s" % (" AND ".join("%s = ?" % k for k in keyvalues),)
|
||||
txn.execute(select_sql, list(keyvalues.values()))
|
||||
else:
|
||||
txn.execute(select_sql)
|
||||
|
||||
txn.execute(select_sql, list(keyvalues.values()))
|
||||
row = txn.fetchone()
|
||||
|
||||
if not row:
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue