repeater

package module
v1.2.0 Latest Latest
Warning

This package is not in the latest version of its module.

Go to latest
Published: Jun 16, 2023 License: MIT Imports: 4 Imported by: 39

README

Repeater Build Status Go Report Card Coverage Status

Repeater calls a function until it returns no error, up to some number of iterations and delays defined by strategy. It terminates immediately on err from the provided (optional) list of critical errors.

Install and update

go get -u github.com/go-pkgz/repeater

How to use

New Repeater created by New(strtg strategy.Interface) or shortcut for default - NewDefault(repeats int, delay time.Duration) *Repeater.

To activate invoke Do method. Do repeats func until no error returned. Predefined (optional) errors terminate the loop immediately.

func (r Repeater) Do(ctx context.Context, fun func() error, errors ...error) (err error)

Repeating strategy

User can provide his own strategy implementing the interface:

type Interface interface {
	Start(ctx context.Context) chan struct{}
}

Returned channels used as "ticks," i.e., for each repeat or initial operation one read from this channel needed. Closing the channel indicates "done with retries." It is pretty much the same idea as time.Timer or time.Tick implements. Note - the first (technically not-repeated-yet) call won't happen until something sent to the channel. For this reason, the typical strategy sends the first "tick" before the first wait/sleep.

Three strategies provided byt the package:

  1. Fixed delay, up to max number of attempts. It is the default strategy used by repeater.NewDefault constructor.
  2. BackOff with jitter provides an exponential backoff. It starts from Duration interval and goes in steps with last * math.Pow(factor, attempt). Optional jitter randomizes intervals a little. Factor = 1 effectively makes this strategy fixed with Duration delay.
  3. Once strategy does not do any repeats and mainly used for tests/mocks`.

Documentation

Overview

Package repeater call fun till it returns no error, up to repeat some number of iterations and delays defined by strategy. Repeats number and delays defined by strategy.Interface. Terminates immediately on err from provided, optional list of critical errors

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Repeater

type Repeater struct {
	Strategy
}

Repeater is the main object, should be made by New or NewDefault, embeds strategy

func New

func New(strtg strategy.Interface) *Repeater

New repeater with a given strategy. If strategy=nil initializes with FixedDelay 5sec, 10 times.

func NewDefault

func NewDefault(repeats int, delay time.Duration) *Repeater

NewDefault makes repeater with FixedDelay strategy

func (Repeater) Do

func (r Repeater) Do(ctx context.Context, fun func() error, errs ...error) (err error)

Do repeats fun till no error. Predefined (optional) errors terminate immediately

type Strategy added in v1.2.0

type Strategy interface {
	Start(ctx context.Context) <-chan struct{} // returns channel with repeater ticks
}

Strategy interface for repeater strategy

Directories

Path Synopsis
Package strategy defines repeater's strategy and implements some.
Package strategy defines repeater's strategy and implements some.

Jump to

Keyboard shortcuts

? : This menu
/ : Search site
f or F : Jump to
y or Y : Canonical URL