1
0
mirror of https://github.com/pocket-id/pocket-id.git synced 2026-03-24 08:25:06 +00:00
This commit is contained in:
ItalyPaleAle
2026-03-05 16:18:38 -08:00
parent e827f80496
commit c63ef67c2c
2 changed files with 2 additions and 5 deletions

View File

@@ -19,9 +19,7 @@ import (
func (s *Scheduler) RegisterDbCleanupJobs(ctx context.Context, db *gorm.DB) error { func (s *Scheduler) RegisterDbCleanupJobs(ctx context.Context, db *gorm.DB) error {
jobs := &DbCleanupJobs{db: db} jobs := &DbCleanupJobs{db: db}
// Use exponential backoff for each DB cleanup job so transient query failures // Use exponential backoff for each DB cleanup job so transient query failures are retried automatically rather than causing an immediate job failure
// are retried automatically rather than causing an immediate job failure.
// Each job gets its own backoff instance to avoid shared state.
return errors.Join( return errors.Join(
s.RegisterJob(ctx, "ClearWebauthnSessions", jobDefWithJitter(24*time.Hour), jobs.clearWebauthnSessions, service.RegisterJobOpts{RunImmediately: true, BackOff: backoff.NewExponentialBackOff()}), s.RegisterJob(ctx, "ClearWebauthnSessions", jobDefWithJitter(24*time.Hour), jobs.clearWebauthnSessions, service.RegisterJobOpts{RunImmediately: true, BackOff: backoff.NewExponentialBackOff()}),
s.RegisterJob(ctx, "ClearOneTimeAccessTokens", jobDefWithJitter(24*time.Hour), jobs.clearOneTimeAccessTokens, service.RegisterJobOpts{RunImmediately: true, BackOff: backoff.NewExponentialBackOff()}), s.RegisterJob(ctx, "ClearOneTimeAccessTokens", jobDefWithJitter(24*time.Hour), jobs.clearOneTimeAccessTokens, service.RegisterJobOpts{RunImmediately: true, BackOff: backoff.NewExponentialBackOff()}),

View File

@@ -65,7 +65,7 @@ func (s *Scheduler) Run(ctx context.Context) error {
} }
func (s *Scheduler) RegisterJob(ctx context.Context, name string, def gocron.JobDefinition, jobFn func(ctx context.Context) error, opts service.RegisterJobOpts) error { func (s *Scheduler) RegisterJob(ctx context.Context, name string, def gocron.JobDefinition, jobFn func(ctx context.Context) error, opts service.RegisterJobOpts) error {
// If a BackOff strategy is provided, wrap the job with retry logic. // If a BackOff strategy is provided, wrap the job with retry logic
if opts.BackOff != nil { if opts.BackOff != nil {
origJob := jobFn origJob := jobFn
jobFn = func(ctx context.Context) error { jobFn = func(ctx context.Context) error {
@@ -75,7 +75,6 @@ func (s *Scheduler) RegisterJob(ctx context.Context, name string, def gocron.Job
return struct{}{}, origJob(ctx) return struct{}{}, origJob(ctx)
}, },
backoff.WithBackOff(opts.BackOff), backoff.WithBackOff(opts.BackOff),
backoff.WithMaxTries(3),
backoff.WithNotify(func(err error, d time.Duration) { backoff.WithNotify(func(err error, d time.Duration) {
slog.WarnContext(ctx, "Job failed, retrying", slog.WarnContext(ctx, "Job failed, retrying",
slog.String("name", name), slog.String("name", name),