Skip to content
Snippets Groups Projects
Commit ab55794b authored by Erik Johnston's avatar Erik Johnston
Browse files

Fix deletion of old sent devices correctly

parent d3169e8d
Branches
Tags
No related merge requests found
...@@ -436,15 +436,27 @@ class DeviceStore(SQLBaseStore): ...@@ -436,15 +436,27 @@ class DeviceStore(SQLBaseStore):
) )
def _mark_as_sent_devices_by_remote_txn(self, txn, destination, stream_id): def _mark_as_sent_devices_by_remote_txn(self, txn, destination, stream_id):
# First we DELETE all rows such that only the latest row for each
# (destination, user_id is left. We do this by selecting first and
# deleting.
sql = """
SELECT user_id, coalesce(max(stream_id), 0) FROM device_lists_outbound_pokes
WHERE destination = ? AND stream_id <= ?
GROUP BY user_id
HAVING count(*) > 1
"""
txn.execute(sql, (destination, stream_id,))
rows = txn.fetchall()
sql = """ sql = """
DELETE FROM device_lists_outbound_pokes DELETE FROM device_lists_outbound_pokes
WHERE destination = ? AND stream_id < ( WHERE destination = ? AND user_id = ? AND stream_id < ?
SELECT coalesce(max(stream_id), 0) FROM device_lists_outbound_pokes
WHERE destination = ? AND stream_id <= ?
)
""" """
txn.execute(sql, (destination, destination, stream_id,)) txn.executemany(
sql, ((destination, row[0], row[1],) for row in rows)
)
# Mark everything that is left as sent
sql = """ sql = """
UPDATE device_lists_outbound_pokes SET sent = ? UPDATE device_lists_outbound_pokes SET sent = ?
WHERE destination = ? AND stream_id <= ? WHERE destination = ? AND stream_id <= ?
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment