From 0235ffcb4a0bc72168e12215f07db9899965fcbf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sybren=20A=2E=20St=C3=BCvel?= Date: Tue, 1 Mar 2022 11:52:28 +0100 Subject: [PATCH] Manager: avoid "no record found" error in task scheduler It's fine when there is no task for a worker, so having Gorm log an error was just causing noise. --- internal/manager/persistence/task_scheduler.go | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/internal/manager/persistence/task_scheduler.go b/internal/manager/persistence/task_scheduler.go index 371da5db..f063fa13 100644 --- a/internal/manager/persistence/task_scheduler.go +++ b/internal/manager/persistence/task_scheduler.go @@ -49,13 +49,13 @@ func (db *DB) ScheduleTask(ctx context.Context, w *Worker) (*Task, error) { txErr := db.gormDB.WithContext(ctx).Transaction(func(tx *gorm.DB) error { var err error task, err = findTaskForWorker(tx, w) - if err == gorm.ErrRecordNotFound { - // Not finding a task is not an error. - return nil - } if err != nil { return fmt.Errorf("error finding task for worker: %w", err) } + if task == nil { + // No task found, which is fine. + return nil + } // Found a task, now assign it to the requesting worker. // Without the Select() call, Gorm will try and also store task.Job in the jobs database, which is not what we want. @@ -104,11 +104,15 @@ func findTaskForWorker(tx *gorm.DB, w *Worker) (*Task, error) { Order("priority desc"). // Highest task priority Limit(1). Preload("Job"). - First(&task) + Find(&task) if findTaskResult.Error != nil { return nil, findTaskResult.Error } + if task.ID == 0 { + // No task fetched, which doesn't result in an error with Limt(1).Find(&task). + return nil, nil + } return &task, nil }