Bladeren bron

[fix] [bulk] optimize query

version-14
Rushabh Mehta 9 jaren geleden
bovenliggende
commit
f8709e79ef
3 gewijzigde bestanden met toevoegingen van 18 en 8 verwijderingen
  1. +15
    -6
      frappe/email/bulk.py
  2. +2
    -2
      frappe/email/doctype/bulk_email/bulk_email.json
  3. +1
    -0
      frappe/model/db_query.py

+ 15
- 6
frappe/email/bulk.py Bestand weergeven

@@ -252,13 +252,22 @@ def flush(from_test=False):
frappe.db.sql("""update `tabBulk Email` set status='Expired'
where datediff(curdate(), creation) > 3 and status='Not Sent'""", auto_commit=auto_commit)

def get_email(priority):
out = frappe.db.sql("""select * from `tabBulk Email` where
status='Not Sent' and send_after < %s and priority = %s
order by creation asc limit 1 for update""", (now_datetime(), priority), as_dict=1)
return out and out[0][0] or None

for i in xrange(500):
email = frappe.db.sql("""select * from `tabBulk Email` where
status='Not Sent' and send_after < %s
order by priority desc, creation asc limit 1 for update""", now_datetime(), as_dict=1)
if email:
email = email[0]
else:
# indexing on multiple keys is slow, so query twice
# get high priority emails
email = get_email(1)
if not email:
# get low priority emails
email = get_email(0)

if not email:
# done, no more emails to fly
break

send_one(email, smtpserver, auto_commit)


+ 2
- 2
frappe/email/doctype/bulk_email/bulk_email.json Bestand weergeven

@@ -257,7 +257,7 @@
"read_only": 1,
"report_hide": 0,
"reqd": 0,
"search_index": 0,
"search_index": 1,
"set_only_once": 0,
"unique": 0
}
@@ -272,7 +272,7 @@
"issingle": 0,
"istable": 0,
"max_attachments": 0,
"modified": "2016-05-25 10:45:09.293669",
"modified": "2016-05-25 11:36:54.912752",
"modified_by": "Administrator",
"module": "Email",
"name": "Bulk Email",


+ 1
- 0
frappe/model/db_query.py Bestand weergeven

@@ -64,6 +64,7 @@ class DatabaseQuery(object):
self.join = join
self.distinct = distinct
self.as_list = as_list
self.ignore_ifnull = ignore_ifnull
self.flags.ignore_permissions = ignore_permissions
self.user = user or frappe.session.user



Laden…
Annuleren
Opslaan