From ef28350c63e9997cc7c012d54ceefb996d8b39ed Mon Sep 17 00:00:00 2001 From: Bryan Frimin Date: Fri, 20 Feb 2026 13:55:20 +0100 Subject: [PATCH] Fix worker retry Signed-off-by: Bryan Frimin --- pkg/coredata/electronic_signature.go | 2 ++ pkg/esign/completion_certificate_worker.go | 8 ++++++++ 2 files changed, 10 insertions(+) diff --git a/pkg/coredata/electronic_signature.go b/pkg/coredata/electronic_signature.go index 2ea228908..96aec64a5 100644 --- a/pkg/coredata/electronic_signature.go +++ b/pkg/coredata/electronic_signature.go @@ -268,6 +268,7 @@ FROM electronic_signatures WHERE status = 'COMPLETED' AND certificate_file_id IS NULL AND certificate_processing_started_at IS NULL + AND attempt_count < max_attempts ORDER BY signed_at ASC LIMIT 1 FOR UPDATE SKIP LOCKED @@ -362,6 +363,7 @@ WHERE status = 'COMPLETED' AND certificate_file_id IS NULL AND certificate_processing_started_at IS NOT NULL AND certificate_processing_started_at < NOW() - $1::interval + AND attempt_count < max_attempts ` _, err := conn.Exec(ctx, q, staleAfter) if err != nil { diff --git a/pkg/esign/completion_certificate_worker.go b/pkg/esign/completion_certificate_worker.go index fca4dd584..a8e76fca0 100644 --- a/pkg/esign/completion_certificate_worker.go +++ b/pkg/esign/completion_certificate_worker.go @@ -151,6 +151,8 @@ func (w *CompletionCertificateWorker) processNext(ctx context.Context, sem chan } scope := coredata.NewScopeFromObjectID(signature.ID) signature.CertificateProcessingStartedAt = &now + signature.AttemptCount++ + signature.LastAttemptedAt = &now signature.UpdatedAt = now if err := signature.Update(nonCancelableCtx, tx, scope); err != nil { @@ -353,9 +355,15 @@ func (w *CompletionCertificateWorker) handleCertFailure( return w.pg.WithTx( ctx, func(tx pg.Conn) error { + errStr := processingError.Error() + signature.LastError = &errStr signature.CertificateProcessingStartedAt = nil signature.UpdatedAt = time.Now() + if signature.AttemptCount >= signature.MaxAttempts { + signature.Status = coredata.ElectronicSignatureStatusFailed + } + if err := signature.Update(ctx, tx, scope); err != nil { return fmt.Errorf("cannot update signature: %w", err) }