diff --git a/app/jobs/event_jobs.py b/app/jobs/event_jobs.py index ffe4fba2..0d48aa15 100644 --- a/app/jobs/event_jobs.py +++ b/app/jobs/event_jobs.py @@ -16,8 +16,9 @@ def send_alias_creation_events_for_user( event_list = [] LOG.i("Sending alias create events for user {user}") for alias in ( - Alias.yield_per_query(chunk_size) - .filter_by(user_id=user.id) + Alias.filter_by(user_id=user.id) + .enable_eagerloads(False) + .yield_per(chunk_size) .order_by(Alias.id.asc()) ): event_list.append( diff --git a/tasks/cleanup_alias.py b/tasks/cleanup_alias.py index 30714df6..7af2d661 100644 --- a/tasks/cleanup_alias.py +++ b/tasks/cleanup_alias.py @@ -1,10 +1,10 @@ import arrow from sqlalchemy import and_ +from app.alias_delete import perform_alias_deletion from app.db import Session from app.log import LOG from app.models import Alias -from app.alias_delete import perform_alias_deletion def cleanup_alias(oldest_allowed: arrow.Arrow): @@ -13,6 +13,7 @@ def cleanup_alias(oldest_allowed: arrow.Arrow): Alias.filter( and_(Alias.delete_on.isnot(None), Alias.delete_on <= oldest_allowed) ) + .enable_eagerloads(False) .yield_per(500) .all() ): diff --git a/tests/tasks/test_cleanup_alias.py b/tests/tasks/test_cleanup_alias.py new file mode 100644 index 00000000..d8329d08 --- /dev/null +++ b/tests/tasks/test_cleanup_alias.py @@ -0,0 +1,33 @@ +import arrow + +from app.models import Job, Alias +from tasks.cleanup_alias import cleanup_alias +from tests.utils import create_new_user, random_email + + +def test_cleanup_Alias(): + Job.filter().delete() + user = create_new_user() + + now = arrow.utcnow() + alias_expired = Alias.create( + user_id=user.id, + email=random_email(), + mailbox_id=user.default_mailbox_id, + delete_on=now.shift(minutes=-1), + ).id + alias_not_expired = Alias.create( + user_id=user.id, + email=random_email(), + mailbox_id=user.default_mailbox_id, + delete_on=now.shift(minutes=1), + ).id + alias_not_pending = Alias.create( + user_id=user.id, + email=random_email(), + mailbox_id=user.default_mailbox_id, + ).id + cleanup_alias(now) + assert Alias.get(alias_not_expired) is not None + assert Alias.get(alias_not_pending) is not None + assert Alias.get(alias_expired) is None