router

package
v1.4.9 Latest Latest
Warning

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

Go to latest
Published: Jul 5, 2021 License: BSD-3-Clause Imports: 27 Imported by: 0

Documentation

Index

Constants

View Source
const (
	// DefaultMaxNonStakerPendingMsgs is the default number of messages that can be taken from
	// the shared message pool by a single node
	DefaultMaxNonStakerPendingMsgs uint32 = 20
	// DefaultStakerPortion is the default portion of resources to reserve for stakers
	DefaultStakerPortion float64 = 0.375
)

Variables

This section is empty.

Functions

This section is empty.

Types

type ChainRouter

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

ChainRouter routes incoming messages from the validator network to the consensus engines that the messages are intended for. Note that consensus engines are uniquely identified by the ID of the chain that they are working on.

func (*ChainRouter) Accepted

func (cr *ChainRouter) Accepted(validatorID ids.ShortID, chainID ids.ID, requestID uint32, containerIDs []ids.ID)

Accepted routes an incoming Accepted request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) AcceptedFrontier

func (cr *ChainRouter) AcceptedFrontier(validatorID ids.ShortID, chainID ids.ID, requestID uint32, containerIDs []ids.ID)

AcceptedFrontier routes an incoming AcceptedFrontier request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) AddChain

func (cr *ChainRouter) AddChain(chain *Handler)

AddChain registers the specified chain so that incoming messages can be routed to it

func (*ChainRouter) Benched

func (cr *ChainRouter) Benched(chainID ids.ID, validatorID ids.ShortID)

Benched routes an incoming notification that a validator was benched

func (*ChainRouter) Chits

func (cr *ChainRouter) Chits(validatorID ids.ShortID, chainID ids.ID, requestID uint32, votes []ids.ID)

Chits routes an incoming Chits message from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) Connected

func (cr *ChainRouter) Connected(validatorID ids.ShortID)

Connected routes an incoming notification that a validator was just connected

func (*ChainRouter) Disconnected

func (cr *ChainRouter) Disconnected(validatorID ids.ShortID)

Disconnected routes an incoming notification that a validator was connected

func (*ChainRouter) EndInterval

func (cr *ChainRouter) EndInterval()

EndInterval notifies the chains that the current CPU interval has ended

func (*ChainRouter) Get

func (cr *ChainRouter) Get(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerID ids.ID)

Get routes an incoming Get request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) GetAccepted

func (cr *ChainRouter) GetAccepted(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerIDs []ids.ID)

GetAccepted routes an incoming GetAccepted request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) GetAcceptedFailed

func (cr *ChainRouter) GetAcceptedFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)

GetAcceptedFailed routes an incoming GetAcceptedFailed request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) GetAcceptedFrontier

func (cr *ChainRouter) GetAcceptedFrontier(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time)

GetAcceptedFrontier routes an incoming GetAcceptedFrontier request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) GetAcceptedFrontierFailed

func (cr *ChainRouter) GetAcceptedFrontierFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)

GetAcceptedFrontierFailed routes an incoming GetAcceptedFrontierFailed request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) GetAncestors

func (cr *ChainRouter) GetAncestors(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerID ids.ID)

GetAncestors routes an incoming GetAncestors message from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID] The maximum number of ancestors to respond with is defined in snow/engine/commong/bootstrapper.go

func (*ChainRouter) GetAncestorsFailed

func (cr *ChainRouter) GetAncestorsFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)

GetAncestorsFailed routes an incoming GetAncestorsFailed message from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) GetFailed

func (cr *ChainRouter) GetFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)

GetFailed routes an incoming GetFailed message from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) Gossip

func (cr *ChainRouter) Gossip()

Gossip accepted containers

func (*ChainRouter) HealthCheck

func (cr *ChainRouter) HealthCheck() (interface{}, error)

HealthCheck returns results of router health checks. Returns: 1) Information about health check results 2) An error if the health check reports unhealthy

func (*ChainRouter) Initialize

func (cr *ChainRouter) Initialize(
	nodeID ids.ShortID,
	log logging.Logger,
	timeoutManager *timeout.Manager,
	gossipFrequency time.Duration,
	closeTimeout time.Duration,
	criticalChains ids.Set,
	onFatal func(exitCode int),
	healthConfig HealthConfig,
	metricsNamespace string,
	metricsRegisterer prometheus.Registerer,
) error

