MCPcopy Index your code
hub / github.com/riverqueue/river / WithDefaults

Method WithDefaults

client.go:451–520  ·  view source on GitHub ↗

WithDefaults returns a copy of the Config with all default values applied.

()

Source from the content-addressed store, hash-verified

449
450// WithDefaults returns a copy of the Config with all default values applied.
451func (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,

Callers 6

Test_Config_WithDefaultsFunction · 0.45
NewClientFunction · 0.45
NewJobSchedulerFunction · 0.45
NewJobCleanerFunction · 0.45
NewQueueCleanerFunction · 0.45
NewRescuerFunction · 0.45

Calls 4

ValOrDefaultFuncFunction · 0.92
defaultClientIDFunction · 0.85
NowMethod · 0.65

Tested by 1

Test_Config_WithDefaultsFunction · 0.36