chunked deletion

This commit is contained in:
holger krekel
2024-07-09 23:24:28 +02:00
parent af83ca0235
commit f1c10cac2b
2 changed files with 13 additions and 12 deletions

View File

@@ -11,18 +11,19 @@ from .database import Database
from .doveauth import iter_userdb_lastlogin_before from .doveauth import iter_userdb_lastlogin_before
def remove_user(db, config, user): def delete_inactive_users(db, config, CHUNK=100):
user_mail_dir = config.get_user_maildir(user)
shutil.rmtree(user_mail_dir, ignore_errors=True)
with db.write_transaction() as conn:
conn.execute("DELETE FROM users WHERE addr = ?", (user,))
def delete_inactive_users(db, config):
cutoff_date = time.time() - config.delete_inactive_users_after * 86400 cutoff_date = time.time() - config.delete_inactive_users_after * 86400
for user in iter_userdb_lastlogin_before(db, cutoff_date):
remove_user(db, config, user) old_users = iter_userdb_lastlogin_before(db, cutoff_date)
print(f"Deleted user: {user}") chunks = (old_users[i : i + CHUNK] for i in range(0, len(old_users), CHUNK))
for sublist in chunks:
for user in sublist:
user_mail_dir = config.get_user_maildir(user)
shutil.rmtree(user_mail_dir, ignore_errors=True)
with db.write_transaction() as conn:
for user in sublist:
conn.execute("DELETE FROM users WHERE addr = ?", (user,))
def main(): def main():

View File

@@ -17,7 +17,7 @@ def test_remove_stale_users(db, example_config):
# create some stale and some new accounts # create some stale and some new accounts
to_remove = [] to_remove = []
for i in range(10): for i in range(150):
addr = f"oldold{i:03}@chat.example.org" addr = f"oldold{i:03}@chat.example.org"
create_user(addr, last_login=old) create_user(addr, last_login=old)
with db.read_connection() as conn: with db.read_connection() as conn: