diff options
| author | Barry Warsaw | 2016-03-24 09:55:18 -0400 |
|---|---|---|
| committer | Barry Warsaw | 2016-03-24 09:55:18 -0400 |
| commit | ce9370a537683e6e4e934b8018d0fe3f2aa7f9ac (patch) | |
| tree | 1c5ac62d66cfa75d6bf7abfb737ae401b49df2a8 /src/mailman/bin/master.py | |
| parent | 8169b60bc3d5b771f3676ae12c65f6f92c67a76a (diff) | |
| download | mailman-ce9370a537683e6e4e934b8018d0fe3f2aa7f9ac.tar.gz mailman-ce9370a537683e6e4e934b8018d0fe3f2aa7f9ac.tar.zst mailman-ce9370a537683e6e4e934b8018d0fe3f2aa7f9ac.zip | |
Diffstat (limited to 'src/mailman/bin/master.py')
| -rw-r--r-- | src/mailman/bin/master.py | 30 |
1 files changed, 11 insertions, 19 deletions
diff --git a/src/mailman/bin/master.py b/src/mailman/bin/master.py index 7adba8f4a..77caf6966 100644 --- a/src/mailman/bin/master.py +++ b/src/mailman/bin/master.py @@ -17,12 +17,6 @@ """Master subprocess watcher.""" -__all__ = [ - 'Loop', - 'main', - ] - - import os import sys import errno @@ -34,6 +28,7 @@ from datetime import timedelta from enum import Enum from flufl.lock import Lock, NotLockedError, TimeOutError from lazr.config import as_boolean +from mailman import public from mailman.config import config from mailman.core.i18n import _ from mailman.core.logging import reopen @@ -52,7 +47,6 @@ PRESERVE_ENVS = ( ) - class MasterOptions(Options): """Options for the master watcher.""" @@ -111,7 +105,6 @@ given. The values for -r are passed straight through to bin/runner.""")) self.parser.error(_('Too many arguments')) - class WatcherState(Enum): """Enum for the state of the master process watcher.""" # No lock has been acquired by any process. @@ -200,7 +193,7 @@ The master lock could not be acquired because it appears as though another master is already running.""") elif status is WatcherState.stale_lock: # Hostname matches but the process does not exist. - program = sys.argv[0] + program = sys.argv[0] # flake8: noqa message = _("""\ The master lock could not be acquired. It appears as though there is a stale master lock. Try re-running $program with the --force flag.""") @@ -231,7 +224,6 @@ Exiting.""") config.options.parser.error(message) - class PIDWatcher: """A class which safely manages child process ids.""" @@ -291,7 +283,7 @@ class PIDWatcher: return self._pids.pop(pid, None) - +@public class Loop: """Main control loop class.""" @@ -307,33 +299,33 @@ class Loop: # Set up our signal handlers. Also set up a SIGALRM handler to # refresh the lock once per day. The lock lifetime is 1 day + 6 hours # so this should be plenty. - def sigalrm_handler(signum, frame): + def sigalrm_handler(signum, frame): # flake8: noqa self._lock.refresh() signal.alarm(SECONDS_IN_A_DAY) signal.signal(signal.SIGALRM, sigalrm_handler) signal.alarm(SECONDS_IN_A_DAY) # SIGHUP tells the runners to close and reopen their log files. - def sighup_handler(signum, frame): + def sighup_handler(signum, frame): # flake8: noqa reopen() for pid in self._kids: os.kill(pid, signal.SIGHUP) log.info('Master watcher caught SIGHUP. Re-opening log files.') signal.signal(signal.SIGHUP, sighup_handler) # SIGUSR1 is used by 'mailman restart'. - def sigusr1_handler(signum, frame): + def sigusr1_handler(signum, frame): # flake8: noqa for pid in self._kids: os.kill(pid, signal.SIGUSR1) log.info('Master watcher caught SIGUSR1. Exiting.') signal.signal(signal.SIGUSR1, sigusr1_handler) # SIGTERM is what init will kill this process with when changing run # levels. It's also the signal 'mailman stop' uses. - def sigterm_handler(signum, frame): + def sigterm_handler(signum, frame): # flake8: noqa for pid in self._kids: os.kill(pid, signal.SIGTERM) log.info('Master watcher caught SIGTERM. Exiting.') signal.signal(signal.SIGTERM, sigterm_handler) # SIGINT is what control-C gives. - def sigint_handler(signum, frame): + def sigint_handler(signum, frame): # flake8: noqa for pid in self._kids: os.kill(pid, signal.SIGINT) log.info('Master watcher caught SIGINT. Restarting.') @@ -401,8 +393,8 @@ class Loop: for runner_config in config.runner_configs: # Strip off the 'runner.' prefix. assert runner_config.name.startswith('runner.'), ( - 'Unexpected runner configuration section name: {0}'.format( - runner_config.name)) + 'Unexpected runner configuration section name: {}'.format( + runner_config.name)) runner_names.append(runner_config.name[7:]) # For each runner we want to start, find their config section, which # will tell us the name of the class to instantiate, along with the @@ -522,7 +514,7 @@ Runner {0} reached maximum restart limit of {1:d}, not restarting.""", raise - +@public def main(): """Main process.""" |
