From 2ecc48727f04b1f3b8fec360313e01e89d91b647 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ond=C5=99ej=20Budai?= Date: Thu, 11 Nov 2021 09:43:18 +0100 Subject: [PATCH] fsjobqueue: factor out finished deps check MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Ondřej Budai --- internal/jobqueue/fsjobqueue/fsjobqueue.go | 30 ++++++++++++++-------- 1 file changed, 20 insertions(+), 10 deletions(-) diff --git a/internal/jobqueue/fsjobqueue/fsjobqueue.go b/internal/jobqueue/fsjobqueue/fsjobqueue.go index 06c4d7b89..4094123f2 100644 --- a/internal/jobqueue/fsjobqueue/fsjobqueue.go +++ b/internal/jobqueue/fsjobqueue/fsjobqueue.go @@ -393,16 +393,9 @@ func (q *fsJobQueue) maybeEnqueue(j *job, updateDependants bool) error { return nil } - depsFinished := true - for _, id := range j.Dependencies { - j, err := q.readJob(id) - if err != nil { - return err - } - if j.FinishedAt.IsZero() { - depsFinished = false - break - } + depsFinished, err := q.hasAllFinishedDependencies(j) + if err != nil { + return err } if depsFinished { @@ -421,6 +414,23 @@ func (q *fsJobQueue) maybeEnqueue(j *job, updateDependants bool) error { return nil } +// hasAllFinishedDependencies returns true if all dependencies of `j` +// are finished. Otherwise, false is returned. If one of the jobs cannot +// be read, an error is returned. +func (q *fsJobQueue) hasAllFinishedDependencies(j *job) (bool, error) { + for _, id := range j.Dependencies { + j, err := q.readJob(id) + if err != nil { + return false, err + } + if j.FinishedAt.IsZero() { + return false, nil + } + } + + return true, nil +} + // Select on a list of `chan uuid.UUID`s. Returns an error if one of the // channels is closed. //