From d98c33e5eddce0a883e46e2eaabe7e381cb638be Mon Sep 17 00:00:00 2001 From: Eliot Berriot Date: Sat, 21 Apr 2018 16:02:11 +0200 Subject: [PATCH] More efficient SQL query to compute import batch status --- api/funkwhale_api/music/models.py | 2 ++ api/funkwhale_api/music/utils.py | 5 +++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/api/funkwhale_api/music/models.py b/api/funkwhale_api/music/models.py index cc3849d50..18f181e88 100644 --- a/api/funkwhale_api/music/models.py +++ b/api/funkwhale_api/music/models.py @@ -507,6 +507,8 @@ class ImportBatch(models.Model): def update_status(self): old_status = self.status self.status = utils.compute_status(self.jobs.all()) + if self.status == old_status: + return self.save(update_fields=['status']) if self.status != old_status and self.status == 'finished': from . import tasks diff --git a/api/funkwhale_api/music/utils.py b/api/funkwhale_api/music/utils.py index af0e59ab4..95f9cc62f 100644 --- a/api/funkwhale_api/music/utils.py +++ b/api/funkwhale_api/music/utils.py @@ -53,10 +53,11 @@ def guess_mimetype(f): def compute_status(jobs): - errored = any([job.status == 'errored' for job in jobs]) + statuses = jobs.values_list('status', flat=True).distinct() + errored = any([status == 'errored' for status in statuses]) if errored: return 'errored' - pending = any([job.status == 'pending' for job in jobs]) + pending = any([status == 'pending' for status in statuses]) if pending: return 'pending' return 'finished'