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:
@@ -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)
|
||||||
}
|
}
|
||||||
|
|||||||
1
pkg/coredata/migrations/20260326T150000Z.sql
Normal file
1
pkg/coredata/migrations/20260326T150000Z.sql
Normal file
@@ -0,0 +1 @@
|
|||||||
|
ALTER TYPE evidence_description_status ADD VALUE IF NOT EXISTS 'FAILED';
|
||||||
@@ -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 {
|
||||||
|
|||||||
Reference in New Issue
Block a user