This section is empty.


This section is empty.


func Spec

Spec returns a configuration specification for the least-pending peer heap peer chooser implementation, making it possible to select the least pending peer with transports that use outbound peer list configuration (like HTTP).

cfg := yarpcconfig.New()

This enables the least-pending peer list:

        url: https://host:port/rpc


type HeapOption

type HeapOption func(*heapConfig)

HeapOption customizes the behavior of a peer heap.

func StartupWait

func StartupWait(t time.Duration) HeapOption

StartupWait specifies how long updates to the heap will block before the list heap been started

Defaults to 5 seconds.

type List

type List struct {
	// contains filtered or unexported fields

List is a peer list and peer chooser that favors the peer with the least pending requests, and then favors the least recently used or most recently introduced peer.

func New

func New(transport peer.Transport, opts ...HeapOption) *List

New returns a new peer heap-chooser-list for the given transport.

func (*List) Choose

func (pl *List) Choose(ctx context.Context, _ *transport.Request) (peer.Peer, func(error), error)

Choose satisfies peer.Chooser, providing a single peer for a request, a callback for when the request is finished, or an error if it fails. The choose method takes a context that must have a deadline. Choose resepects this deadline, waiting for an available peer until the deadline. The peer heap does not use the given *transport.Request and can safely receive nil.

func (*List) IsRunning

func (pl *List) IsRunning() bool

IsRunning returns whether the peer list is running.

func (*List) NotifyStatusChanged

func (pl *List) NotifyStatusChanged(pid peer.Identifier)

NotifyStatusChanged receives notifications when a peer becomes available, connected, unavailable, or when its pending request count changes. This method satisfies peer.Subscriber and is only used for tests, since the peer heap has a subscriber for each invividual peer.

func (*List) Start

func (pl *List) Start() error

Start starts the peer list.

func (*List) Stop

func (pl *List) Stop() error

Stop stops the peer list. This releases all retained peers.

func (*List) Update

func (pl *List) Update(updates peer.ListUpdates) error

Update satisfies the peer.List interface, so a peer list updater can manage the retained peers.