[#8287] better memory management when dealing with tons of users in this script
diff --git a/Allura/allura/scripts/backfill_previous_login_details.py b/Allura/allura/scripts/backfill_previous_login_details.py
index b05a6ac..84efed9 100644
--- a/Allura/allura/scripts/backfill_previous_login_details.py
+++ b/Allura/allura/scripts/backfill_previous_login_details.py
@@ -20,7 +20,7 @@
import argparse
-from ming.orm import session
+from allura.model import main_orm_session, main_explicitflush_orm_session
from allura.scripts import ScriptTask
from allura import model as M
@@ -40,14 +40,17 @@
@classmethod
def execute(cls, options):
auth_provider = AuthenticationProvider.get(None)
- for i, chunk in enumerate(chunked_find(M.User, {})):
+ for i, chunk in enumerate(chunked_find(M.User, {}, pagesize=2)):
log.info('Backfilling login details for chunk #%s', i)
for u in chunk:
try:
u.backfill_login_details(auth_provider)
- session(u).flush(u)
except Exception:
log.exception('Error backfilling on user %s', u)
+
+ main_orm_session.clear() # AuditLog and User objs
+ main_explicitflush_orm_session.clear() # UserLoginDetails objs, already flushed individually
+
log.info('Finished backfilling previous login details')