Projet

Général

Profil

0001-misc-prevent-locking-all-jobs-36215.patch

Benjamin Dauvergne, 21 septembre 2019 11:17

Télécharger (1,23 ko)

Voir les différences:

Subject: [PATCH 1/2] misc: prevent locking all jobs (#36215)

.first() does list(qs)[:1] which will select all target jobs,
we must add a LIMIT 1 before .first() to lock only the job we are
looking for. Ordering is necessary as .first() will do an
.order_by('pk') on an unordered queryset to get a deterministic result
in call cases and ordering a sliced queryset is not possible.
 passerelle/base/models.py | 3 ++-
 1 file changed, 2 insertions(+), 1 deletion(-)
passerelle/base/models.py
507 507
                        pk__in=skipped_jobs
508 508
                        ).filter(
509 509
                        status='registered'
510
                        ).select_for_update(**skip_locked).first()
510
                        ).select_for_update(**skip_locked
511
                        ).order_by('pk')[:1].first()
511 512
                if not job:
512 513
                    break
513 514
                job.status = 'running'
514
-