from transient errors (heartbeast misses). In case of transient errors OverlayForwarder is marked to be unhealty. When overlay forwarder is unhealty its hept on hold so chooseBest() will skip selecting the forwrder Once OverlayForwarder is considered healthy run chooseBest() again so the forwarder can be selected if its the best forwarder Fixes #1737
53 lines
1.3 KiB
Go
53 lines
1.3 KiB
Go
package router
|
|
|
|
import (
|
|
"github.com/weaveworks/mesh"
|
|
)
|
|
|
|
// Interface to overlay network packet handling
|
|
type NetworkOverlay interface {
|
|
mesh.Overlay
|
|
|
|
// The routes have changed, so any cached information should
|
|
// be discarded.
|
|
InvalidateRoutes()
|
|
|
|
// A mapping of a short id to a peer has changed
|
|
InvalidateShortIDs()
|
|
|
|
// Start consuming forwarded packets.
|
|
StartConsumingPackets(*mesh.Peer, *mesh.Peers, OverlayConsumer) error
|
|
}
|
|
|
|
// When a consumer is called, the decoder will already have been used
|
|
// to decode the frame.
|
|
type OverlayConsumer func(ForwardPacketKey) FlowOp
|
|
|
|
// All of the machinery to forward packets to a particular peer
|
|
type OverlayForwarder interface {
|
|
mesh.OverlayConnection
|
|
// Forward a packet across the connection. May be called as soon
|
|
// as the overlay connection is created, in particular before
|
|
// Confirm(). The return value nil means the key could not be
|
|
// handled by this forwarder.
|
|
Forward(ForwardPacketKey) FlowOp
|
|
|
|
HealthChannel() <-chan bool
|
|
}
|
|
|
|
type NullNetworkOverlay struct{ mesh.NullOverlay }
|
|
|
|
func (NullNetworkOverlay) InvalidateRoutes() {
|
|
}
|
|
|
|
func (NullNetworkOverlay) InvalidateShortIDs() {
|
|
}
|
|
|
|
func (NullNetworkOverlay) StartConsumingPackets(*mesh.Peer, *mesh.Peers, OverlayConsumer) error {
|
|
return nil
|
|
}
|
|
|
|
func (NullNetworkOverlay) Forward(ForwardPacketKey) FlowOp {
|
|
return DiscardingFlowOp{}
|
|
}
|