Initialize the router.

When this router receives an incoming message, it cancels the timeout in [timeouts] associated with the request that caused the incoming message, if applicable.

This router also fires a gossip event every [gossipFrequency] to the engine, notifying the engine it should gossip it's accepted set.

func (*ChainRouter) MultiPut

func (cr *ChainRouter) MultiPut(validatorID ids.ShortID, chainID ids.ID, requestID uint32, containers [][]byte)

MultiPut routes an incoming MultiPut message from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) PullQuery

func (cr *ChainRouter) PullQuery(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerID ids.ID)

PullQuery routes an incoming PullQuery request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) PushQuery

func (cr *ChainRouter) PushQuery(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerID ids.ID, container []byte)

PushQuery routes an incoming PushQuery request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) Put

func (cr *ChainRouter) Put(validatorID ids.ShortID, chainID ids.ID, requestID uint32, containerID ids.ID, container []byte)

Put routes an incoming Put request from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) QueryFailed

func (cr *ChainRouter) QueryFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)

QueryFailed routes an incoming QueryFailed message from the validator with ID [validatorID] to the consensus engine working on the chain with ID [chainID]

func (*ChainRouter) RegisterRequest

func (cr *ChainRouter) RegisterRequest(
	validatorID ids.ShortID,
	chainID ids.ID,
	requestID uint32,
	msgType constants.MsgType,
)

RegisterRequests marks that we should expect to receive a reply from the given validator regarding the given chain and the reply should have the given requestID. The type of message we sent the validator was [msgType]. Every registered request must be cleared either by receiving a valid reply and passing it to the appropriate chain or by a call to GetFailed, GetAncestorsFailed, etc. This method registers a timeout that calls such methods if we don't get a reply in time.

func (*ChainRouter) RemoveChain

func (cr *ChainRouter) RemoveChain(chainID ids.ID)

RemoveChain removes the specified chain so that incoming messages can't be routed to it

func (*ChainRouter) Shutdown

func (cr *ChainRouter) Shutdown()

Shutdown shuts down this router

func (*ChainRouter) Unbenched

func (cr *ChainRouter) Unbenched(chainID ids.ID, validatorID ids.ShortID)

Unbenched routes an incoming notification that a validator was just unbenched

type ExternalRouter

type ExternalRouter interface {
	RegisterRequest(validatorID ids.ShortID, chainID ids.ID, requestID uint32, msgType constants.MsgType)
	GetAcceptedFrontier(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time)
	AcceptedFrontier(validatorID ids.ShortID, chainID ids.ID, requestID uint32, containerIDs []ids.ID)
	GetAccepted(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerIDs []ids.ID)
	Accepted(validatorID ids.ShortID, chainID ids.ID, requestID uint32, containerIDs []ids.ID)
	GetAncestors(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerID ids.ID)
	MultiPut(validatorID ids.ShortID, chainID ids.ID, requestID uint32, containers [][]byte)
	Get(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerID ids.ID)
	Put(validatorID ids.ShortID, chainID ids.ID, requestID uint32, containerID ids.ID, container []byte)
	PushQuery(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerID ids.ID, container []byte)
	PullQuery(validatorID ids.ShortID, chainID ids.ID, requestID uint32, deadline time.Time, containerID ids.ID)
	Chits(validatorID ids.ShortID, chainID ids.ID, requestID uint32, votes []ids.ID)
}

ExternalRouter routes messages from the network to the Handler of the consensus engine that the message is intended for

type Handler

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

Handler passes incoming messages from the network to the consensus engine (Actually, it receives the incoming messages from a ChainRouter, but same difference)

func (*Handler) Accepted

func (h *Handler) Accepted(validatorID ids.ShortID, requestID uint32, containerIDs []ids.ID) bool

Accepted passes a Accepted message received from the network to the consensus engine.

func (*Handler) AcceptedFrontier

func (h *Handler) AcceptedFrontier(validatorID ids.ShortID, requestID uint32, containerIDs []ids.ID) bool

