The qrunner-master lock file causes issues when running clustered
Affects | Status | Importance | Assigned to | Milestone | |
---|---|---|---|---|---|
GNU Mailman |
Fix Released
|
Low
|
Mark Sapiro |
Bug Description
Hi
It is possible to run mailman in a failover or load balancing cluster, see:
http://
When running a cluster, it is crucial to use:
* a shared directory for archive data
* a shared directory for locks
* separate directories for each qrunner
This is possible to implement by setting the directories in mm_cfg.py, for example like this (where <host> is a host name):
VAR_PREFIX = '<shared dir>'
LIST_DATA_DIR = os.path.
LOCK_DIR = os.path.
DATA_DIR = os.path.
SPAM_DIR = os.path.
LOG_DIR = os.path.
PUBLIC_
PRIVATE_
# For qfiles and logs, <dir>-<host> is used to avoid conflicts
QUEUE_DIR = os.path.
INQUEUE_DIR = os.path.
OUTQUEUE_DIR = os.path.
CMDQUEUE_DIR = os.path.
BOUNCEQUEUE_DIR = os.path.
NEWSQUEUE_DIR = os.path.
ARCHQUEUE_DIR = os.path.
SHUNTQUEUE_DIR = os.path.
VIRGINQUEUE_DIR = os.path.
BADQUEUE_DIR = os.path.
RETRYQUEUE_DIR = os.path.
MAILDIR_DIR = os.path.
Unfortunately, the master-qrunner lock causes problem with this setup. mailmanctl -s starts even if there is a master-qrunner file (provided that there is no running mailmanctl on the host), making it possible to get the service up and running on more than one host. Once a day however, mailmanctl controls the lock. If it does not have it, it shuts down. If you are running a cluster, at least one of the nodes will not have the lock, and the service will be shut down on that node.
To solve this, I propose that the the LOCKFILE name in mailmanctl becomes configurable, so instead of having:
LOCKFILE = os.path.
Have:
LOCKFILE = os.path.
Then add LOCKFILE = 'master-qrunner' in Defaults.py.
This would make it easy to have individual qrunner master lock files for each node in a cluster.
Changed in mailman: | |
assignee: | nobody → Mark Sapiro (msapiro) |
importance: | Undecided → Low |
milestone: | none → 2.1.16 |
status: | New → Fix Committed |
Changed in mailman: | |
milestone: | 2.1.16 → 2.1.16rc1 |
status: | Fix Committed → Fix Released |