From 9d4a86d528feb69a6041c78ef046f52619c0dd74 Mon Sep 17 00:00:00 2001 From: rishikanthc Date: Sun, 26 Apr 2026 19:22:49 -0700 Subject: [PATCH] fix: quiet empty transcription queue polls --- internal/repository/implementations.go | 13 +++++++++---- internal/repository/job_queue_test.go | 10 ++++++++++ 2 files changed, 19 insertions(+), 4 deletions(-) diff --git a/internal/repository/implementations.go b/internal/repository/implementations.go index 10a11c49..b8bced03 100644 --- a/internal/repository/implementations.go +++ b/internal/repository/implementations.go @@ -191,14 +191,19 @@ func (r *jobRepository) ClaimNextTranscription(ctx context.Context, workerID str var claimed models.TranscriptionJob err := r.db.WithContext(ctx).Transaction(func(tx *gorm.DB) error { var candidate models.TranscriptionJob - if err := tx. + result := tx. Where("status = ?", models.StatusPending). Order("queued_at ASC, created_at ASC, id ASC"). - First(&candidate).Error; err != nil { - return err + Limit(1). + Find(&candidate) + if result.Error != nil { + return result.Error + } + if result.RowsAffected == 0 { + return gorm.ErrRecordNotFound } now := time.Now() - result := tx.Model(&models.TranscriptionJob{}). + result = tx.Model(&models.TranscriptionJob{}). Where("id = ? AND status = ?", candidate.ID, models.StatusPending). Updates(map[string]any{ "status": models.StatusProcessing, diff --git a/internal/repository/job_queue_test.go b/internal/repository/job_queue_test.go index e2d76dc1..1dbe28c7 100644 --- a/internal/repository/job_queue_test.go +++ b/internal/repository/job_queue_test.go @@ -106,6 +106,16 @@ func TestJobRepositoryEnqueueAndClaimFIFO(t *testing.T) { assert.Equal(t, newer.ID, claimed.ID) } +func TestJobRepositoryClaimNextReturnsNotFoundWhenQueueEmpty(t *testing.T) { + db := openJobQueueTestDB(t) + repo := NewJobRepository(db) + + claimed, err := repo.ClaimNextTranscription(context.Background(), "worker-a", time.Now().Add(time.Minute)) + + require.ErrorIs(t, err, gorm.ErrRecordNotFound) + require.Nil(t, claimed) +} + func TestJobRepositoryConcurrentClaimsDoNotDuplicateJobs(t *testing.T) { db := openJobQueueTestDB(t) user := createQueueTestUser(t, db)