AcceptedFrontier passes a AcceptedFrontier message received from the network to the consensus engine.

func (*Handler) Chits

func (h *Handler) Chits(validatorID ids.ShortID, requestID uint32, votes []ids.ID) bool

Chits passes a Chits message received from the network to the consensus engine.

func (*Handler) Connected

func (h *Handler) Connected(validatorID ids.ShortID)

Connected passes a new connection notification to the consensus engine

func (*Handler) Context

func (h *Handler) Context() *snow.Context

Context of this Handler

func (*Handler) Disconnected

func (h *Handler) Disconnected(validatorID ids.ShortID)

Disconnected passes a new connection notification to the consensus engine

func (*Handler) Dispatch

func (h *Handler) Dispatch()

Dispatch waits for incoming messages from the network and, when they arrive, sends them to the consensus engine

func (*Handler) Engine

func (h *Handler) Engine() common.Engine

Engine returns the engine this handler dispatches to

func (*Handler) Get

func (h *Handler) Get(validatorID ids.ShortID, requestID uint32, deadline time.Time, containerID ids.ID) bool

Get passes a Get message received from the network to the consensus engine.

func (*Handler) GetAccepted

func (h *Handler) GetAccepted(validatorID ids.ShortID, requestID uint32, deadline time.Time, containerIDs []ids.ID) bool

GetAccepted passes a GetAccepted message received from the network to the consensus engine.

func (*Handler) GetAcceptedFailed

func (h *Handler) GetAcceptedFailed(validatorID ids.ShortID, requestID uint32)

GetAcceptedFailed passes a GetAcceptedFailed message received from the network to the consensus engine.

func (*Handler) GetAcceptedFrontier

func (h *Handler) GetAcceptedFrontier(validatorID ids.ShortID, requestID uint32, deadline time.Time) bool

GetAcceptedFrontier passes a GetAcceptedFrontier message received from the network to the consensus engine.

func (*Handler) GetAcceptedFrontierFailed

func (h *Handler) GetAcceptedFrontierFailed(validatorID ids.ShortID, requestID uint32)

GetAcceptedFrontierFailed passes a GetAcceptedFrontierFailed message received from the network to the consensus engine.

func (*Handler) GetAncestors

func (h *Handler) GetAncestors(validatorID ids.ShortID, requestID uint32, deadline time.Time, containerID ids.ID) bool

GetAncestors passes a GetAncestors message received from the network to the consensus engine.

func (*Handler) GetAncestorsFailed

func (h *Handler) GetAncestorsFailed(validatorID ids.ShortID, requestID uint32)

GetAncestorsFailed passes a GetAncestorsFailed message to the consensus engine.

func (*Handler) GetFailed

func (h *Handler) GetFailed(validatorID ids.ShortID, requestID uint32)

GetFailed passes a GetFailed message to the consensus engine.

func (*Handler) Gossip

func (h *Handler) Gossip()

Gossip passes a gossip request to the consensus engine

func (*Handler) Initialize

func (h *Handler) Initialize(
	engine common.Engine,
	validators validators.Set,
	msgChan <-chan common.Message,
	maxPendingMsgs uint32,
	maxNonStakerPendingMsgs uint32,
	stakerMsgPortion,
	stakerCPUPortion float64,
	namespace string,
	metrics prometheus.Registerer,
) error

Initialize this consensus handler engine must be initialized before initializing the handler

func (*Handler) MultiPut

func (h *Handler) MultiPut(validatorID ids.ShortID, requestID uint32, containers [][]byte) bool

MultiPut passes a MultiPut message received from the network to the consensus engine.

func (*Handler) Notify

func (h *Handler) Notify(msg common.Message)

Notify ...

func (*Handler) PullQuery

func (h *Handler) PullQuery(validatorID ids.ShortID, requestID uint32, deadline time.Time, containerID ids.ID) bool

PullQuery passes a PullQuery message received from the network to the consensus engine.

func (*Handler) PushQuery

func (h *Handler) PushQuery(validatorID ids.ShortID, requestID uint32, deadline time.Time, containerID ids.ID, container []byte) bool

PushQuery passes a PushQuery message received from the network to the consensus engine.

