~sambuddhabasu1/mailman/fix_mailman_run_error

« back to all changes in this revision

Viewing changes to src/mailman/interfaces/runner.py

  • Committer: Barry Warsaw
  • Date: 2013-06-17 13:36:43 UTC
  • Revision ID: barry@list.org-20130617133643-uj7atdykh2whwabw
 * `bin/runner` command has been simplified and its command line options
   reduced.  Now, only one `-r/--runner` option may be provided and the
   round-robin feature has been removed.
 * Fixed REST server crash on `reopen` command.  Identification and test
   provided by Aurélien Bompard.  (LP: #1184376)

Also:

 * bin/runner now uses standard argparse instead of ScriptOptions.
 * The entire bin/runner machinery has bee reorganized and simplified.  There
 * is no more Loop class.  Signal setting is moved directly into the base
   Runner class and overrided in specific subclasses (e.g. RESTRunner which
   must cleanly shutdown its TCPServer).  The runner exit status is now set
   directly on the Runner instance.
 * Fixed a few minor style issues.
 * In order to cleanly shutdown the RESTRunner's WSGI server, we must start a
   subthread which only watches for an Event and then calls the server's
   shutdown() method.  It has to be this way because the WSGI server itself
   (due to interactions with SQLite), and the signal handlers (due to Python's
   signal handling semantics) must both run in the main thread.  However, the
   shutdown() must be invoked from a subthread in order to prevent deadlock.
 * Refactor the RESTLayer to eliminate duplication of code.

Show diffs side-by-side

added added

removed removed

Lines of Context:
63
63
        through the main loop.
64
64
        """)
65
65
 
66
 
    # BAW 2013-05-30: but see LP: #1184376 for why this perhaps should be
67
 
    # removed entirely.
68
 
    intercept_signals = Attribute("""\
69
 
        Should the runner mechanism intercept signals?
 
66
    def set_signals():
 
67
        """Set up the signal handlers necessary to control the runner.
70
68
 
71
 
        In general, the runner catches SIGINT, SIGTERM, SIGUSR1, and SIGHUP to
72
 
        manage the process.  Some runners need to manage their own signals,
73
 
        and set this attribute to False.
74
 
        """)
 
69
        The runner should catch the following signals:
 
70
        - SIGTERM and SIGINT: treated exactly the same, they cause the runner
 
71
          to exit with no restart from the master.
 
72
        - SIGUSR1: Also causes the runner to exit, but the master watcher will
 
73
          retart it.
 
74
        - SIGHUP: Re-open the log files.
 
75
        """
75
76
 
76
77
    def _one_iteration():
77
78
        """The work done in one iteration of the main loop.