...

Package retry

import "go.opentelemetry.io/otel/exporters/otlp/otlptrace/otlptracegrpc/internal/retry"
Overview
Index

Overview ▾

Package retry provides request retry functionality that can perform configurable exponential backoff for transient errors and honor any explicit throttle responses received.

Variables

DefaultConfig are the recommended defaults to use.

var DefaultConfig = Config{
    Enabled:         true,
    InitialInterval: 5 * time.Second,
    MaxInterval:     30 * time.Second,
    MaxElapsedTime:  time.Minute,
}

type Config

Config defines configuration for retrying batches in case of export failure using an exponential backoff.

type Config struct {
    // Enabled indicates whether to not retry sending batches in case of
    // export failure.
    Enabled bool
    // InitialInterval the time to wait after the first failure before
    // retrying.
    InitialInterval time.Duration
    // MaxInterval is the upper bound on backoff interval. Once this value is
    // reached the delay between consecutive retries will always be
    // `MaxInterval`.
    MaxInterval time.Duration
    // MaxElapsedTime is the maximum amount of time (including retries) spent
    // trying to send a request/batch.  Once this value is reached, the data
    // is discarded.
    MaxElapsedTime time.Duration
}

func (Config) RequestFunc

func (c Config) RequestFunc(evaluate EvaluateFunc) RequestFunc

RequestFunc returns a RequestFunc using the evaluate function to determine if requests can be retried and based on the exponential backoff configuration of c.

type EvaluateFunc

EvaluateFunc returns if an error is retry-able and if an explicit throttle duration should be honored that was included in the error.

The function must return true if the error argument is retry-able, otherwise it must return false for the first return parameter.

The function must return a non-zero time.Duration if the error contains explicit throttle duration that should be honored, otherwise it must return a zero valued time.Duration.

type EvaluateFunc func(error) (bool, time.Duration)

type RequestFunc

RequestFunc wraps a request with retry logic.

type RequestFunc func(context.Context, func(context.Context) error) error