Patched for version 1.2.8
This commit is contained in:
@@ -6,8 +6,8 @@ import logging
|
||||
import os
|
||||
import traceback
|
||||
|
||||
from compat import StringIO
|
||||
from compat.models import GenericForeignKey
|
||||
from io import StringIO
|
||||
from django.contrib.contenttypes.fields import GenericForeignKey
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.db import models
|
||||
from django.db.models import Q
|
||||
@@ -50,14 +50,15 @@ class TaskManager(models.Manager):
|
||||
if queue:
|
||||
qs = qs.filter(queue=queue)
|
||||
ready = qs.filter(run_at__lte=now, failed_at=None)
|
||||
_priority_ordering = '{}priority'.format(app_settings.BACKGROUND_TASK_PRIORITY_ORDERING)
|
||||
_priority_ordering = '{}priority'.format(
|
||||
app_settings.BACKGROUND_TASK_PRIORITY_ORDERING)
|
||||
ready = ready.order_by(_priority_ordering, 'run_at')
|
||||
|
||||
if app_settings.BACKGROUND_TASK_RUN_ASYNC:
|
||||
currently_failed = self.failed().count()
|
||||
currently_locked = self.locked(now).count()
|
||||
count = app_settings.BACKGROUND_TASK_ASYNC_THREADS - \
|
||||
(currently_locked - currently_failed)
|
||||
(currently_locked - currently_failed)
|
||||
if count > 0:
|
||||
ready = ready[:count]
|
||||
else:
|
||||
@@ -102,7 +103,8 @@ class TaskManager(models.Manager):
|
||||
s = "%s%s" % (task_name, task_params)
|
||||
task_hash = sha1(s.encode('utf-8')).hexdigest()
|
||||
if remove_existing_tasks:
|
||||
Task.objects.filter(task_hash=task_hash, locked_at__isnull=True).delete()
|
||||
Task.objects.filter(task_hash=task_hash,
|
||||
locked_at__isnull=True).delete()
|
||||
return Task(task_name=task_name,
|
||||
task_params=task_params,
|
||||
task_hash=task_hash,
|
||||
@@ -251,13 +253,14 @@ class Task(models.Model):
|
||||
self.failed_at = timezone.now()
|
||||
logger.warning('Marking task %s as failed', self)
|
||||
completed = self.create_completed_task()
|
||||
task_failed.send(sender=self.__class__, task_id=self.id, completed_task=completed)
|
||||
task_failed.send(sender=self.__class__,
|
||||
task_id=self.id, completed_task=completed)
|
||||
self.delete()
|
||||
else:
|
||||
backoff = timedelta(seconds=(self.attempts ** 4) + 5)
|
||||
self.run_at = timezone.now() + backoff
|
||||
logger.warning('Rescheduling task %s for %s later at %s', self,
|
||||
backoff, self.run_at)
|
||||
backoff, self.run_at)
|
||||
task_rescheduled.send(sender=self.__class__, task=self)
|
||||
self.locked_by = None
|
||||
self.locked_at = None
|
||||
@@ -330,9 +333,6 @@ class Task(models.Model):
|
||||
db_table = 'background_task'
|
||||
|
||||
|
||||
|
||||
|
||||
|
||||
class CompletedTaskQuerySet(models.QuerySet):
|
||||
|
||||
def created_by(self, creator):
|
||||
@@ -389,7 +389,8 @@ class CompletedTask(models.Model):
|
||||
# when the task should be run
|
||||
run_at = models.DateTimeField(db_index=True)
|
||||
|
||||
repeat = models.BigIntegerField(choices=Task.REPEAT_CHOICES, default=Task.NEVER)
|
||||
repeat = models.BigIntegerField(
|
||||
choices=Task.REPEAT_CHOICES, default=Task.NEVER)
|
||||
repeat_until = models.DateTimeField(null=True, blank=True)
|
||||
|
||||
# the "name" of the queue this is to be run on
|
||||
|
||||
Reference in New Issue
Block a user