func (*Handler) Put

func (h *Handler) Put(validatorID ids.ShortID, requestID uint32, containerID ids.ID, container []byte) bool

Put passes a Put message received from the network to the consensus engine.

func (*Handler) QueryFailed

func (h *Handler) QueryFailed(validatorID ids.ShortID, requestID uint32)

QueryFailed passes a QueryFailed message received from the network to the consensus engine.

func (*Handler) SetEngine

func (h *Handler) SetEngine(engine common.Engine)

SetEngine sets the engine for this handler to dispatch to

func (*Handler) Shutdown

func (h *Handler) Shutdown()

Shutdown asynchronously shuts down the dispatcher. The handler should never be invoked again after calling Shutdown.

func (*Handler) Timeout

func (h *Handler) Timeout()

Timeout passes a new timeout notification to the consensus engine

type HealthConfig

type HealthConfig struct {
	// Reports unhealthy if we drop more than [MaxDropRate] of messages
	MaxDropRate float64

	// Halflife of averager used to calculate the message drop rate
	// Must be > 0.
	// Larger value --> Drop rate affected less by recent messages
	MaxDropRateHalflife time.Duration

	// Reports unhealthy if more than this number of requests are outstanding.
	// Must be > 0
	MaxOutstandingRequests int

	// Reports unhealthy if there is a request outstanding for longer than this
	MaxOutstandingDuration time.Duration

	// Reports unhealthy if there is at least 1 outstanding not processed
	// before this mark
	MaxRunTimeRequests time.Duration
}

HealthConfig describes parameters for router health checks.

type InternalRouter

type InternalRouter interface {
	GetAcceptedFrontierFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)
	GetAcceptedFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)
	GetFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)
	GetAncestorsFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)
	QueryFailed(validatorID ids.ShortID, chainID ids.ID, requestID uint32)

	Connected(validatorID ids.ShortID)
	Disconnected(validatorID ids.ShortID)

	benchlist.Benchable
}

InternalRouter deals with messages internal to this node

type MsgManager

type MsgManager interface {
	// AddPending marks that there is a message from [vdr] ready to be processed.
	// Returns true if the message will eventually be processed.
	AddPending(ids.ShortID) bool
	// Called when we process a message from the given peer
	RemovePending(ids.ShortID)
	Utilization(ids.ShortID) float64
}

MsgManager manages incoming messages. It should be called when an incoming message is ready to be processed and when an incoming message is processed. We call the message "pending" if it has been received but not processed.

func NewMsgManager

func NewMsgManager(
	vdrs validators.Set,
	log logging.Logger,
	msgTracker tracker.CountingTracker,
	cpuTracker tracker.TimeTracker,
	maxPendingMsgs,
	maxNonStakerPendingMsgs uint32,
	stakerMsgPortion,
	stakerCPUPortion float64,
	metricsNamespace string,
	metricsRegisterer prometheus.Registerer,
) (MsgManager, error)

NewMsgManager returns a new MsgManager [vdrs] is the network validator set [msgTracker] tracks how many messages we've received from each peer [cpuTracker] tracks how much time we spend processing messages from each peer [maxPendingMsgs] is the maximum number of pending messages (those we have

received but not processed.)

[maxNonStakerPendingMsgs] is the maximum number of pending messages from non-validators.

type Router

type Router interface {
	ExternalRouter
	InternalRouter

	Initialize(
		nodeID ids.ShortID,
		log logging.Logger,
		timeouts *timeout.Manager,
		gossipFrequency,
		shutdownTimeout time.Duration,
		criticalChains ids.Set,
		onFatal func(exitCode int),
		healthConfig HealthConfig,
		metricsNamespace string,
		metricsRegisterer prometheus.Registerer,
	) error
	Shutdown()
	AddChain(chain *Handler)
	RemoveChain(chainID ids.ID)
	health.Checkable
}

Router routes consensus messages to the Handler of the consensus engine that the messages are intended for

type Timer

type Timer struct {
	Handler *Handler
	Preempt chan struct{}
}

func (*Timer) RegisterTimeout

func (t *Timer) RegisterTimeout(d time.Duration)

Jump to

Keyboard shortcuts

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