From 5846954ba153132bed07f98aefa9e60353f70d2c Mon Sep 17 00:00:00 2001 From: Jason Separovic <jason.separovic@nokia.com> Date: Wed, 20 Jul 2022 17:35:33 -0700 Subject: [PATCH] add maxbackoff to limit the interval between retries --- supervisor/options.py | 4 +++- supervisor/process.py | 3 ++- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/supervisor/options.py b/supervisor/options.py index 20c1b07aa..40ae6db3d 100644 --- a/supervisor/options.py +++ b/supervisor/options.py @@ -925,6 +925,7 @@ def get(section, opt, *args, **kwargs): autorestart = auto_restart(get(section, 'autorestart', 'unexpected')) startsecs = integer(get(section, 'startsecs', 1)) startretries = integer(get(section, 'startretries', 3)) + maxbackoff = integer(get(section, 'maxbackoff', 60)) stopsignal = signal_number(get(section, 'stopsignal', 'TERM')) stopwaitsecs = integer(get(section, 'stopwaitsecs', 10)) stopasgroup = boolean(get(section, 'stopasgroup', 'false')) @@ -1047,6 +1048,7 @@ def get(section, opt, *args, **kwargs): autorestart=autorestart, startsecs=startsecs, startretries=startretries, + maxbackoff=maxbackoff, uid=uid, stdout_logfile=logfiles['stdout_logfile'], stdout_capture_maxbytes = stdout_cmaxbytes, @@ -1879,7 +1881,7 @@ def __repr__(self): class ProcessConfig(Config): req_param_names = [ 'name', 'uid', 'command', 'directory', 'umask', 'priority', - 'autostart', 'autorestart', 'startsecs', 'startretries', + 'autostart', 'autorestart', 'startsecs', 'startretries', 'maxbackoff', 'stdout_logfile', 'stdout_capture_maxbytes', 'stdout_events_enabled', 'stdout_syslog', 'stdout_logfile_backups', 'stdout_logfile_maxbytes', diff --git a/supervisor/process.py b/supervisor/process.py index b394be812..3f461ff42 100644 --- a/supervisor/process.py +++ b/supervisor/process.py @@ -168,7 +168,8 @@ def change_state(self, new_state, expected=True): self.state = new_state if new_state == ProcessStates.BACKOFF: now = time.time() - self.backoff += 1 + if self.backoff < self.config.maxbackoff: + self.backoff += 1 self.delay = now + self.backoff event_class = self.event_map.get(new_state)