Documentation

Overview

    Package pendingheap provides an implementation of a peer list that sends traffic to the peer with the fewest pending requests, but degenerates to round robin when all peers have equal pending requests, using a heap.

    Index

    Constants

    This section is empty.

    Variables

    This section is empty.

    Functions

    func NewImplementation

    func NewImplementation(opts ...Option) abstractlist.Implementation

      NewImplementation creates a new fewest pending heap abstractlist.Implementation.

      Use this constructor instead of NewList, when wanting to do custom peer connection management.

      func Spec

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

        cfg := yarpcconfig.New()
        cfg.MustRegisterPeerList(pendingheap.Spec())
        

        This enables the pending heap peer list:

        outbounds:
          otherservice:
            unary:
              http:
                url: https://host:port/rpc
                fewest-pending-requests:
                  peers:
                    - 127.0.0.1:8080
                    - 127.0.0.1:8081
        

        Other than a specific peer or peers list, use any peer list updater registered with a yarpc Configurator. The configuration allows for alternative initial allocation capacity and a fail-fast option. With fail-fast enabled, the peer list will return an error immediately if no peers are available (connected) at the time the request is sent.

        fewest-pending-requests:
          peers:
            - 127.0.0.1:8080
          capacity: 1
          failFast: true
        

        func SpecWithOptions

        func SpecWithOptions(options ...ListOption) yarpcconfig.PeerListSpec

          SpecWithOptions accepts additional list constructor options.

          Types

          type Configuration

          type Configuration struct {
          	Capacity *int `config:"capacity"`
          	FailFast bool `config:"failFast"`
          }

            Configuration descripes how to build a fewest pending heap peer list.

            type List

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

              List is a peer list which rotates which peers are to be selected in a circle

              func New

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

                New creates a new pending heap.

                func (*List) Choose

                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

                  func (l *List) Introspect() introspection.ChooserStatus

                    Introspect reveals information about the list to the internal YARPC introspection system.

                    func (*List) IsRunning

                    func (l *List) IsRunning() bool

                      IsRunning returns whether the list has started and not yet stopped.

                      func (*List) NotifyStatusChanged

                      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

                        func (l *List) Peers() []peer.StatusPeer

                          Peers produces a slice of all retained peers.

                          func (*List) Start

                          func (l *List) Start() error

                            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

                            func (l *List) Stop() error

                              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

                              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 func(*listConfig)

                                  ListOption customizes the behavior of a pending requests peer heap.

                                  func Capacity

                                  func Capacity(capacity int) ListOption

                                    Capacity specifies the default capacity of the underlying data structures for this list.

                                    Defaults to 10.

                                    func FailFast

                                    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

                                      func Logger(logger *zap.Logger) ListOption

                                        Logger provides an optional logger for the list.

                                        func Seed

                                        func Seed(seed int64) ListOption

                                          Seed specifies the random seed to use for shuffling peers.

                                          Defaults to time in nanoseconds.

                                          type Option

                                          type Option interface {
                                          	// contains filtered or unexported methods
                                          }

                                            Option configures the peer list implementation constructor.