Save date in redis on which worker receives a warm shutdown request while busy

main
Christophe Olinger 9 years ago
parent 2485334100
commit d622f47aff

@ -257,6 +257,12 @@ class Worker(object):
p.expire(self.key, 60) p.expire(self.key, 60)
p.execute() 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 @property
def birth_date(self): def birth_date(self):
"""Fetches birth date from Redis.""" """Fetches birth date from Redis."""
@ -264,6 +270,13 @@ class Worker(object):
if birth_timestamp is not None: if birth_timestamp is not None:
return utcparse(as_text(birth_timestamp)) 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 @property
def death_date(self): def death_date(self):
"""Fetches death date from Redis.""" """Fetches death date from Redis."""
@ -357,9 +370,10 @@ class Worker(object):
self.log.warning(msg) self.log.warning(msg)
# If shutdown is requested in the middle of a job, wait until # 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': if self.get_state() == 'busy':
self._stop_requested = True self._stop_requested = True
self.set_warm_shutdown_requested_date()
self.log.debug('Stopping after current horse is finished. ' self.log.debug('Stopping after current horse is finished. '
'Press Ctrl+C again for a cold shutdown.') 'Press Ctrl+C again for a cold shutdown.')
else: else:

Loading…
Cancel
Save