Procházet zdrojové kódy

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

version-14
Nabin Hait před 8 roky
committed by GitHub
rodič
revize
37cd69b4df
1 změnil soubory, kde provedl 19 přidání a 7 odebrání
  1. +19
    -7
      frappe/email/queue.py

+ 19
- 7
frappe/email/queue.py Zobrazit soubor

@@ -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))

Načítá se…
Zrušit
Uložit