reviewer rockstar = Summary = Bug 435604 describes a critical problem we discovered while rolling out LP 3.0 on forster, the Mailman (and other) server. The problem is that with the move to buildout for a lot of our packages, the sys.path that the Mailman binary uses was not correct. The binary uses the system Python, not bin/py so none of the buildout eggs were visible to it. == Proposed fix == Extend the path hacking done in Mailman's mm_cfg.py to pick up the necessary buildout eggs. Do this by importing _pythonpath. == Pre-implementation notes == Discussion during cowboy rollout with gary, spm, and stub. == Implementation details == Along the way, I updated all the MailmanLayer tests. These should all pass now, with the usual caveat that these tests are flaky. That's why we don't run them as part of our normal test suite. == Tests == To test the specific critical fix in this branch, run: % bin/test -vv --layer=MailmanLayer -t basic-integration To see that all the tests have been updated for LP 3.0, run: % bin/test -vv --layer=MailmanLayer You may get spurious failures from the above. Your choices are to run each test in lib/lp/services/mailman/doc separately, or/and do 'make clean && make' between each run. == Demo and Q/A == No demo or Q/A. Once we cherry pick this onto forster, if the mailing lists work, we're gold. = Launchpad lint = Checking for conflicts. and issues in doctests and templates. Running jslint, xmllint, pyflakes, and pylint. Using normal rules. Linting changed files: lib/lp/services/mailman/doc/logging.txt lib/lp/services/mailman/doc/subscriptions.txt lib/canonical/launchpad/mailman/monkeypatches/__init__.py lib/lp/services/mailman/testing/logwatcher.py lib/lp/services/mailman/doc/postings.txt lib/lp/services/mailman/doc/bounces.txt lib/lp/services/mailman/doc/basic-integration.txt lib/lp/services/mailman/doc/decorations.txt lib/lp/services/mailman/doc/messages.txt lib/lp/services/mailman/doc/recovery.txt lib/lp/services/mailman/doc/reactivate-lists.txt lib/lp/services/mailman/doc/create-lists.txt lib/canonical/launchpad/mailman/monkeypatches/mm_cfg.py.in lib/lp/services/mailman/doc/contact-address.txt lib/lp/services/mailman/doc/staging.txt lib/lp/services/mailman/testing/helpers.py lib/lp/services/mailman/doc/modify-lists.txt == Pyflakes Doctest notices == lib/lp/services/mailman/doc/logging.txt 70: undefined name 'error_watcher' 71: undefined name 'error_watcher' 74: undefined name 'error_watcher' 75: undefined name 'error_watcher' lib/lp/services/mailman/doc/postings.txt 14: undefined name 'smtpd' 35: undefined name 'vette_watcher' 36: undefined name 'smtpd' 73: undefined name 'vette_watcher' 74: undefined name 'smtpd' 88: undefined name 'smtpd' 89: undefined name 'smtpd' 99: undefined name 'vette_watcher' 103: undefined name 'smtpd_watcher' 104: undefined name 'smtpd' 156: undefined name 'Browser' 168: undefined name 'smtpd_watcher' 169: undefined name 'smtpd' 212: undefined name 'vette_watcher' 213: undefined name 'smtpd' 244: undefined name 'smtpd' 259: undefined name 'vette_watcher' 260: undefined name 'smtpd' 306: undefined name 'smtpd_watcher' 307: undefined name 'smtpd' 378: undefined name 'smtpd_watcher' 382: undefined name 'smtpd' 405: undefined name 'mhonarc_watcher' 434: undefined name 'smtpd_watcher' 435: undefined name 'smtpd_watcher' 436: undefined name 'smtpd' 486: undefined name 'mhonarc_watcher' 501: undefined name 'vette_watcher' 502: undefined name 'smtpd' 522: undefined name 'smtpd_watcher' 523: undefined name 'smtpd_watcher' 524: undefined name 'smtpd' 595: undefined name 'vette_watcher' 596: undefined name 'smtpd' 639: undefined name 'smtpd_watcher' 640: undefined name 'smtpd_watcher' 641: undefined name 'smtpd' 670: undefined name 'smtpd' 686: undefined name 'vette_watcher' 712: undefined name 'smtpd_watcher' 713: undefined name 'smtpd_watcher' 740: undefined name 'smtpd_watcher' 741: undefined name 'smtpd_watcher' 766: undefined name 'vette_watcher' 781: undefined name 'smtpd_watcher' 782: undefined name 'smtpd_watcher' 786: undefined name 'smtpd' 795: undefined name 'smtpd_watcher' 796: undefined name 'smtpd_watcher' 797: undefined name 'smtpd' 832: undefined name 'vette_watcher' 833: undefined name 'smtpd' 857: undefined name 'vette_watcher' 871: undefined name 'smtpd_watcher' 872: undefined name 'smtpd_watcher' 899: undefined name 'vette_watcher' lib/lp/services/mailman/doc/bounces.txt 43: undefined name 'bounce_watcher' 44: undefined name 'bounce_watcher' lib/lp/services/mailman/doc/basic-integration.txt 47: undefined name 'smtpd' 82: undefined name 'smtpd_watcher' 83: undefined name 'smtpd' lib/lp/services/mailman/doc/decorations.txt 18: undefined name 'smtpd' 30: undefined name 'smtpd_watcher' 31: undefined name 'smtpd_watcher' 49: undefined name 'smtpd' 117: undefined name 'Browser' lib/lp/services/mailman/doc/recovery.txt 16: undefined name 'Browser' lib/lp/services/mailman/doc/reactivate-lists.txt 17: undefined name 'Browser' lib/lp/services/mailman/doc/create-lists.txt 11: undefined name 'Browser' lib/lp/services/mailman/doc/contact-address.txt 15: undefined name 'smtpd' 25: undefined name 'Browser' 59: undefined name 'smtpd_watcher' 60: undefined name 'smtpd_watcher' 61: undefined name 'smtpd_watcher' 63: undefined name 'smtpd' 165: undefined name 'smtpd_watcher' 170: undefined name 'smtpd_watcher' 171: undefined name 'smtpd_watcher' 172: undefined name 'smtpd' 251: undefined name 'smtpd_watcher' 252: undefined name 'smtpd_watcher' 260: undefined name 'smtpd' 327: undefined name 'smtpd_watcher' 328: undefined name 'smtpd_watcher' 329: undefined name 'smtpd' lib/lp/services/mailman/doc/staging.txt 31: undefined name 'Browser' 52: undefined name 'smtpd' 65: undefined name 'smtpd_watcher' 78: undefined name 'smtpd_watcher' 91: undefined name 'smtpd_watcher' 104: undefined name 'smtpd_watcher' 107: undefined name 'smtpd' 144: undefined name 'qrunner_watcher' 194: 'from subprocess import *' used; unable to detect undefined names lib/lp/services/mailman/doc/modify-lists.txt 11: undefined name 'Browser' == Pylint notices == lib/canonical/launchpad/mailman/monkeypatches/__init__.py 9: [F0401] Unable to import 'lazr.config' (No module named config)