aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--mediagoblin/db/mongo/util.py11
-rw-r--r--mediagoblin/db/util.py3
-rw-r--r--mediagoblin/processing.py18
3 files changed, 22 insertions, 10 deletions
diff --git a/mediagoblin/db/mongo/util.py b/mediagoblin/db/mongo/util.py
index 4daf616a..89348d98 100644
--- a/mediagoblin/db/mongo/util.py
+++ b/mediagoblin/db/mongo/util.py
@@ -290,3 +290,14 @@ class MigrationManager(object):
self.set_current_migration(migration_number)
if post_callback:
post_callback(migration_number, migration_func)
+
+
+##########################
+# Random utility functions
+##########################
+
+
+def atomic_update(table, query_dict, update_values):
+ table.collection.update(
+ query_dict,
+ {"$set": update_values})
diff --git a/mediagoblin/db/util.py b/mediagoblin/db/util.py
index 1fc949a6..c48c4ba6 100644
--- a/mediagoblin/db/util.py
+++ b/mediagoblin/db/util.py
@@ -22,4 +22,5 @@ except ImportError:
if use_sql:
from mediagoblin.db.sql.fake import ObjectId, InvalidId, DESCENDING
else:
- from mediagoblin.db.mongo.util import ObjectId, InvalidId, DESCENDING
+ from mediagoblin.db.mongo.util import \
+ ObjectId, InvalidId, DESCENDING, atomic_update
diff --git a/mediagoblin/processing.py b/mediagoblin/processing.py
index a07de869..1c84c557 100644
--- a/mediagoblin/processing.py
+++ b/mediagoblin/processing.py
@@ -18,7 +18,7 @@ import logging
from celery.task import Task
-from mediagoblin.db.util import ObjectId
+from mediagoblin.db.util import ObjectId, atomic_update
from mediagoblin import mg_globals as mgg
from mediagoblin.tools.translate import lazy_pass_to_ugettext as _
@@ -108,22 +108,22 @@ def mark_entry_failed(entry_id, exc):
if isinstance(exc, BaseProcessingFail):
# Looks like yes, so record information about that failure and any
# metadata the user might have supplied.
- mgg.database['media_entries'].update(
+ atomic_update(mgg.database.MediaEntry,
{'_id': entry_id},
- {'$set': {u'state': u'failed',
- u'fail_error': exc.exception_path,
- u'fail_metadata': exc.metadata}})
+ {u'state': u'failed',
+ u'fail_error': exc.exception_path,
+ u'fail_metadata': exc.metadata})
else:
_log.warn("No idea what happened here, but it failed: %r", exc)
# Looks like no, so just mark it as failed and don't record a
# failure_error (we'll assume it wasn't handled) and don't record
# metadata (in fact overwrite it if somehow it had previous info
# here)
- mgg.database['media_entries'].update(
+ atomic_update(mgg.database.MediaEntry,
{'_id': entry_id},
- {'$set': {u'state': u'failed',
- u'fail_error': None,
- u'fail_metadata': {}}})
+ {u'state': u'failed',
+ u'fail_error': None,
+ u'fail_metadata': {}})
class BaseProcessingFail(Exception):