kit: Index | Files

package conn

import ""

Package conn provides utilities related to connections.


Package Files

doc.go manager.go


var ErrConnectionUnavailable = errors.New("connection unavailable")

ErrConnectionUnavailable is returned by the Manager's Write method when the manager cannot yield a good connection.

func Exponential Uses

func Exponential(d time.Duration) time.Duration

Exponential takes a duration and returns another one that is twice as long, +/- 50%. It is used to provide backoff for operations that may fail and should avoid thundering herds. See for rationale

type AfterFunc Uses

type AfterFunc func(time.Duration) <-chan time.Time

AfterFunc imitates time.After.

type Dialer Uses

type Dialer func(network, address string) (net.Conn, error)

Dialer imitates net.Dial. Dialer is assumed to yield connections that are safe for use by multiple concurrent goroutines.

type Manager Uses

type Manager struct {
    // contains filtered or unexported fields

Manager manages a net.Conn.

Clients provide a way to create the connection with a Dialer, network, and address. Clients should Take the connection when they want to use it, and Put back whatever error they receive from its use. When a non-nil error is Put, the connection is invalidated, and a new connection is established. Connection failures are retried after an exponential backoff.

func NewDefaultManager Uses

func NewDefaultManager(network, address string, logger log.Logger) *Manager

NewDefaultManager is a helper constructor, suitable for most normal use in real (non-test) code. It uses the real net.Dial and time.After functions.

func NewManager Uses

func NewManager(d Dialer, network, address string, after AfterFunc, logger log.Logger) *Manager

NewManager returns a connection manager using the passed Dialer, network, and address. The AfterFunc is used to control exponential backoff and retries. The logger is used to log errors; pass a log.NopLogger if you don't care to receive them. For normal use, prefer NewDefaultManager.

func (*Manager) Put Uses

func (m *Manager) Put(err error)

Put accepts an error that came from a previously yielded connection. If the error is non-nil, the manager will invalidate the current connection and try to reconnect, with exponential backoff. Putting a nil error is a no-op.

func (*Manager) Take Uses

func (m *Manager) Take() net.Conn

Take yields the current connection. It may be nil.

func (*Manager) Write Uses

func (m *Manager) Write(b []byte) (int, error)

Write writes the passed data to the connection in a single Take/Put cycle.

Package conn imports 5 packages (graph) and is imported by 220 packages. Updated 2020-05-15. Refresh now. Tools for package owners.