Add transaction handling to the interval sources

Adds transaction handling to the delete and save methods.

Signed-off-by: Roberto Rosario <roberto.rosario@mayan-edms.com>
This commit is contained in:
Roberto Rosario
2019-12-17 01:37:12 -04:00
parent 675c1e5a30
commit 63d0144591
2 changed files with 19 additions and 15 deletions

View File

@@ -15,6 +15,8 @@
- Delete periodic task on document type delete. Closes Gitlab
issue #715. Thanks to Rob de Canha-Knight (@rssfed23) for the
report and research.
- Add transaction handling to the interval sources delete and save
methods.
3.3.5 (2019-12-13)
==================

View File

@@ -217,26 +217,28 @@ class IntervalBaseModel(OutOfProcessSource):
def delete(self, *args, **kwargs):
pk = self.pk
super(IntervalBaseModel, self).delete(*args, **kwargs)
self._delete_periodic_task(pk=pk)
with transaction.atomic():
super(IntervalBaseModel, self).delete(*args, **kwargs)
self._delete_periodic_task(pk=pk)
def save(self, *args, **kwargs):
new_source = not self.pk
super(IntervalBaseModel, self).save(*args, **kwargs)
with transaction.atomic():
super(IntervalBaseModel, self).save(*args, **kwargs)
if not new_source:
self._delete_periodic_task()
if not new_source:
self._delete_periodic_task()
interval_instance, created = IntervalSchedule.objects.get_or_create(
every=self.interval, period='seconds'
)
# Create a new interval or reuse someone else's
PeriodicTask.objects.create(
name=self._get_periodic_task_name(),
interval=interval_instance,
task='mayan.apps.sources.tasks.task_check_interval_source',
kwargs=json.dumps({'source_id': self.pk})
)
interval_instance, created = IntervalSchedule.objects.get_or_create(
every=self.interval, period='seconds'
)
# Create a new interval or reuse someone else's
PeriodicTask.objects.create(
name=self._get_periodic_task_name(),
interval=interval_instance,
task='mayan.apps.sources.tasks.task_check_interval_source',
kwargs=json.dumps({'source_id': self.pk})
)
class SourceLog(models.Model):