Documentation
¶
Index ¶
- Constants
- Variables
- type Arg
- 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 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) GetReachableMembers() []string
- 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 PingRequestsSendCompleteEvent
- type PingRequestsSendEvent
- type PingSendCompleteEvent
- type PingSendEvent
- type ProtocolDelayComputeEvent
- type ProtocolFrequencyEvent
- type ProtocolStats
- type RefuteUpdateEvent
- type RequestBeforeReadyEvent
- type Status
- type Timing
Constants ¶
const ( // Alive is the member "alive" state Alive = "alive" // Faulty is the member "faulty" state Faulty = "faulty" // Leave is the member "leave" state Leave = "leave" // Suspect is the memeber "suspect" state Suspect = "suspect" )
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 Arg ¶
type Arg struct{}
An Arg is a blank argument used as filler for making TChannel calls that require nothing to be passed to Arg3
type BootstrapOptions ¶
type BootstrapOptions struct {
// Slice of hosts to bootstrap with, prioritized over provided file
Hosts []string
// File containing a JSON array of hosts to bootstrap with
File string
// Whether or not gossip should start
Stopped bool
// Amount of time before join requests time out
JoinTimeout time.Duration
// Minimum number of nodes to join
JoinSize int
// Maximum time to attempt joins before joining cluster times out
MaxJoinDuration time.Duration
// number of nodes to attempt to join
ParallelismFactor int
}
BootstrapOptions provides options to bootstrap the node with
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"`
}
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 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 propogation count for changes
type Member ¶
type Member struct {
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 ¶
func (*Node) Destroy ¶
func (n *Node) Destroy()
Destroy stops the SWIM protocol and all sub-protocols
func (*Node) GetReachableMembers ¶
func (*Node) Incarnation ¶
Incarnation returns the incarnation number of the local 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) Ready ¶
Ready returns whether or not the node has bootstrapped fully and is ready for use
func (*Node) RegisterListener ¶
func (n *Node) RegisterListener(l EventListener)
RegisterListener adds a listener that will be sent swim events
type NodeInterface ¶
type NodeInterface interface {
Bootstrap(opts *BootstrapOptions) ([]string, error)
CountReachableMembers() int
Destroy()
GetReachableMembers() []string
MemberStats() MemberStats
ProtocolStats() ProtocolStats
Ready() bool
RegisterListener(l EventListener)
}
type Options ¶
type Options struct {
SuspicionTimeout time.Duration
MinProtocolPeriod time.Duration
JoinTimeout, PingTimeout, PingRequestTimeout time.Duration
PingRequestSize int
RollupFlushInterval time.Duration
RollupMaxUpdates int
BootstrapFile string
BootstrapHosts []string
Logger log.Logger
}
Options to create a SWIM with
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 PingRequestsSendCompleteEvent ¶
type PingRequestsSendCompleteEvent struct {
Local string `json:"local"`
Target string `json:"target"`
Peers []string `json:"peers"`
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 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