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"
EvidenceDescriptionStatusProcessing EvidenceDescriptionStatus = "PROCESSING"
EvidenceDescriptionStatusCompleted EvidenceDescriptionStatus = "COMPLETED"
EvidenceDescriptionStatusFailed EvidenceDescriptionStatus = "FAILED"
)
func (s EvidenceDescriptionStatus) MarshalText() ([]byte, error) {
@@ -43,6 +44,8 @@ func (s *EvidenceDescriptionStatus) UnmarshalText(data []byte) error {
*s = EvidenceDescriptionStatusProcessing
case EvidenceDescriptionStatusCompleted.String():
*s = EvidenceDescriptionStatusCompleted
case EvidenceDescriptionStatusFailed.String():
*s = EvidenceDescriptionStatusFailed
default:
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()),
)
if err := w.resetEvidence(nonCancelableCtx, &evidence); err != nil {
w.logger.ErrorCtx(nonCancelableCtx, "cannot reset evidence description status", log.Error(err))
if err := w.failEvidence(nonCancelableCtx, &evidence); err != nil {
w.logger.ErrorCtx(nonCancelableCtx, "cannot mark evidence description as failed", log.Error(err))
}
}
}(evidence)
@@ -219,7 +219,7 @@ func (w *EvidenceDescriptionWorker) describeAndCommit(
)
}
func (w *EvidenceDescriptionWorker) resetEvidence(
func (w *EvidenceDescriptionWorker) failEvidence(
ctx context.Context,
evidence *coredata.Evidence,
) error {
@@ -228,7 +228,7 @@ func (w *EvidenceDescriptionWorker) resetEvidence(
return w.pg.WithTx(
ctx,
func(tx pg.Conn) error {
evidence.DescriptionStatus = coredata.EvidenceDescriptionStatusPending
evidence.DescriptionStatus = coredata.EvidenceDescriptionStatusFailed
evidence.DescriptionProcessingStartedAt = nil
evidence.UpdatedAt = time.Now()
if err := evidence.Update(ctx, tx, scope); err != nil {