From d622f47affdfb064a49c8afc390c7618cf41765b Mon Sep 17 00:00:00 2001 From: Christophe Olinger Date: Fri, 11 Dec 2015 17:03:20 +0100 Subject: [PATCH] Save date in redis on which worker receives a warm shutdown request while busy --- rq/worker.py | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/rq/worker.py b/rq/worker.py index 8bcb02f..074cbc0 100644 --- a/rq/worker.py +++ b/rq/worker.py @@ -257,6 +257,12 @@ class Worker(object): p.expire(self.key, 60) p.execute() + def set_warm_shutdown_requested_date(self): + """Sets the date on which the worker received a warm shutdown request""" + with self.connection._pipeline() as p: + p.hset(self.key, 'warm_shutdown_requested_at', utcformat(utcnow())) + p.execute() + @property def birth_date(self): """Fetches birth date from Redis.""" @@ -264,6 +270,13 @@ class Worker(object): if birth_timestamp is not None: return utcparse(as_text(birth_timestamp)) + @property + def warm_shutdown_requested_date(self): + """Fetches warm_shutdown_requested_date from Redis.""" + warm_shutdown_requested_timestamp = self.connection.hget(self.key, 'warm_shutdown_requested_at') + if warm_shutdown_requested_timestamp is not None: + return utcparse(as_text(warm_shutdown_requested_timestamp)) + @property def death_date(self): """Fetches death date from Redis.""" @@ -357,9 +370,10 @@ class Worker(object): self.log.warning(msg) # If shutdown is requested in the middle of a job, wait until - # finish before shutting down + # finish before shutting down and save the request in redis if self.get_state() == 'busy': self._stop_requested = True + self.set_warm_shutdown_requested_date() self.log.debug('Stopping after current horse is finished. ' 'Press Ctrl+C again for a cold shutdown.') else: