Documentation ¶
Index ¶
- func NewImplementation(opts ...Option) abstractlist.Implementation
- func Spec() yarpcconfig.PeerListSpec
- func SpecWithOptions(options ...ListOption) yarpcconfig.PeerListSpec
- type Configuration
- type List
- func (l *List) Choose(ctx context.Context, req *transport.Request) (peer peer.Peer, onFinish func(error), err error)
- func (l *List) Introspect() introspection.ChooserStatus
- func (l *List) IsRunning() bool
- func (l *List) NotifyStatusChanged(pid peer.Identifier)
- func (l *List) Peers() []peer.StatusPeer
- func (l *List) Start() error
- func (l *List) Stop() error
- func (l *List) Update(updates peer.ListUpdates) error
- type ListOption
- type Option
Constants ¶
This section is empty.
Variables ¶
This section is empty.
Functions ¶
func NewImplementation ¶ added in v1.47.0
func NewImplementation(opts ...Option) abstractlist.Implementation
NewImplementation creates a new random abstractlist.Implementation.
Use this constructor instead of NewList, when wanting to do custom peer connection management.
func Spec ¶
func Spec() yarpcconfig.PeerListSpec
Spec returns a configuration specification for the random peer list implementation, making it possible to select a random peer with transports that use outbound peer list configuration (like HTTP).
cfg := yarpcconfig.New() cfg.MustRegisterPeerList(random.Spec())
This enables the random peer list:
outbounds: otherservice: unary: http: url: https://host:port/rpc random: peers: - 127.0.0.1:8080 - 127.0.0.1:8081
func SpecWithOptions ¶ added in v1.42.1
func SpecWithOptions(options ...ListOption) yarpcconfig.PeerListSpec
SpecWithOptions accepts additional list constructor options.
Types ¶
type Configuration ¶ added in v1.42.0
type Configuration struct { Capacity *int `config:"capacity"` FailFast bool `config:"failFast"` // DefaultChooseTimeout specifies the deadline to add to Choose calls if not // present. This enables calls without deadlines, ie streaming, to choose // peers without waiting indefinitely. DefaultChooseTimeout *time.Duration `config:"defaultChooseTimeout"` }
Configuration descripes how to build a random peer list.
type List ¶
type List struct {
// contains filtered or unexported fields
}
List is a PeerList that rotates which peers are to be selected randomly
func New ¶
func New(transport peer.Transport, opts ...ListOption) *List
New creates a new random peer list.
func (*List) Choose ¶ added in v1.43.0
func (l *List) Choose(ctx context.Context, req *transport.Request) (peer peer.Peer, onFinish func(error), err error)
Choose returns a peer, suitable for sending a request.
The peer is not guaranteed to be connected and available, but the peer list makes every attempt to ensure this and minimize the probability that a chosen peer will fail to carry a request.
func (*List) Introspect ¶ added in v1.43.0
func (l *List) Introspect() introspection.ChooserStatus
Introspect reveals information about the list to the internal YARPC introspection system.
func (*List) IsRunning ¶ added in v1.43.0
IsRunning returns whether the list has started and not yet stopped.
func (*List) NotifyStatusChanged ¶ added in v1.43.0
func (l *List) NotifyStatusChanged(pid peer.Identifier)
NotifyStatusChanged forwards a status change notification to an individual peer in the list.
This satisfies the peer.Subscriber interface and should only be used to send notifications in tests. The list's RetainPeer and ReleasePeer methods deal with an individual peer.Subscriber instance for each peer in the list, avoiding a map lookup.
func (*List) Peers ¶ added in v1.43.0
func (l *List) Peers() []peer.StatusPeer
Peers produces a slice of all retained peers.
func (*List) Start ¶ added in v1.43.0
Start causes the peer list to start.
Starting will retain all peers that have been added but not removed the first time it is called.
Start may be called any number of times and in any order in relation to Stop but will only cause the list to start the first time, and only if it has not already been stopped.
func (*List) Stop ¶ added in v1.43.0
Stop causes the peer list to stop.
Stopping will release all retained peers to the underlying transport.
Stop may be called any number of times and in order in relation to Start but will only cause the list to stop the first time, and only if it has previously been started.
func (*List) Update ¶ added in v1.43.0
func (l *List) Update(updates peer.ListUpdates) error
Update may add and remove logical peers in the list.
The peer list uses a transport to obtain a physical peer for each logical peer. The transport is responsible for informing the peer list whether the peer is available or unavailable, but cannot guarantee that the peer will still be available after it is chosen.
type ListOption ¶
type ListOption interface {
// contains filtered or unexported methods
}
ListOption customizes the behavior of a random list.
func Capacity ¶
func Capacity(capacity int) ListOption
Capacity specifies the default capacity of the underlying data structures for this list.
Defaults to 10.
func DefaultChooseTimeout ¶ added in v1.46.0
func DefaultChooseTimeout(timeout time.Duration) ListOption
DefaultChooseTimeout specifies the default timeout to add to 'Choose' calls without context deadlines. This prevents long-lived streams from setting calling deadlines.
Defaults to 500ms.
func FailFast ¶ added in v1.42.0
func FailFast() ListOption
FailFast indicates that the peer list should not wait for a peer to become available when choosing a peer.
This option is preferrable when the better failure mode is to retry from the origin, since another proxy instance might already have a connection.
func Logger ¶ added in v1.42.1
func Logger(logger *zap.Logger) ListOption
Logger specifies a logger.
func Source ¶
func Source(source rand.Source) ListOption
Source is a source of randomness for the peer list.