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