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 }