ListArchivers of mailing lists get corrupted.
Basically I'm having this exact issue.
Sometimes when a message is sent to one of the mailinglists, the message gets shunted and I see the following error in the mailmanlog.
Dec 30 15:48:26 2019 (2204) Traceback (most recent call last):
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 173, in _one_iteration
self._process_one_file(msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/core/runner.py", line 266, in _process_one_file
keepqueued = self._dispose(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/runners/outgoing.py", line 93, in _dispose
self._func(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/deliver.py", line 86, in deliver
refused = agent.deliver(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/bulk.py", line 100, in deliver
self.decorate(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/mta/decorating.py", line 32, in decorate
decorator.process(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/handlers/decorate.py", line 264, in process
process(mlist, msg, msgdata)
File "/usr/local/lib/python3.6/site-packages/mailman/handlers/decorate.py", line 73, in process
for archiver in IListArchiverSet(mlist).archivers:
File "/usr/local/lib/python3.6/site-packages/zope.component-4.4.1-py3.6.egg/zope/component/hookable.py", line 33, in __call__
return self.__implementation(*args, **kw)
File "/usr/local/lib/python3.6/site-packages/zope.component-4.4.1-py3.6.egg/zope/component/_api.py", line 156, in adapter_hook
return sitemanager.queryAdapter(object, interface, name, default)
File "/usr/local/lib/python3.6/site-packages/zope.interface-4.4.3-py3.6-linux-x86_64.egg/zope/interface/registry.py", line 348, in queryAdapter
return self.adapters.queryAdapter(object, interface, name, default)
File "/usr/local/lib/python3.6/site-packages/mailman/database/transaction.py", line 85, in wrapper
return function(args[0], config.db.store, *args[1:], **kws)
File "/usr/local/lib/python3.6/site-packages/mailman/model/mailinglist.py", line 612, in __init__
ListArchiver.name == archiver_name).one_or_none()
File "/usr/local/lib/python3.6/site-packages/sqlalchemy/orm/query.py", line 3278, in one_or_none
"Multiple rows were found for one_or_none()"
Any following messages to this same mailinglist also get shunted. Somehow the mailinglist ends up with two mhonarc
archivers, and this causes every message to get shunted. I'm not sure why it always is a mhonarc
archiver. I'm also not sure how to go about debugging this problem. I have written a script which detects and fixes it, but it doesn't stop the problem from reappearing.
The script is as follows:
from mailman.interfaces.listmanager import IListManager
from zope.component import getUtility
from mailman.config import config
from mailman.model.mailinglist import ListArchiver
def get_list_manager():
return getUtility(IListManager)
def get_mhonarc_archivers(mlist, thedb):
return list(thedb.query(ListArchiver).filter(ListArchiver.mailing_list == mlist, ListArchiver.name == 'mhonarc'))
def remove_last(archivers, mlist, thedb):
lastid = archivers[1].id
thedb.query(ListArchiver).filter(ListArchiver.mailing_list == mlist, ListArchiver.name == 'mhonarc', ListArchiver.id == lastid).delete()
def do_the_thing(mlists, thedb):
do_commit = False
for mlist in mlists:
mhonarcs = get_mhonarc_archivers(mlist, thedb)
if len(mhonarcs) > 1:
print("{} has {}".format(mlist.fqdn_listname, len(mhonarcs)))
remove_last(mhonarcs, mlist, thedb)
do_commit = True
return do_commit
listmgr = get_list_manager()
mlists = list(listmgr.mailing_lists)
store = config.db.store
print()
do_commit = do_the_thing(mlists, store)
if do_commit:
store.commit()
Let me know if there is anything else I can provide!