peer

package
v1.0.0-rc1 Latest Latest
Warning

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

Go to latest
Published: Nov 23, 2016 License: MIT Imports: 3 Imported by: 21

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type Agent

type Agent interface {
	// Get or create a Peer for the Subscriber
	RetainPeer(Identifier, Subscriber) (Peer, error)

	// Unallocate a peer from the Subscriber
	ReleasePeer(Identifier, Subscriber) error
}

Agent manages Peers across different Subscribers. A Subscriber will request a Peer for a specific PeerIdentifier and the Agent has the ability to create a new Peer or return an existing one.

type ChangeListener

type ChangeListener interface {
	// Add a peer to the List (Called directly from a PeerProvider)
	Add(Identifier) error

	// Remove a peer from the List (Called directly from a PeerProvider)
	Remove(Identifier) error
}

ChangeListener listens to adds and removes of Peers from a PeerProvider A List will implement the PeerChangeListener interface in order to receive updates to the list of Peers it is keeping track of

type ConnectionStatus

type ConnectionStatus int

ConnectionStatus maintains information about the Peer's connection state

const (
	// Unavailable indicates the Peer is unavailable for requests
	Unavailable ConnectionStatus = iota

	// Connecting indicates the Peer is in the process of connecting
	Connecting

	// Available indicates the Peer is available for requests
	Available
)

type ErrAgentHasNoReferenceToPeer

type ErrAgentHasNoReferenceToPeer struct {
	AgentName      string
	PeerIdentifier string
}

ErrAgentHasNoReferenceToPeer is called when an agent is expected to operate on a Peer it has no reference to

func (ErrAgentHasNoReferenceToPeer) Error

type ErrChooseContextHasNoDeadline

type ErrChooseContextHasNoDeadline string

ErrChooseContextHasNoDeadline is returned when a context is sent to a peerlist with no deadline

func (ErrChooseContextHasNoDeadline) Error

type ErrInvalidAgentConversion

type ErrInvalidAgentConversion struct {
	Agent        Agent
	ExpectedType string
}

ErrInvalidAgentConversion is called when an agent can't be properly converted

func (ErrInvalidAgentConversion) Error

type ErrInvalidPeerConversion

type ErrInvalidPeerConversion struct {
	Peer         Peer
	ExpectedType string
}

ErrInvalidPeerConversion is called when a peer can't be properly converted

func (ErrInvalidPeerConversion) Error

func (e ErrInvalidPeerConversion) Error() string

type ErrInvalidPeerType

type ErrInvalidPeerType struct {
	ExpectedType   string
	PeerIdentifier Identifier
}

ErrInvalidPeerType is when a specfic peer type is required, but was not passed in

func (ErrInvalidPeerType) Error

func (e ErrInvalidPeerType) Error() string

type ErrPeerAddAlreadyInList

type ErrPeerAddAlreadyInList string

ErrPeerAddAlreadyInList is returned to peer providers if the peerlist is already tracking a peer for the added identifier

func (ErrPeerAddAlreadyInList) Error

func (e ErrPeerAddAlreadyInList) Error() string

type ErrPeerHasNoReferenceToSubscriber

type ErrPeerHasNoReferenceToSubscriber struct {
	PeerIdentifier Identifier
	PeerSubscriber Subscriber
}

ErrPeerHasNoReferenceToSubscriber is called when a Peer is expected to operate on a PeerSubscriber it has no reference to

func (ErrPeerHasNoReferenceToSubscriber) Error

type ErrPeerListAlreadyStarted

type ErrPeerListAlreadyStarted string

ErrPeerListAlreadyStarted represents a failure because Start() was already called on the peerlist.

func (ErrPeerListAlreadyStarted) Error

type ErrPeerListNotStarted

type ErrPeerListNotStarted string

ErrPeerListNotStarted represents a failure because Start() was not called on a peerlist or if Stop() was called.

func (ErrPeerListNotStarted) Error

func (e ErrPeerListNotStarted) Error() string

type ErrPeerRemoveNotInList

type ErrPeerRemoveNotInList string

ErrPeerRemoveNotInList is returned to peer providers if the peerlist is not tracking the peer to remove for a given identifier

func (ErrPeerRemoveNotInList) Error

func (e ErrPeerRemoveNotInList) Error() string

type Identifier

type Identifier interface {
	Identifier() string
}

Identifier is able to uniquely identify a peer (e.g. hostport)

type List

type List interface {
	// Notify the PeerList that it will start receiving requests
	Start() error

	// Notify the PeerList that it will stop receiving requests
	Stop() error

	// Choose a Peer for the next call, block until a peer is available (or timeout)
	ChoosePeer(context.Context, *transport.Request) (Peer, error)
}

List is a collection of Peers. Outbounds request peers from the peer.List to determine where to send requests

type Peer

type Peer interface {
	Identifier

	// Get the status of the Peer
	Status() Status

	// Tell the peer that a request is starting/ending
	// The callsite should look like:
	//   done := peer.StartRequest()
	//   defer done()
	//   // Do request
	StartRequest() (finish func())
}

Peer is a level on top of Identifier. It should be created by a Agent so we can maintain multiple references to the same downstream peer (e.g. hostport). This is useful for load balancing requests to downstream services.

type Status

type Status struct {
	// Current number of pending requests on this peer
	PendingRequestCount int

	// Current status of the Peer's connection
	ConnectionStatus ConnectionStatus
}

Status holds all the information about a peer's state that would be useful to Subscribers

type Subscriber

type Subscriber interface {
	// The Peer Notifies the Subscriber when its status changes (e.g. connections status, pending requests)
	NotifyStatusChanged(Identifier)
}

Subscriber listens to changes of a Peer over time.

Directories

Path Synopsis
x

Jump to

Keyboard shortcuts

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