clustering

package
v0.0.0-...-85aef26 Latest Latest
Warning

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

Go to latest
Published: Feb 27, 2023 License: MIT Imports: 13 Imported by: 0

Documentation

Index

Constants

View Source
const RaftRPC = 1

Variables

This section is empty.

Functions

func GetAdvertiseAddr

func GetAdvertiseAddr(advAddr string) (net.Addr, error)

GetAdvertiseAddr returns and verify that we have a usable advertise address

Types

type ClusterBuilder

type ClusterBuilder interface {
	Join([]string) error
}

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 (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

func (m ClusterDiscovery) OnEvent(eventName string, payload []byte)

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
)

func (LogLevel) ToString

func (l LogLevel) ToString(level LogLevel) string

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

type MemberInformation struct {
	NodeName string
	Tags     map[string]string
}

MemberInformation stores information object for one (member) node in cluster.

func (MemberInformation) Clone

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) Accept

func (s *RaftStreamLayer) Accept() (net.Conn, error)

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.

type UserEvent

type UserEvent interface {
	SendEvent(name string, payload []byte) error
}

UserEvent is an interface that wraps the basic SendEvent and OnEvent Method. SendEvent is used for generating a custom user type event inside the cluster.

Jump to

Keyboard shortcuts

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