backoff

package module
v1.0.0 Latest Latest
Warning

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

Go to latest
Published: Jun 20, 2020 License: Apache-2.0 Imports: 2 Imported by: 10

README

Backoff

Exponential backoff implementation extracted from gRPC-Go

gRPC-Go has really nice exponential backoff implementation, but it is impossible to reuse as it resides in internal package, so it can be imported only within gRPC-Go.

Usage

package main

import "github.com/vgarvardt/backoff"

func main() {
    retry := 5
    waitFor := backoff.DefaultExponential.Backoff(retry)
    ...
}

Documentation

Overview

Package backoff provides configuration options for backoff.

More details can be found at: https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.

All APIs in this package are experimental.

Package backoff implement the backoff strategy for gRPC.

This is kept in internal until the gRPC project decides whether or not to allow alternative backoff strategies.

Index

Constants

This section is empty.

Variables

View Source
var DefaultConfig = Config{
	BaseDelay:  1.0 * time.Second,
	Multiplier: 1.6,
	Jitter:     0.2,
	MaxDelay:   120 * time.Second,
}

DefaultConfig is a backoff configuration with the default values specified at https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.

This should be useful for callers who want to configure backoff with non-default values only for a subset of the options.

View Source
var DefaultExponential = Exponential{Config: DefaultConfig}

DefaultExponential is an exponential backoff implementation using the default values for all the configurable knobs defined in https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.

Functions

This section is empty.

Types

type Config

type Config struct {
	// BaseDelay is the amount of time to backoff after the first failure.
	BaseDelay time.Duration
	// Multiplier is the factor with which to multiply backoffs after a
	// failed retry. Should ideally be greater than 1.
	Multiplier float64
	// Jitter is the factor with which backoffs are randomized.
	Jitter float64
	// MaxDelay is the upper bound of backoff delay.
	MaxDelay time.Duration
}

Config defines the configuration options for backoff.

type Exponential

type Exponential struct {
	// Config contains all options to configure the backoff algorithm.
	Config Config
}

Exponential implements exponential backoff algorithm as defined in https://github.com/grpc/grpc/blob/master/doc/connection-backoff.md.

func (Exponential) Backoff

func (bc Exponential) Backoff(retries int) time.Duration

Backoff returns the amount of time to wait before the next retry given the number of retries.

type Strategy

type Strategy interface {
	// Backoff returns the amount of time to wait before the next retry given
	// the number of consecutive failures.
	Backoff(retries int) time.Duration
}

Strategy defines the methodology for backing off after a grpc connection failure.

Directories

Path Synopsis
internal
grpcrand
Package grpcrand implements math/rand functions in a concurrent-safe way with a global random source, independent of math/rand's global source.
Package grpcrand implements math/rand functions in a concurrent-safe way with a global random source, independent of math/rand's global source.

Jump to

Keyboard shortcuts

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