pool

package
v0.0.0-...-b87209e Latest Latest
Warning

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

Go to latest
Published: Dec 7, 2023 License: Apache-2.0 Imports: 6 Imported by: 0

Documentation

Overview

Package pool provides a pool of grpc clients This is a modified version of: https://github.com/processout/grpc-go-pool/blob/master/pool.go

Index

Constants

This section is empty.

Variables

View Source
var (
	// ErrClosed is the error when the client pool is closed.
	ErrClosed = errors.New("grpc pool: client pool is closed")
	// ErrTimeout is the error when the client pool timed out.
	ErrTimeout = errors.New("grpc pool: client pool timed out")
	// ErrAlreadyClosed is the error when the client conn was already closed.
	ErrAlreadyClosed = errors.New("grpc pool: the connection was already closed")
	// ErrFullPool is the error when the pool is already full.
	ErrFullPool = errors.New("grpc pool: closing a ClientConn into a full pool")
)

Functions

This section is empty.

Types

type ClientConn

type ClientConn struct {
	*grpc.ClientConn
	// contains filtered or unexported fields
}

ClientConn is the wrapper for a grpc client conn.

func (*ClientConn) Close

func (c *ClientConn) Close() error

Close returns a ClientConn to the pool. It is safe to call multiple time, but will return an error after first time.

func (*ClientConn) Unhealthy

func (c *ClientConn) Unhealthy()

Unhealthy marks the client conn as unhealthy, so that the connection gets reset when closed.

type FactoryWithContext

type FactoryWithContext func(ctx context.Context, addr string, tlsConfig *tls.Config) (*grpc.ClientConn, error)

FactoryWithContext is a function type creating a grpc client that accepts the context parameter that could be passed from Get or NewWithContext method.

type Pool

type Pool struct {
	// contains filtered or unexported fields
}

Pool is the grpc client pool.

func New

func New(factory FactoryWithContext, capacity int, idleTimeout time.Duration, maxLifeDuration ...time.Duration) (*Pool, error)

New creates a new clients pool with the given initial and maximum capacity, and the timeout for the idle clients. The context parameter would be passed to the factory method during initialization. Returns an error if the initial clients could not be created.

func (*Pool) Available

func (p *Pool) Available() int

Available returns the number of currently unused clients.

func (*Pool) Capacity

func (p *Pool) Capacity() int

Capacity returns the capacity.

func (*Pool) Close

func (p *Pool) Close()

Close empties the pool calling Close on all its clients. You can call Close while there are outstanding clients. The pool channel is then closed, and Get will not be allowed anymore.

func (*Pool) Get

func (p *Pool) Get(ctx context.Context, addr string, tlsConfig *tls.Config) (*ClientConn, error)

Get will return the next available client. If capacity has not been reached, it will create a new one using the factory. Otherwise, it will wait till the next client becomes available or a timeout. A timeout of 0 is an indefinite wait.

func (*Pool) GetClients

func (p *Pool) GetClients(addr string) chan ClientConn

GetClients returns the chan of clients for the given addr.

func (*Pool) IsClosed

func (p *Pool) IsClosed() bool

IsClosed returns true if the client pool is closed.

Jump to

Keyboard shortcuts

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