From 37cd69b4dfa98cbc62d3710bcb22890698c8aa80 Mon Sep 17 00:00:00 2001 From: Nabin Hait Date: Fri, 2 Jun 2017 14:03:11 +0530 Subject: [PATCH] Clear email query via separate query to avoid deadlock (#3418) --- frappe/email/queue.py | 26 +++++++++++++++++++------- 1 file changed, 19 insertions(+), 7 deletions(-) diff --git a/frappe/email/queue.py b/frappe/email/queue.py index c153a3cec6..23a549d6e2 100755 --- a/frappe/email/queue.py +++ b/frappe/email/queue.py @@ -456,10 +456,22 @@ def prepare_message(email, recipient, recipients_list): def clear_outbox(): """Remove low priority older than 31 days in Outbox and expire mails not sent for 7 days. - - Called daily via scheduler.""" - frappe.db.sql("""delete q, r from `tabEmail Queue` as q, `tabEmail Queue Recipient` as r where q.name = r.parent and q.priority=0 and - datediff(now(), q.modified) > 31""") - - frappe.db.sql("""update `tabEmail Queue` as q, `tabEmail Queue Recipient` as r set q.status='Expired', r.status='Expired' - where q.name = r.parent and datediff(curdate(), q.modified) > 7 and q.status='Not Sent' and r.status='Not Sent'""") + Called daily via scheduler. + Note: Used separate query to avoid deadlock + """ + + email_queues = frappe.db.sql_list("""select name from `tabEmail Queue` + where priority=0 and datediff(now(), modified) > 31""") + + if email_queues: + frappe.db.sql("""delete from `tabEmail Queue` where name in (%s)""" + % ','.join(['%s']*len(email_queues)), tuple(email_queues)) + + frappe.db.sql("""delete from `tabEmail Queue Recipient` where parent in (%s)""" + % ','.join(['%s']*len(email_queues)), tuple(email_queues)) + + for dt in ("Email Queue", "Email Queue Recipient"): + frappe.db.sql(""" + update `tab{0}` + set status='Expired' + where datediff(curdate(), modified) > 7 and status='Not Sent'""".format(dt)) \ No newline at end of file