changeset 8819:43ad0cec9037

celery: always drop db session after running a task Drop dbsession annotation - it could easily be forgotten. This seems simpler and more reliable.
author Mads Kiilerich <mads@kiilerich.com>
date Mon, 28 Dec 2020 00:04:26 +0100
parents 1c43fd986a8e
children 0270c714fa17
files kallithea/lib/celerylib/__init__.py kallithea/model/async_tasks.py
diffstat 2 files changed, 1 insertions(+), 17 deletions(-) [+]
line wrap: on
line diff
--- a/kallithea/lib/celerylib/__init__.py	Sun Dec 27 22:58:52 2020 +0100
+++ b/kallithea/lib/celerylib/__init__.py	Mon Dec 28 00:04:26 2020 +0100
@@ -66,6 +66,7 @@
             try:
                 f_org(*args, **kwargs)
             finally:
+                meta.Session.remove()  # prevent reuse of auto created db sessions
                 log.info('executed %s task', f_org.__name__)
         runner = kallithea.CELERY_APP.task(name=f_org.__name__, ignore_result=True)(f_async)
 
@@ -111,15 +112,3 @@
             return 'Task with key %s already running' % lockkey
 
     return decorator(__wrapper, func)
-
-
-def dbsession(func):
-    def __wrapper(func, *fargs, **fkwargs):
-        try:
-            ret = func(*fargs, **fkwargs)
-            return ret
-        finally:
-            if kallithea.CELERY_APP and not kallithea.CELERY_APP.conf.task_always_eager:
-                meta.Session.remove()
-
-    return decorator(__wrapper, func)
--- a/kallithea/model/async_tasks.py	Sun Dec 27 22:58:52 2020 +0100
+++ b/kallithea/model/async_tasks.py	Mon Dec 28 00:04:26 2020 +0100
@@ -55,7 +55,6 @@
 
 @celerylib.task
 @celerylib.locked_task
-@celerylib.dbsession
 def whoosh_index(repo_location, full_index):
     index_location = config['index_dir']
     WhooshIndexingDaemon(index_location=index_location,
@@ -77,7 +76,6 @@
 
 
 @celerylib.task
-@celerylib.dbsession
 def get_commits_stats(repo_name, ts_min_y, ts_max_y, recurse_limit=100):
     lockkey = celerylib.__get_lockkey('get_commits_stats', repo_name, ts_min_y,
                             ts_max_y)
@@ -233,7 +231,6 @@
 
 
 @celerylib.task
-@celerylib.dbsession
 def send_email(recipients, subject, body='', html_body='', headers=None, from_name=None):
     """
     Sends an email with defined parameters from the .ini files.
@@ -350,7 +347,6 @@
 
 
 @celerylib.task
-@celerylib.dbsession
 def create_repo(form_data, cur_user):
     cur_user = db.User.guess_instance(cur_user)
 
@@ -426,7 +422,6 @@
 
 
 @celerylib.task
-@celerylib.dbsession
 def create_repo_fork(form_data, cur_user):
     """
     Creates a fork of repository using interval VCS methods