aboutsummaryrefslogtreecommitdiffstats
path: root/mediagoblin/processing/task.py
diff options
context:
space:
mode:
authorJessica Tallon <jessica@megworld.co.uk>2014-12-01 13:39:35 +0000
committerJessica Tallon <jessica@megworld.co.uk>2014-12-01 13:39:35 +0000
commitfbb3ee504168cd4ceb258bf98658c1bc32d8cafd (patch)
tree67f3f9a4dda615b40b7a3e73f78b368f7b6eaeac /mediagoblin/processing/task.py
parent1c8f52daee64a337525ad54a549c6a0e60bb11f0 (diff)
downloadmediagoblin-fbb3ee504168cd4ceb258bf98658c1bc32d8cafd.tar.lz
mediagoblin-fbb3ee504168cd4ceb258bf98658c1bc32d8cafd.tar.xz
mediagoblin-fbb3ee504168cd4ceb258bf98658c1bc32d8cafd.zip
Fix #658 and #974 - Rollback database on_return of task
Diffstat (limited to 'mediagoblin/processing/task.py')
-rw-r--r--mediagoblin/processing/task.py14
1 files changed, 14 insertions, 0 deletions
diff --git a/mediagoblin/processing/task.py b/mediagoblin/processing/task.py
index 1a21c6d2..0c254767 100644
--- a/mediagoblin/processing/task.py
+++ b/mediagoblin/processing/task.py
@@ -155,5 +155,19 @@ class ProcessMedia(celery.Task):
entry = mgg.database.MediaEntry.query.filter_by(id=entry_id).first()
json_processing_callback(entry)
+ mgg.database.reset_after_request()
+
+ def after_return(self, *args, **kwargs):
+ """
+ This is called after the task has returned, we should clean up.
+
+ We need to rollback the database to prevent ProgrammingError exceptions
+ from being raised.
+ """
+ # In eager mode we get DetachedInstanceError, we do rollback on_failure
+ # to deal with that case though when in eager mode.
+ if not celery.app.default_app.conf['CELERY_ALWAYS_EAGER']:
+ mgg.database.reset_after_request()
+
tasks.register(ProcessMedia)