summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSelwin Ong <selwin.ong@gmail.com>2017-11-03 12:59:28 +0700
committerSelwin Ong <selwin.ong@gmail.com>2017-11-03 12:59:28 +0700
commit7b9c3b6b663508814b36dc2ffc0f792eca642180 (patch)
treefd1c55c7ba198533f1ea735b8a3b09ed579f9512
parent25ced943e159fa17a199c1d48dfd443fa542178c (diff)
downloadrq-7b9c3b6b663508814b36dc2ffc0f792eca642180.tar.gz
Fixed an issue where worker.refresh() may fail if last_heartbeat is not present in Redis.
-rw-r--r--rq/worker.py5
-rw-r--r--tests/test_worker.py8
2 files changed, 10 insertions, 3 deletions
diff --git a/rq/worker.py b/rq/worker.py
index 7602c2e..c782fd6 100644
--- a/rq/worker.py
+++ b/rq/worker.py
@@ -540,7 +540,10 @@ class Worker(object):
queues = as_text(queues)
self._state = as_text(state or '?')
self._job_id = job_id or None
- self.last_heartbeat = utcparse(as_text(last_heartbeat))
+ if last_heartbeat:
+ self.last_heartbeat = utcparse(as_text(last_heartbeat))
+ else:
+ self.last_heartbeat = None
self.birth_date = utcparse(as_text(birth))
if failed_job_count:
self.failed_job_count = int(as_text(failed_job_count))
diff --git a/tests/test_worker.py b/tests/test_worker.py
index 3f76e4d..565a899 100644
--- a/tests/test_worker.py
+++ b/tests/test_worker.py
@@ -202,12 +202,16 @@ class TestWorker(RQTestCase):
q = Queue()
w = Worker([q])
w.register_birth()
- w.heartbeat()
last_heartbeat = self.testconn.hget(w.key, 'last_heartbeat')
self.assertTrue(last_heartbeat is not None)
w = Worker.find_by_key(w.key)
- self.assertIsInstance(w.last_heartbeat, datetime)
+ self.assertIsInstance(w.last_heartbeat, datetime)
+
+ # worker.refresh() shouldn't fail if last_heartbeat is None
+ # for compatibility reasons
+ self.testconn.hdel(w.key, 'last_heartbeat')
+ w.refresh()
def test_work_fails(self):
"""Failing jobs are put on the failed queue."""