Skip to content
Snippets Groups Projects
Unverified Commit 3693ea61 authored by Andrew Morgan's avatar Andrew Morgan Committed by GitHub
Browse files

Fix iteration in _remove_deleted_email_pushers background job. (#10734)

parent 78e590d4
No related branches found
Tags v0.5.3c
No related merge requests found
Remove pushers when deleting a 3pid from an account. Pushers for old unlinked emails will also be deleted.
\ No newline at end of file
...@@ -430,10 +430,11 @@ class PusherWorkerStore(SQLBaseStore): ...@@ -430,10 +430,11 @@ class PusherWorkerStore(SQLBaseStore):
""" """
txn.execute(sql, (last_pusher, batch_size)) txn.execute(sql, (last_pusher, batch_size))
rows = txn.fetchall()
last = None last = None
num_deleted = 0 num_deleted = 0
for row in txn: for row in rows:
last = row[0] last = row[0]
num_deleted += 1 num_deleted += 1
self.db_pool.simple_delete_txn( self.db_pool.simple_delete_txn(
......
...@@ -344,6 +344,50 @@ class EmailPusherTests(HomeserverTestCase): ...@@ -344,6 +344,50 @@ class EmailPusherTests(HomeserverTestCase):
pushers = list(pushers) pushers = list(pushers)
self.assertEqual(len(pushers), 0) self.assertEqual(len(pushers), 0)
def test_remove_unlinked_pushers_background_job(self):
"""Checks that all existing pushers associated with unlinked email addresses are removed
upon running the remove_deleted_email_pushers background update.
"""
# disassociate the user's email address manually (without deleting the pusher).
# This resembles the old behaviour, which the background update below is intended
# to clean up.
self.get_success(
self.hs.get_datastore().user_delete_threepid(
self.user_id, "email", "a@example.com"
)
)
# Run the "remove_deleted_email_pushers" background job
self.get_success(
self.hs.get_datastore().db_pool.simple_insert(
table="background_updates",
values={
"update_name": "remove_deleted_email_pushers",
"progress_json": "{}",
"depends_on": None,
},
)
)
# ... and tell the DataStore that it hasn't finished all updates yet
self.hs.get_datastore().db_pool.updates._all_done = False
# Now let's actually drive the updates to completion
while not self.get_success(
self.hs.get_datastore().db_pool.updates.has_completed_background_updates()
):
self.get_success(
self.hs.get_datastore().db_pool.updates.do_next_background_update(100),
by=0.1,
)
# Check that all pushers with unlinked addresses were deleted
pushers = self.get_success(
self.hs.get_datastore().get_pushers_by({"user_name": self.user_id})
)
pushers = list(pushers)
self.assertEqual(len(pushers), 0)
def _check_for_mail(self): def _check_for_mail(self):
"""Check that the user receives an email notification""" """Check that the user receives an email notification"""
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment