From 6b33e66016db8845312166fe81724fc201e0546c Mon Sep 17 00:00:00 2001 From: Son Date: Mon, 1 Nov 2021 20:36:15 +0100 Subject: [PATCH] handle the case another matching with original_message_id was created in the mean time --- email_handler.py | 23 ++++++++++++++++++----- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/email_handler.py b/email_handler.py index 78cc2825..ba546800 100644 --- a/email_handler.py +++ b/email_handler.py @@ -46,6 +46,7 @@ from smtplib import SMTPRecipientsRefused from typing import List, Tuple, Optional import newrelic.agent +import sqlalchemy from aiosmtpd.controller import Controller from aiosmtpd.smtp import Envelope from email_validator import validate_email, EmailNotValidError @@ -1125,13 +1126,25 @@ def replace_original_message_id(alias: Alias, email_log: EmailLog, msg: Message) str(email_log.id), get_email_domain_part(alias.email) ) LOG.d("create a new sl_message_id %s", sl_message_id) - MessageIDMatching.create( - sl_message_id=sl_message_id, - original_message_id=original_message_id, - email_log_id=email_log.id, - ) + try: + MessageIDMatching.create( + sl_message_id=sl_message_id, + original_message_id=original_message_id, + email_log_id=email_log.id, + commit=True, + ) + except IntegrityError: + LOG.w( + "another matching with original_message_id %s was created in the mean time", + original_message_id, + ) + Session.rollback() + matching = MessageIDMatching.get_by(original_message_id=original_message_id) + sl_message_id = matching.sl_message_id + del msg[headers.MESSAGE_ID] msg[headers.MESSAGE_ID] = sl_message_id + email_log.sl_message_id = sl_message_id Session.commit()