Browse Source

[Result] Retrieving result now raises RuntimError with task_always_eager. Closes #2275

Ask Solem 9 years ago
parent
commit
c71cd08fc7
3 changed files with 16 additions and 0 deletions
  1. 3 0
      celery/backends/async.py
  2. 10 0
      celery/backends/base.py
  3. 3 0
      celery/tests/tasks/test_result.py

+ 3 - 0
celery/backends/async.py

@@ -109,6 +109,8 @@ class AsyncBackendMixin(object):
         self.result_consumer.buckets[result] = bucket
 
     def iter_native(self, result, no_ack=True, **kwargs):
+        self._ensure_not_eager()
+
         results = result.results
         if not results:
             raise StopIteration()
@@ -144,6 +146,7 @@ class AsyncBackendMixin(object):
 
     def wait_for_pending(self, result,
                          callback=None, propagate=True, **kwargs):
+        self._ensure_not_eager()
         for _ in self._wait_for_pending(result, **kwargs):
             pass
         return result.maybe_throw(callback=callback, propagate=propagate)

+ 10 - 0
celery/backends/base.py

@@ -292,7 +292,13 @@ class Backend(object):
         except KeyError:
             pass
 
+    def _ensure_not_eager(self):
+        if self.app.conf.task_always_eager:
+            raise RuntimeError(
+                "Cannot retrieve result with task_always_eager enabled")
+
     def get_task_meta(self, task_id, cache=True):
+        self._ensure_not_eager()
         if cache:
             try:
                 return self._cache[task_id]
@@ -313,6 +319,7 @@ class Backend(object):
         self._cache[group_id] = self.get_group_meta(group_id, cache=False)
 
     def get_group_meta(self, group_id, cache=True):
+        self._ensure_not_eager()
         if cache:
             try:
                 return self._cache[group_id]
@@ -383,6 +390,7 @@ class SyncBackendMixin(object):
 
     def iter_native(self, result, timeout=None, interval=0.5, no_ack=True,
                     on_message=None, on_interval=None):
+        self._ensure_not_eager()
         results = result.results
         if not results:
             return iter([])
@@ -395,6 +403,7 @@ class SyncBackendMixin(object):
     def wait_for_pending(self, result, timeout=None, interval=0.5,
                          no_ack=True, on_interval=None, callback=None,
                          propagate=True):
+        self._ensure_not_eager()
         meta = self.wait_for(
             result.id, timeout=timeout,
             interval=interval,
@@ -417,6 +426,7 @@ class SyncBackendMixin(object):
         takes longer than `timeout` seconds.
 
         """
+        self._ensure_not_eager()
 
         time_elapsed = 0.0
 

+ 3 - 0
celery/tests/tasks/test_result.py

@@ -485,6 +485,9 @@ class SimpleBackend(SyncBackendMixin):
         def __init__(self, ids=[]):
             self.ids = ids
 
+        def _ensure_not_eager(self):
+            pass
+
         def get_many(self, *args, **kwargs):
             return ((id, {'result': i, 'status': states.SUCCESS})
                     for i, id in enumerate(self.ids))