Skip to content

johan-lejdung/batch-backoff

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CircleCI

codecov

batch-backoff

Provides exponential backoff for batch processes

Useful when you want exponential backoff when running async batch processes. eg. when you want the following to only result in a single backoff operation.

for i := 0; i < 20; i++ {
    doProcessCall()
    Backoff()
}

I made this to let a group of async processes share a single backoff.

Install

go get github.com/johan-lejdung/batch-backoff

Usage

Import the package

import github.com/johan-lejdung/batch-backoff

Create a new instance of the struct with:

backoff := bboff.NewExponentialBackoff(bboff.BackoffIntervals{
    StartInterval: 10 * time.Minute,
    Multiplier:    2,
    MaxInterval:   2 * time.Minute,
})

You use the library by first calling CanProceed().

You will get back (bool, BackoffBatch), where the bool indicates if you can proceed or not.

The batch is used when calling Backoff(batch BackoffBatch). If the call made after CanProceed() fails you just need to provice the BackoffBatch to the call of Backoff and the increments will handle it self.

Such as:

for i := 0; i < 20; i++ {
    canProceed, batch := backoff.CanProceed()
    if !canProceed {
        // handle case
        continue
    }
    err := doProcessCall()
    if err != nil {
        backoff.Backoff(batch)
    }
}

About

Provides exponential backoff for batch processes

Resources

Stars

Watchers

Forks

Packages

No packages published

Languages