Fixed PHP timeout option merging bug
This commit is contained in:
parent
cf3dd5f373
commit
95edd9e31c
|
@ -7,18 +7,19 @@ from django.db.models import Q
|
|||
from django.utils import timezone
|
||||
from django.utils.encoding import smart_str
|
||||
|
||||
from orchestra.utils.sys import LockFile
|
||||
from orchestra.utils.sys import LockFile, OperationLocked
|
||||
|
||||
from . import settings
|
||||
from .models import Message
|
||||
|
||||
|
||||
def send_message(message, num=0, connection=None, bulk=100):
|
||||
def send_message(message, num=0, connection=None, bulk=settings.MAILER_BULK_MESSAGES):
|
||||
if num >= bulk and connection is not None:
|
||||
connection.close()
|
||||
connection = None
|
||||
if connection is None:
|
||||
# Reset connection with django
|
||||
num = 0
|
||||
connection = get_connection(backend='django.core.mail.backends.smtp.EmailBackend')
|
||||
connection.open()
|
||||
error = None
|
||||
|
@ -34,19 +35,22 @@ def send_message(message, num=0, connection=None, bulk=100):
|
|||
message.log(error)
|
||||
|
||||
|
||||
def send_pending(bulk=100):
|
||||
with LockFile('/dev/shm/mailer.send_pending.lock'):
|
||||
connection = None
|
||||
num = 0
|
||||
for message in Message.objects.filter(state=Message.QUEUED).order_by('priority'):
|
||||
send_message(message, num, connection, bulk)
|
||||
num += 1
|
||||
now = timezone.now()
|
||||
qs = Q()
|
||||
for retries, seconds in enumerate(settings.MAILER_DEFERE_SECONDS):
|
||||
delta = timedelta(seconds=seconds)
|
||||
qs = qs | Q(retries=retries, last_retry__lte=now-delta)
|
||||
for message in Message.objects.filter(state=Message.DEFERRED).filter(qs).order_by('priority'):
|
||||
send_message(message, num, connection, bulk)
|
||||
if connection is not None:
|
||||
connection.close()
|
||||
def send_pending(bulk=settings.MAILER_BULK_MESSAGES):
|
||||
try:
|
||||
with LockFile('/dev/shm/mailer.send_pending.lock'):
|
||||
connection = None
|
||||
num = 0
|
||||
for message in Message.objects.filter(state=Message.QUEUED).order_by('priority'):
|
||||
send_message(message, num, connection, bulk)
|
||||
num += 1
|
||||
now = timezone.now()
|
||||
qs = Q()
|
||||
for retries, seconds in enumerate(settings.MAILER_DEFERE_SECONDS):
|
||||
delta = timedelta(seconds=seconds)
|
||||
qs = qs | Q(retries=retries, last_retry__lte=now-delta)
|
||||
for message in Message.objects.filter(state=Message.DEFERRED).filter(qs).order_by('priority'):
|
||||
send_message(message, num, connection, bulk)
|
||||
if connection is not None:
|
||||
connection.close()
|
||||
except OperationLocked:
|
||||
pass
|
||||
|
|
|
@ -17,3 +17,8 @@ MAILER_NON_QUEUED_PER_REQUEST_THRESHOLD = Setting('MAILER_NON_QUEUED_PER_REQUEST
|
|||
2,
|
||||
help_text=_("Number of emails that will be sent immediately before starting to queue them."),
|
||||
)
|
||||
|
||||
|
||||
MAILER_BULK_MESSAGES = Setting('MAILER_BULK_MESSAGES',
|
||||
500,
|
||||
)
|
||||
|
|
Loading…
Reference in New Issue