Skip to content

2016 12 09 postmortem e maillijsten

Gerdriaan Mulder edited this page Dec 9, 2016 · 2 revisions

Postmortem storing in e-maillijsten

Op 8 december 2016 bleek dat de e-maillijsten niet waren gemigreerd. Dit hield onder meer in dat bestaande lijsten niet werden bijgewerkt. Door een andere storing werden e-mails überhaupt niet goed afgeleverd. Hieronder volgt een beschrijving van dit probleem en hoe het is opgelost.

Verhaaltje

Op 8 december rond 17:22 vroeg @sversteeg of de e-maillijsten nog werkten. Na een dump van list_members weekend bleek dat dit niet de juiste mensen waren. Om 17:30 was vastgesteld dat de synchronisatie van de mailinglists niet was overgezet. Om 17:41 bleek dat er nog 181 e-mails in de queue stonden met als melding een milter-reject. Vermoeden was dat DKIM in de weg zat en dat werd snel bevestigd: concrexit draait vanaf een IP-adres dat niet in TrustedHosts van OpenDKIM stond [achteraf gezien was het waarschijnlijk alleen de private key, zie verder].

Om 17:56 zijn de e-maillijsten uit concrete5 gemigreerd naar concrexit.

Om 18:28 werd besloten even OpenDKIM uit te zetten zodat alle e-mails die nog in de queue stonden bezorgd konden worden. Kort daarna (18:29) is OpenDKIM weer aangezet. Rond 19:01 werd e-mail nog steeds niet goed doorgelaten. Rond 19:20 was extra logging aangezet bij OpenDKIM en bleek dat de private key voor thalia.nu (waarmee e-mail wordt ondertekend) niet gelezen kon worden:

Dec  8 19:18:52 ivo opendkim[17965]: can't load key from /etc/opendkim/keys/thalia.nu/default.private: Permission denied

De permissies zijn daarna rechtgezet (owner/group van root:root omgezet naar opendkim:opendkim en permissies -rw-------, of 600, laten stan). Oorzaak van de verandering van deze permissies is nog niet gevonden. Om 19:25 werd bevestigd dat een bewuste crash in Django direct een e-mail opleverde.

Om 20:25 is een synchronisatie met het bestaande syncmailinglists.py gedaan. Ter bevestiging werd @sversteeg gevraagd of de leden van weekend de juiste waren. Dit bleek niet het geval: er zaten véél meer mensen in. Rond 20:38 werd geconstateerd dat de mailinglist-API alle leden van een commissie teruggaf, in plaats van alleen de actieve. Om 21:16 is hiervoor een fix gevonden. Om 21:50 is dit richting productie gegaan.

Rond 23:32 werd een controle uitgevoerd; de synchronisatie via syncmailinglists.py leverde een HTTP 500 op:

Internal Server Error: /mailinglists/

FieldError at /mailinglists/
Cannot resolve keyword 'commiteemembership' into field. Choices are: address_city, address_postal_code, address_street, address_street2, bank_account, birthday, committee, committeemembership, direct_debit_authorized, display_name_preference, emergency_contact, emergency_contact_phone_number, event_permissions, id, initials, language, mailinglist, mentorship, nickname, order, phone_number, photo, profile_description, programme, receive_newsletter, receive_optin, registration, show_birthday, starting_year, student_number, user, user_id, website

Er bleek een typo gemaakt te zijn. Om 01:50 (we leven inmiddels op 9 december 2016) werd dit bevestigd en rond 02:32 was dit opgelost.

Tijdlijn

  • 8 december 2016
    • 17:22 inkomende vraag of e-maillijsten nog werkten
    • 17:30 bevestiging dat synchronisatie van e-maillijsten niet is overgezet
    • 17:41 constatering van 181 e-mails in de queue
    • 17:56 e-maillijsten uit concrete5 overgezet naar concrexit
    • 18:28 OpenDKIM (e-mailondertekening) uitgezet
    • 18:28 e-mailqueue geflusht
    • 18:29 OpenDKIM weer aangezet
    • 19:01 e-mail wordt nog steeds niet doorgelaten
    • 19:20 extra logging aangezet en probleem gevonden: private key onleesbaar
    • 19:25 bevestiging dat e-mail weer werkt
    • 20:25 poging tot e-maillijstsynchronisatie, dit werkte niet naar behoren
    • 20:38 bevestiging dat alle (oud-)leden van een commissie in een e-maillijst terechtkwamen
    • 21:16 fix gevonden
    • 21:50 fix in productie
    • 23:32 controle van de fix, dit leverde een foutmelding op
  • 9 december 2016
    • 01:50 bevestiging dat de fix niet goed was
    • 02:32 fout opgelost en in productie
Clone this wiki locally