Banktransfer: Add retry in import task

This commit is contained in:
Raphael Michel
2016-10-18 18:37:29 +02:00
parent d82e159ffc
commit 37723c0d41

View File

@@ -3,6 +3,7 @@ import logging
import re
from decimal import Decimal
from celery.exceptions import MaxRetriesExceededError
from django.conf import settings
from django.db import transaction
from django.utils.translation import ugettext_noop
@@ -10,6 +11,7 @@ from django.utils.translation import ugettext_noop
from pretix.base.i18n import language
from pretix.base.models import Event, Order, Quota
from pretix.base.services.async import TransactionAwareTask
from pretix.base.services.locking import LockTimeoutException
from pretix.base.services.mail import SendMailException
from pretix.base.services.orders import mark_order_paid
from pretix.celery import app
@@ -96,8 +98,8 @@ def _get_unknown_transactions(event: Event, job: BankImportJob, data: list):
return transactions
@app.task(base=TransactionAwareTask)
def process_banktransfers(event: int, job: int, data: list) -> None:
@app.task(base=TransactionAwareTask, bind=True, max_retries=5, default_retry_delay=1)
def process_banktransfers(self, event: int, job: int, data: list) -> None:
with language("en"): # We'll translate error messages at display time
event = Event.objects.get(pk=event)
job = BankImportJob.objects.get(pk=job)
@@ -123,6 +125,13 @@ def process_banktransfers(event: int, job: int, data: list) -> None:
else:
trans.state = BankTransaction.STATE_NOMATCH
trans.save()
except LockTimeoutException:
try:
self.retry()
except MaxRetriesExceededError:
logger.exception('Maximum number of retries exceeded for task.')
job.state = BankImportJob.STATE_ERROR
job.save()
except Exception as e:
job.state = BankImportJob.STATE_ERROR
job.save()