Documentation ¶
Index ¶
- Constants
- Variables
- type BootstrapOptions
- type Change
- type ChangeFilteredEvent
- type ChangesCalculatedEvent
- type ChecksumComputeEvent
- type Endpoint
- type EventListener
- type FullSyncEvent
- type JoinCompleteEvent
- type JoinFailedEvent
- type JoinFailedReason
- type JoinReceiveEvent
- type JoinTriesUpdateEvent
- type ListenerFunc
- type MakeNodeStatusEvent
- type MaxPAdjustedEvent
- type Member
- type MemberStats
- type MemberlistChangesAppliedEvent
- type MemberlistChangesReceivedEvent
- type Node
- func (n *Node) Address() string
- func (n *Node) App() string
- func (n *Node) Bootstrap(opts *BootstrapOptions) ([]string, error)
- func (n *Node) CountReachableMembers() int
- func (n *Node) Destroy()
- func (n *Node) Destroyed() bool
- func (n *Node) GetChecksum() uint32
- func (n *Node) GetReachableMembers() []string
- func (n *Node) HasChanges() bool
- func (n *Node) Incarnation() int64
- func (n *Node) MemberStats() MemberStats
- func (n *Node) ProtocolStats() ProtocolStats
- func (n *Node) Ready() bool
- func (n *Node) RegisterListener(l EventListener)
- func (n *Node) Start()
- func (n *Node) Stop()
- func (n *Node) Stopped() bool
- func (n *Node) Uptime() time.Duration
- type NodeInterface
- type Options
- type PingReceiveEvent
- type PingRequestPingEvent
- type PingRequestReceiveEvent
- type PingRequestSendErrorEvent
- type PingRequestsSendCompleteEvent
- type PingRequestsSendEvent
- type PingSendCompleteEvent
- type PingSendEvent
- type ProtocolDelayComputeEvent
- type ProtocolFrequencyEvent
- type ProtocolStats
- type RefuteUpdateEvent
- type RequestBeforeReadyEvent
- type StateTimeouts
- type Status
- type Timing
Constants ¶
const ( // Alive is the member "alive" state Alive = "alive" // Suspect is the member "suspect" state Suspect = "suspect" // Faulty is the member "faulty" state Faulty = "faulty" // Leave is the member "leave" state Leave = "leave" )
Variables ¶
var ( // ErrNodeNotReady is returned when a remote request is being handled while the node is not yet ready ErrNodeNotReady = errors.New("node is not ready to handle requests") )
Functions ¶
This section is empty.
Types ¶
type BootstrapOptions ¶
type BootstrapOptions struct { // The DiscoverProvider resolves a list of bootstrap hosts. DiscoverProvider discovery.DiscoverProvider // Whether or not gossip should be started immediately after a successful // bootstrap. Stopped bool // Amount of time before individual join requests time out. JoinTimeout time.Duration // Minimum number of nodes to join to satisfy a bootstrap. JoinSize int // Maximum time to attempt joins before the entire bootstrap process times // out. MaxJoinDuration time.Duration // A higher ParallelismFactor increases the number of nodes that a // bootstrapping node will attempt to reach out to in order to satisfy // `JoinSize` (the number of nodes that will be contacted at a time is // `ParallelismFactor * JoinSize`). ParallelismFactor int }
BootstrapOptions is a configuration struct passed to Node.Bootstrap.
type Change ¶
type Change struct { Source string `json:"source"` SourceIncarnation int64 `json:"sourceIncarnationNumber"` Address string `json:"address"` Incarnation int64 `json:"incarnationNumber"` Status string `json:"status"` // Use util.Timestamp for bi-direction binding to time encoded as // integer Unix timestamp in JSON Timestamp util.Timestamp `json:"timestamp"` }
A Change is a change a member to be applied
type ChangeFilteredEvent ¶
type ChangeFilteredEvent struct {
Change Change
}
A ChangeFilteredEvent is sent when a change has been filtered from the list to be disseminated
type ChangesCalculatedEvent ¶
type ChangesCalculatedEvent struct {
Changes []Change
}
A ChangesCalculatedEvent is sent when the disseminator generated the list of changes to send in a ping or its response
type ChecksumComputeEvent ¶
type ChecksumComputeEvent struct { Duration time.Duration `json:"duration"` Checksum uint32 `json:"checksum"` OldChecksum uint32 `json:"oldchecksum"` }
A ChecksumComputeEvent is sent when a the rings checksum is computed
type EventListener ¶
An EventListener handles events given to it by the SWIM node. HandleEvent should be thread safe.
type FullSyncEvent ¶
type FullSyncEvent struct { Remote string `json:"remote"` RemoteChecksum uint32 `json:"remoteChecksum"` }
A FullSyncEvent is sent when the disseminator's node issues changes a full sync of the memberlist
type JoinCompleteEvent ¶
type JoinCompleteEvent struct { Duration time.Duration `json:"duration"` NumJoined int `json:"numJoined"` Joined []string `json:"joined"` }
A JoinCompleteEvent is sent when a join request to remote node successfully completes
type JoinFailedEvent ¶
type JoinFailedEvent struct { Reason JoinFailedReason Error error }
A JoinFailedEvent is sent when a join request to remote node did not successfully
type JoinFailedReason ¶
type JoinFailedReason string
JoinFailedReason indicates the reason a join failed
const ( // Error as a JoinFailedReason indicates that the join failed because of an error Error JoinFailedReason = "err" // Destroyed as a JoinFailedReason indicates that the join failed because ringpop was destroyed during the join Destroyed = "destroyed" )
type JoinReceiveEvent ¶
A JoinReceiveEvent is sent when a join request is received by a node
type JoinTriesUpdateEvent ¶
type JoinTriesUpdateEvent struct {
Retries int
}
A JoinTriesUpdateEvent is sent when the joiner tries to join a group
type ListenerFunc ¶ added in v0.3.0
The ListenerFunc type is an adapter to allow the use of ordinary functions as EventListeners.
func (ListenerFunc) HandleEvent ¶ added in v0.3.0
func (f ListenerFunc) HandleEvent(e events.Event)
HandleEvent calls f(e).
type MakeNodeStatusEvent ¶
type MakeNodeStatusEvent struct {
Status string
}
A MakeNodeStatusEvent is sent when Make[Status] is called on member list
type MaxPAdjustedEvent ¶
A MaxPAdjustedEvent occurs when the disseminator adjusts the max propagation count for changes
type Member ¶
type Member struct { sync.RWMutex Address string `json:"address"` Status string `json:"status"` Incarnation int64 `json:"incarnationNumber"` }
A Member is a member in the member list
type MemberStats ¶
MemberStats contains members in a memberlist and the checksum of those members
type MemberlistChangesAppliedEvent ¶
type MemberlistChangesAppliedEvent struct { Changes []Change `json:"changes"` OldChecksum uint32 `json:"oldChecksum"` NewChecksum uint32 `json:"newChecksum"` NumMembers int `json:"numMembers"` }
A MemberlistChangesAppliedEvent contains changes that were applied to the node's memberlist as well as the previous and new checksums and the number of members in the memberlist
type MemberlistChangesReceivedEvent ¶
type MemberlistChangesReceivedEvent struct {
Changes []Change `json:"changes"`
}
A MemberlistChangesReceivedEvent contains changes received by the node's memberlist, pending application
type Node ¶
type Node struct {
// contains filtered or unexported fields
}
A Node is a SWIM member
func NewNode ¶
func NewNode(app, address string, channel shared.SubChannel, opts *Options) *Node
NewNode returns a new SWIM Node.
func (*Node) Bootstrap ¶
func (n *Node) Bootstrap(opts *BootstrapOptions) ([]string, error)
Bootstrap joins a node to a cluster. The channel provided to the node must be listening for the bootstrap to complete.
func (*Node) CountReachableMembers ¶
CountReachableMembers returns the number of members currently in this node's membership list that aren't faulty.
func (*Node) Destroy ¶
func (n *Node) Destroy()
Destroy stops the SWIM protocol and all sub-protocols.
func (*Node) GetChecksum ¶ added in v0.3.0
GetChecksum returns the current checksum of the node's memberlist.
func (*Node) GetReachableMembers ¶
GetReachableMembers returns a slice of members currently in this node's membership list that aren't faulty.
func (*Node) HasChanges ¶ added in v0.3.0
HasChanges reports whether Node has changes to disseminate.
func (*Node) Incarnation ¶
Incarnation returns the incarnation number of the Node.
func (*Node) MemberStats ¶
func (n *Node) MemberStats() MemberStats
MemberStats returns the current checksum of the node's memberlist and a slice of the members in the memberlist in lexographically sorted order by address
func (*Node) ProtocolStats ¶
func (n *Node) ProtocolStats() ProtocolStats
ProtocolStats returns stats about the node's SWIM protocol.
func (*Node) RegisterListener ¶
func (n *Node) RegisterListener(l EventListener)
RegisterListener adds an EventListener to the node. When a swim event e is emitted, l.HandleEvent(e) is called for every registered listener l. Attention, all listeners are called synchronously. Be careful with registering blocking and other slow calls.
type NodeInterface ¶
type NodeInterface interface { Bootstrap(opts *BootstrapOptions) ([]string, error) CountReachableMembers() int Destroy() GetChecksum() uint32 GetReachableMembers() []string MemberStats() MemberStats ProtocolStats() ProtocolStats Ready() bool RegisterListener(l EventListener) }
NodeInterface specifies the public-facing methods that a SWIM Node implements.
type Options ¶
type Options struct { StateTimeouts StateTimeouts MinProtocolPeriod time.Duration JoinTimeout, PingTimeout, PingRequestTimeout time.Duration PingRequestSize int RollupFlushInterval time.Duration RollupMaxUpdates int Clock clock.Clock }
Options is a configuration struct passed the NewNode constructor.
type PingReceiveEvent ¶
type PingReceiveEvent struct { Local string `json:"local"` Source string `json:"source"` Changes []Change `json:"changes"` }
A PingReceiveEvent is sent when the node receives a ping from a remote node
type PingRequestPingEvent ¶
type PingRequestPingEvent struct { Local string `json:"local"` Source string `json:"source"` Target string `json:"target"` Duration time.Duration `json:"duration"` }
A PingRequestPingEvent is sent when the node sends a ping to the target node at the behest of the source node and receives a response
type PingRequestReceiveEvent ¶
type PingRequestReceiveEvent struct { Local string `json:"local"` Source string `json:"source"` Target string `json:"target"` Changes []Change `json:"changes"` }
A PingRequestReceiveEvent is sent when the node receives a pign request from a remote node
type PingRequestSendErrorEvent ¶ added in v0.3.0
type PingRequestSendErrorEvent struct { Local string `json:"local"` Target string `json:"target"` Peers []string `json:"peers"` Peer string `json:"peer"` }
A PingRequestSendErrorEvent is sent when the node can't get a response sending ping requests to remote nodes
type PingRequestsSendCompleteEvent ¶
type PingRequestsSendCompleteEvent struct { Local string `json:"local"` Target string `json:"target"` Peers []string `json:"peers"` Peer string `json:"peer"` Duration time.Duration `json:"duration"` }
A PingRequestsSendCompleteEvent is sent when the node finished sending ping requests to remote nodes
type PingRequestsSendEvent ¶
type PingRequestsSendEvent struct { Local string `json:"local"` Target string `json:"target"` Peers []string `json:"peers"` }
A PingRequestsSendEvent is sent when the node sends ping requests to remote nodes
type PingSendCompleteEvent ¶
type PingSendCompleteEvent struct { Local string `json:"local"` Remote string `json:"remote"` Changes []Change `json:"changes"` Duration time.Duration `json:"duration"` }
A PingSendCompleteEvent is sent when the node finished sending a ping to a remote node
type PingSendEvent ¶
type PingSendEvent struct { Local string `json:"local"` Remote string `json:"remote"` Changes []Change `json:"changes"` }
A PingSendEvent is sent when the node sends a ping to a remote node
type ProtocolDelayComputeEvent ¶
A ProtocolDelayComputeEvent is sent when protocol delay is computed during a gossip run
type ProtocolFrequencyEvent ¶
A ProtocolFrequencyEvent is sent when a gossip run is finished
type ProtocolStats ¶
type ProtocolStats struct { Timing Timing `json:"timing"` Rate time.Duration `json:"protocolRate"` ClientRate float64 `json:"clientRate"` ServerRate float64 `json:"serverRate"` TotalRate float64 `json:"totalRate"` }
ProtocolStats contains stats about the SWIM Protocol for the node
type RefuteUpdateEvent ¶
type RefuteUpdateEvent struct{}
A RefuteUpdateEvent is sent when a node detects gossip about its own state that needs to be corrected
type RequestBeforeReadyEvent ¶
type RequestBeforeReadyEvent struct {
Endpoint Endpoint
}
A RequestBeforeReadyEvent is sent if a remote request came in for a ringpop endpoint while ringpop was not ready to process requests
type StateTimeouts ¶ added in v0.4.0
type StateTimeouts struct { // Suspect is the timeout it takes a node in suspect mode to transition to faulty Suspect time.Duration }
StateTimeouts contains the configured timeouts for every state before transitioning to the new state
type Status ¶
type Status struct {
Status string `json:"status"`
}
Status contains a status string of the response from a handler.
type Timing ¶
type Timing struct { Type string `json:"type"` Min int64 `json:"min"` Max int64 `json:"max"` Sum int64 `json:"sum"` Variance float64 `json:"variance"` Mean float64 `json:"mean"` StdDev float64 `json:"std_dev"` Count int64 `json:"count"` Median float64 `json:"median"` P75 float64 `json:"p75"` P95 float64 `json:"p95"` P99 float64 `json:"p99"` P999 float64 `json:"p999"` }
Timing contains timing information for the SWIM protocol for the node