Documentation ¶
Index ¶
- Constants
- func GetAdvertiseAddr(advAddr string) (net.Addr, error)
- type ClusterBuilder
- type ClusterDiscover
- type ClusterDiscoverService
- type ClusterDiscovery
- func (m ClusterDiscovery) IsCurrentlyLeader() bool
- func (cd *ClusterDiscovery) Join(existing []string) error
- func (m ClusterDiscovery) LeaderInfo() MemberInformation
- func (m ClusterDiscovery) MembersInfo() map[string]MemberInformation
- func (m ClusterDiscovery) OnChangeEvent(event MemberEvent, info MemberInformation)
- func (m ClusterDiscovery) OnEvent(eventName string, payload []byte)
- func (cd *ClusterDiscovery) SendEvent(name string, payload []byte) error
- type ClusterDiscoveryConfiguration
- type ClusterInformer
- type EventNotifier
- type LogLevel
- type MemberEvent
- type MemberInformation
- type MembershipConfiguration
- type RaftConfiguration
- type RaftStreamLayer
- type UserEvent
Constants ¶
const RaftRPC = 1
Variables ¶
This section is empty.
Functions ¶
Types ¶
type ClusterBuilder ¶
ClusterBuilder is an interface that wraps the Join Methods. Join joins an existing cluster.
type ClusterDiscover ¶
type ClusterDiscover interface {
OnChangeEvent(event MemberEvent, information MemberInformation)
}
ClusterDiscover is an interface that wraps the basic OnChangeEvent Method. OnChangeEvent notifies the provider when there is a change in the cluster dynamics.
type ClusterDiscoverService ¶
type ClusterDiscoverService interface { ClusterDiscover UserEvent ClusterInformer }
ClusterDiscoverService is an interface that groups the ClusterDiscover, UserEvent and ClusterInformer.
type ClusterDiscovery ¶
type ClusterDiscovery struct { // UserInputs. ClusterDiscoveryConfiguration ClusterDiscoveryConfiguration // contains filtered or unexported fields }
ClusterDiscovery creates an raft and gossip based ClusterDiscoverService for consumers.
func NewClusterDiscovery ¶
func NewClusterDiscovery(logger *zap.Logger, cdc ClusterDiscoveryConfiguration, en EventNotifier) (*ClusterDiscovery, error)
func (ClusterDiscovery) IsCurrentlyLeader ¶
func (m ClusterDiscovery) IsCurrentlyLeader() bool
IsCurrentlyLeader reports whether the given member(node) is in leader state inside the cluster.
func (*ClusterDiscovery) Join ¶
func (cd *ClusterDiscovery) Join(existing []string) error
func (ClusterDiscovery) LeaderInfo ¶
func (m ClusterDiscovery) LeaderInfo() MemberInformation
LeaderInfo provides the information about the member(node) which is currently acting as leader inside the cluster.
func (ClusterDiscovery) MembersInfo ¶
func (m ClusterDiscovery) MembersInfo() map[string]MemberInformation
MembersInfo returns all the current active and healthy members(nodes) of the cluster.
func (ClusterDiscovery) OnChangeEvent ¶
func (m ClusterDiscovery) OnChangeEvent(event MemberEvent, info MemberInformation)
func (ClusterDiscovery) OnEvent ¶
OnEvent callback's the provider with the named event and it's payload.
func (*ClusterDiscovery) SendEvent ¶
func (cd *ClusterDiscovery) SendEvent(name string, payload []byte) error
SendEvent generates the provided named event inside the cluster with the provided payload. IMP: Payload size is limited: inMemoryStore gossips via UDP, so the payload must fit within a single UDP packet.
type ClusterDiscoveryConfiguration ¶
type ClusterDiscoveryConfiguration struct { MembershipConfiguration MembershipConfiguration RaftConfiguration RaftConfiguration }
type ClusterInformer ¶
type ClusterInformer interface { MembersInfo() map[string]MemberInformation LeaderInfo() MemberInformation IsCurrentlyLeader() bool }
ClusterInformer is an interface that wraps the LeaderInfo() Method. MembersInfo returns all the current active and healthy members(nodes) of the cluster. LeaderInfo provides the information about the member(node) which is currently acting as leader inside the cluster. IsCurrentlyLeader reports whether the given member(node) is in leader state inside the cluster.
type EventNotifier ¶
type EventNotifier interface { ClusterDiscover OnEvent(eventName string, payload []byte) }
EventNotifier is an interface that groups ClusterDiscover Interface and OnEvent Method. EventNotifier is used by the default ClusterDiscoverService implementation to send notification about cluster change.
type LogLevel ¶
type LogLevel int
LogLevel defines log level for clustering.
const ( LogLevelDebug LogLevel LoglevelInfo LogLevelWarn LogLevelError )
type MemberEvent ¶
type MemberEvent uint
MemberEvent denotes the kind of event that has happened inside the cluster.
const ( // MemberEventJoin denotes the member(node) have Joined the membership cluster. MemberEventJoin MemberEvent = 1 // MemberEventLeave denotes the member(node) have Left the membership cluster. MemberEventLeave MemberEvent = 2 // MemberEventLeaderChange denotes there is change in the Leadership inside the cluster. MemberEventLeaderChange MemberEvent = 3 )
func (MemberEvent) String ¶
func (m MemberEvent) String() string
type MemberInformation ¶
MemberInformation stores information object for one (member) node in cluster.
func (MemberInformation) Clone ¶
func (mi MemberInformation) Clone() MemberInformation
Clone Deep clone's the MemberInfo Object.
type MembershipConfiguration ¶
type MembershipConfiguration struct { NodeName string // should be unique. Tags map[string]string AdvertiseAddr string AdvertisePort int SnapshotPath string MinLogLevel LogLevel }
MembershipConfiguration groups all the configuration object for current member(node) to initialize the Gossip protocol communication.
type RaftConfiguration ¶
type RaftConfiguration struct { // RaftVolumeDir is the path for raft cluster to store and load configuration // and log storage. RaftVolumeDir string `json:"raft_volume_dir,omitempty"` // RaftApplyTimeoutMs is the timeout duration for quorum inside raft cluster // default is 1 sec RaftApplyTimeoutMs int64 `json:"raft_apply_timeout_ms,omitempty"` // RaftSnapshotIntervalSec controls how often raft should perform a snapshot. // default is 20 sec RaftSnapshotIntervalSec int32 `json:"raft_snapshot_interval_sec,omitempty"` // SnapshotThreshold controls how many outstanding logs there must be before // we perform a snapshot. This is to prevent excessive snapshots when we can // just replay a small set of logs. SnapshotThreshold uint64 `json:"snapshot_threshold,omitempty"` // currently used in default 8192, MinLogLevel LogLevel }
RaftConfiguration groups all the configuration object for current member(node) related for raft protocol cluster initialization.
type RaftStreamLayer ¶
type RaftStreamLayer struct {
// contains filtered or unexported fields
}
RaftStreamLayer Provides implementation for Raft's Stream Layer interface
func NewRaftStreamLayer ¶
func NewRaftStreamLayer(ln net.Listener, advertiseAddr net.Addr, serverTLS, peerTLS *tls.Config) *RaftStreamLayer
NewRaftStreamLayer returns a new initialized Stream Layer for network transport.
func (*RaftStreamLayer) Addr ¶
func (s *RaftStreamLayer) Addr() net.Addr
func (*RaftStreamLayer) Close ¶
func (s *RaftStreamLayer) Close() error
func (*RaftStreamLayer) Dial ¶
func (s *RaftStreamLayer) Dial(address raft.ServerAddress, timeout time.Duration) (net.Conn, error)
Dial makes outgoing connection to other servers in the raft cluster.