Fixed an issue where worker.refresh() may fail if last_heartbeat is not present in Redis.

main
Selwin Ong 7 years ago
parent 25ced943e1
commit 7b9c3b6b66

@ -540,7 +540,10 @@ class Worker(object):
queues = as_text(queues) queues = as_text(queues)
self._state = as_text(state or '?') self._state = as_text(state or '?')
self._job_id = job_id or None self._job_id = job_id or None
if last_heartbeat:
self.last_heartbeat = utcparse(as_text(last_heartbeat)) self.last_heartbeat = utcparse(as_text(last_heartbeat))
else:
self.last_heartbeat = None
self.birth_date = utcparse(as_text(birth)) self.birth_date = utcparse(as_text(birth))
if failed_job_count: if failed_job_count:
self.failed_job_count = int(as_text(failed_job_count)) self.failed_job_count = int(as_text(failed_job_count))

@ -202,13 +202,17 @@ class TestWorker(RQTestCase):
q = Queue() q = Queue()
w = Worker([q]) w = Worker([q])
w.register_birth() w.register_birth()
w.heartbeat()
last_heartbeat = self.testconn.hget(w.key, 'last_heartbeat') last_heartbeat = self.testconn.hget(w.key, 'last_heartbeat')
self.assertTrue(last_heartbeat is not None) self.assertTrue(last_heartbeat is not None)
w = Worker.find_by_key(w.key) 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): def test_work_fails(self):
"""Failing jobs are put on the failed queue.""" """Failing jobs are put on the failed queue."""
q = Queue() q = Queue()

Loading…
Cancel
Save