瀏覽代碼

Clear email query via separate query to avoid deadlock (#3418)

version-14
Nabin Hait 8 年之前
committed by GitHub
父節點
當前提交
37cd69b4df
共有 1 個檔案被更改,包括 19 行新增7 行删除
  1. +19
    -7
      frappe/email/queue.py

+ 19
- 7
frappe/email/queue.py 查看文件

@@ -456,10 +456,22 @@ def prepare_message(email, recipient, recipients_list):


def clear_outbox(): def clear_outbox():
"""Remove low priority older than 31 days in Outbox and expire mails not sent for 7 days. """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))

Loading…
取消
儲存