forked from MirrorHub/synapse
Fixed removal of new presence stream states (#10014)
Fixes: https://github.com/matrix-org/synapse/issues/9962 This is a fix for above problem. I fixed it by swaping the order of insertion of new records and deletion of old ones. This ensures that we don't delete fresh database records as we do deletes before inserts. Signed-off-by: Marek Matys <themarcq@gmail.com>
This commit is contained in:
parent
7958eadcd1
commit
6a8643ff3d
2 changed files with 10 additions and 9 deletions
1
changelog.d/10014.bugfix
Normal file
1
changelog.d/10014.bugfix
Normal file
|
@ -0,0 +1 @@
|
||||||
|
Fixed deletion of new presence stream states from database.
|
|
@ -97,6 +97,15 @@ class PresenceStore(SQLBaseStore):
|
||||||
)
|
)
|
||||||
txn.call_after(self._get_presence_for_user.invalidate, (state.user_id,))
|
txn.call_after(self._get_presence_for_user.invalidate, (state.user_id,))
|
||||||
|
|
||||||
|
# Delete old rows to stop database from getting really big
|
||||||
|
sql = "DELETE FROM presence_stream WHERE stream_id < ? AND "
|
||||||
|
|
||||||
|
for states in batch_iter(presence_states, 50):
|
||||||
|
clause, args = make_in_list_sql_clause(
|
||||||
|
self.database_engine, "user_id", [s.user_id for s in states]
|
||||||
|
)
|
||||||
|
txn.execute(sql + clause, [stream_id] + list(args))
|
||||||
|
|
||||||
# Actually insert new rows
|
# Actually insert new rows
|
||||||
self.db_pool.simple_insert_many_txn(
|
self.db_pool.simple_insert_many_txn(
|
||||||
txn,
|
txn,
|
||||||
|
@ -117,15 +126,6 @@ class PresenceStore(SQLBaseStore):
|
||||||
],
|
],
|
||||||
)
|
)
|
||||||
|
|
||||||
# Delete old rows to stop database from getting really big
|
|
||||||
sql = "DELETE FROM presence_stream WHERE stream_id < ? AND "
|
|
||||||
|
|
||||||
for states in batch_iter(presence_states, 50):
|
|
||||||
clause, args = make_in_list_sql_clause(
|
|
||||||
self.database_engine, "user_id", [s.user_id for s in states]
|
|
||||||
)
|
|
||||||
txn.execute(sql + clause, [stream_id] + list(args))
|
|
||||||
|
|
||||||
async def get_all_presence_updates(
|
async def get_all_presence_updates(
|
||||||
self, instance_name: str, last_id: int, current_id: int, limit: int
|
self, instance_name: str, last_id: int, current_id: int, limit: int
|
||||||
) -> Tuple[List[Tuple[int, list]], int, bool]:
|
) -> Tuple[List[Tuple[int, list]], int, bool]:
|
||||||
|
|
Loading…
Reference in a new issue