Explorar el Código

Fix request context for blocking task apply (added hostname) (#3716)

* Added hostname to the request context for blocking task apply

* Added test
Marat Sharafutdinov hace 8 años
padre
commit
43058644b8
Se han modificado 2 ficheros con 13 adiciones y 0 borrados
  1. 2 0
      celery/app/task.py
  2. 11 0
      t/unit/tasks/test_tasks.py

+ 2 - 0
celery/app/task.py

@@ -19,6 +19,7 @@ from celery.result import EagerResult
 from celery.utils import abstract
 from celery.utils.functional import mattrgetter, maybe_list
 from celery.utils.imports import instantiate
+from celery.utils.nodenames import gethostname
 from celery.utils.serialization import raise_with_context
 
 from .annotations import resolve_all as resolve_all_annotations
@@ -726,6 +727,7 @@ class Task(object):
             'is_eager': True,
             'logfile': logfile,
             'loglevel': loglevel or 0,
+            'hostname': gethostname(),
             'callbacks': maybe_list(link),
             'errbacks': maybe_list(link_error),
             'headers': headers,

+ 11 - 0
t/unit/tasks/test_tasks.py

@@ -1,6 +1,7 @@
 from __future__ import absolute_import, unicode_literals
 
 import pytest
+import socket
 
 from datetime import datetime, timedelta
 
@@ -119,6 +120,12 @@ class TasksCase:
 
         self.autoretry_task = autoretry_task
 
+        @self.app.task(bind=True)
+        def task_check_request_context(self):
+            assert self.request.hostname == socket.gethostname()
+
+        self.task_check_request_context = task_check_request_context
+
         # memove all messages from memory-transport
         from kombu.transport.memory import Channel
         Channel.queues.clear()
@@ -592,6 +599,10 @@ class test_apply_task(TasksCase):
         with pytest.raises(KeyError):
             self.raising.apply()
 
+    def test_apply_request_context_is_ok(self):
+        self.app.conf.task_eager_propagates = True
+        self.task_check_request_context.apply()
+
     def test_apply(self):
         self.increment_counter.count = 0