WithDefaults returns a copy of the Config with all default values applied.
()
| 449 | |
| 450 | // WithDefaults returns a copy of the Config with all default values applied. |
| 451 | func (c *Config) WithDefaults() *Config { |
| 452 | if c == nil { |
| 453 | c = &Config{} |
| 454 | } |
| 455 | |
| 456 | reindexerIndexNames := ReindexerIndexNamesDefault() |
| 457 | if c.ReindexerIndexNames != nil { |
| 458 | reindexerIndexNames = make([]string, len(c.ReindexerIndexNames)) |
| 459 | copy(reindexerIndexNames, c.ReindexerIndexNames) |
| 460 | } |
| 461 | |
| 462 | // Use the existing logger if set, otherwise create a default one. |
| 463 | logger := c.Logger |
| 464 | if logger == nil { |
| 465 | logger = slog.New(slog.NewTextHandler(os.Stdout, &slog.HandlerOptions{ |
| 466 | Level: slog.LevelWarn, |
| 467 | })) |
| 468 | } |
| 469 | |
| 470 | // Compute the default rescue value. For convenience, if JobTimeout is specified |
| 471 | // but RescueStuckJobsAfter is not set (or less than 1) and JobTimeout is large, use |
| 472 | // JobTimeout + maintenance.JobRescuerRescueAfterDefault as the default. |
| 473 | rescueAfter := maintenance.JobRescuerRescueAfterDefault |
| 474 | if c.JobTimeout > 0 && c.RescueStuckJobsAfter < 1 && c.JobTimeout > c.RescueStuckJobsAfter { |
| 475 | rescueAfter = c.JobTimeout + maintenance.JobRescuerRescueAfterDefault |
| 476 | } |
| 477 | |
| 478 | // Set default retry policy if none is provided. |
| 479 | retryPolicy := c.RetryPolicy |
| 480 | if retryPolicy == nil { |
| 481 | retryPolicy = &DefaultClientRetryPolicy{} |
| 482 | } |
| 483 | |
| 484 | return &Config{ |
| 485 | AdvisoryLockPrefix: c.AdvisoryLockPrefix, |
| 486 | CancelledJobRetentionPeriod: cmp.Or(c.CancelledJobRetentionPeriod, riversharedmaintenance.CancelledJobRetentionPeriodDefault), |
| 487 | CompletedJobRetentionPeriod: cmp.Or(c.CompletedJobRetentionPeriod, riversharedmaintenance.CompletedJobRetentionPeriodDefault), |
| 488 | DiscardedJobRetentionPeriod: cmp.Or(c.DiscardedJobRetentionPeriod, riversharedmaintenance.DiscardedJobRetentionPeriodDefault), |
| 489 | ErrorHandler: c.ErrorHandler, |
| 490 | FetchCooldown: cmp.Or(c.FetchCooldown, FetchCooldownDefault), |
| 491 | FetchPollInterval: cmp.Or(c.FetchPollInterval, FetchPollIntervalDefault), |
| 492 | ID: valutil.ValOrDefaultFunc(c.ID, func() string { return defaultClientID(time.Now().UTC()) }), |
| 493 | Hooks: c.Hooks, |
| 494 | JobInsertMiddleware: c.JobInsertMiddleware, |
| 495 | JobStuckHandler: c.JobStuckHandler, |
| 496 | JobStuckThreshold: cmp.Or(c.JobStuckThreshold, JobStuckThresholdDefault), |
| 497 | JobTimeout: cmp.Or(c.JobTimeout, JobTimeoutDefault), |
| 498 | Logger: logger, |
| 499 | MaxAttempts: cmp.Or(c.MaxAttempts, MaxAttemptsDefault), |
| 500 | Middleware: c.Middleware, |
| 501 | PeriodicJobs: c.PeriodicJobs, |
| 502 | PollOnly: c.PollOnly, |
| 503 | Queues: c.Queues, |
| 504 | ReindexerIndexNames: reindexerIndexNames, |
| 505 | ReindexerSchedule: c.ReindexerSchedule, |
| 506 | ReindexerTimeout: cmp.Or(c.ReindexerTimeout, maintenance.ReindexerTimeoutDefault), |
| 507 | RescueStuckJobsAfter: cmp.Or(c.RescueStuckJobsAfter, rescueAfter), |
| 508 | RetryPolicy: retryPolicy, |