Mark failed evidence descriptions instead of retrying

Previously the worker reset failed descriptions back to PENDING,
causing infinite retry loops for permanently broken evidence.
Add a FAILED status so these items stop cycling and can be
investigated.

Signed-off-by: Bryan Frimin <bryan@getprobo.com>
This commit is contained in:
Bryan Frimin
2026-03-26 21:37:53 +01:00
parent 992c4ab7f3
commit 095b36d6e4
3 changed files with 8 additions and 4 deletions

View File

@@ -27,6 +27,7 @@ const (
EvidenceDescriptionStatusPending EvidenceDescriptionStatus = "PENDING" EvidenceDescriptionStatusPending EvidenceDescriptionStatus = "PENDING"
EvidenceDescriptionStatusProcessing EvidenceDescriptionStatus = "PROCESSING" EvidenceDescriptionStatusProcessing EvidenceDescriptionStatus = "PROCESSING"
EvidenceDescriptionStatusCompleted EvidenceDescriptionStatus = "COMPLETED" EvidenceDescriptionStatusCompleted EvidenceDescriptionStatus = "COMPLETED"
EvidenceDescriptionStatusFailed EvidenceDescriptionStatus = "FAILED"
) )
func (s EvidenceDescriptionStatus) MarshalText() ([]byte, error) { func (s EvidenceDescriptionStatus) MarshalText() ([]byte, error) {
@@ -43,6 +44,8 @@ func (s *EvidenceDescriptionStatus) UnmarshalText(data []byte) error {
*s = EvidenceDescriptionStatusProcessing *s = EvidenceDescriptionStatusProcessing
case EvidenceDescriptionStatusCompleted.String(): case EvidenceDescriptionStatusCompleted.String():
*s = EvidenceDescriptionStatusCompleted *s = EvidenceDescriptionStatusCompleted
case EvidenceDescriptionStatusFailed.String():
*s = EvidenceDescriptionStatusFailed
default: default:
return fmt.Errorf("invalid EvidenceDescriptionStatus value: %q", val) return fmt.Errorf("invalid EvidenceDescriptionStatus value: %q", val)
} }

View File

@@ -0,0 +1 @@
ALTER TYPE evidence_description_status ADD VALUE IF NOT EXISTS 'FAILED';

View File

@@ -161,8 +161,8 @@ func (w *EvidenceDescriptionWorker) processNext(ctx context.Context, sem chan st
log.String("evidence_id", evidence.ID.String()), log.String("evidence_id", evidence.ID.String()),
) )
if err := w.resetEvidence(nonCancelableCtx, &evidence); err != nil { if err := w.failEvidence(nonCancelableCtx, &evidence); err != nil {
w.logger.ErrorCtx(nonCancelableCtx, "cannot reset evidence description status", log.Error(err)) w.logger.ErrorCtx(nonCancelableCtx, "cannot mark evidence description as failed", log.Error(err))
} }
} }
}(evidence) }(evidence)
@@ -219,7 +219,7 @@ func (w *EvidenceDescriptionWorker) describeAndCommit(
) )
} }
func (w *EvidenceDescriptionWorker) resetEvidence( func (w *EvidenceDescriptionWorker) failEvidence(
ctx context.Context, ctx context.Context,
evidence *coredata.Evidence, evidence *coredata.Evidence,
) error { ) error {
@@ -228,7 +228,7 @@ func (w *EvidenceDescriptionWorker) resetEvidence(
return w.pg.WithTx( return w.pg.WithTx(
ctx, ctx,
func(tx pg.Conn) error { func(tx pg.Conn) error {
evidence.DescriptionStatus = coredata.EvidenceDescriptionStatusPending evidence.DescriptionStatus = coredata.EvidenceDescriptionStatusFailed
evidence.DescriptionProcessingStartedAt = nil evidence.DescriptionProcessingStartedAt = nil
evidence.UpdatedAt = time.Now() evidence.UpdatedAt = time.Now()
if err := evidence.Update(ctx, tx, scope); err != nil { if err := evidence.Update(ctx, tx, scope); err != nil {