cluster

package
v0.0.0-...-efd361b Latest Latest
Warning

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

Go to latest
Published: Dec 8, 2021 License: GPL-2.0 Imports: 18 Imported by: 0

Documentation

Index

Constants

View Source
const (
	DefaultPushPullInterval  = 60 * time.Second
	DefaultGossipInterval    = 200 * time.Millisecond
	DefaultTcpTimeout        = 10 * time.Second
	DefaultProbeTimeout      = 500 * time.Millisecond
	DefaultProbeInterval     = 1 * time.Second
	DefaultReconnectInterval = 10 * time.Second
	DefaultReconnectTimeout  = 6 * time.Hour
	DefaultRefreshInterval   = 15 * time.Second
	MaxGossipPacketSize      = 1400
)

Variables

This section is empty.

Functions

func OversizedMessage

func OversizedMessage(b []byte) bool

OversizedMessage indicates whether or not the byte payload should be sent via TCP.

Types

type Channel

type Channel struct {
	// contains filtered or unexported fields
}

Channel allows clients to send messages for a specific state type that will be broadcasted in a best-effort manner.

func NewChannel

func NewChannel(
	key string,
	send func([]byte),
	peers func() []*memberlist.Node,
	sendOversize func(*memberlist.Node, []byte) error,
	logger log.Logger,
	stopc chan struct{},
	reg prometheus.Registerer,
) *Channel

NewChannel creates a new Channel struct, which handles sending normal and oversize messages to peers.

func (*Channel) Broadcast

func (c *Channel) Broadcast(b []byte)

Broadcast enqueues a message for broadcasting.

type ClusterChannel

type ClusterChannel interface {
	Broadcast([]byte)
}

ClusterChannel supports state broadcasting across peers.

type ClusterMember

type ClusterMember interface {
	// Name returns the name of the node
	Name() string
	// Address returns the IP address of the node
	Address() string
}

ClusterMember interface that represents node peers in a cluster

type ClusterPeer

type ClusterPeer interface {
	// Name returns the unique identifier of this peer in the cluster.
	Name() string
	// Status returns a status string representing the peer state.
	Status() string
	// Peers returns the peer nodes in the cluster.
	Peers() []ClusterMember
}

ClusterPeer represents a single Peer in a gossip cluster.

type Member

type Member struct {
	// contains filtered or unexported fields
}

Member represents a member in the cluster.

func (Member) Address

func (m Member) Address() string

Address implements cluster.ClusterMember

func (Member) Name

func (m Member) Name() string

Name implements cluster.ClusterMember

type Peer

type Peer struct {
	// contains filtered or unexported fields
}

Peer is a single peer in a gossip cluster.

func Create

func Create(
	l log.Logger,
	reg prometheus.Registerer,
	bindAddr string,
	advertiseAddr string,
	knownPeers []string,
	waitIfEmpty bool,
	pushPullInterval time.Duration,
	gossipInterval time.Duration,
	tcpTimeout time.Duration,
	probeTimeout time.Duration,
	probeInterval time.Duration,
) (*Peer, error)

func (*Peer) AddState

func (p *Peer) AddState(key string, s State, reg prometheus.Registerer) ClusterChannel

AddState adds a new state that will be gossiped. It returns a channel to which broadcast messages for the state can be sent.

func (*Peer) ClusterSize

func (p *Peer) ClusterSize() int

ClusterSize returns the current number of alive members in the cluster.

func (*Peer) Info

func (p *Peer) Info() map[string]interface{}

Info returns a JSON-serializable dump of cluster state. Useful for debug.

func (*Peer) Join

func (p *Peer) Join(
	reconnectInterval time.Duration,
	reconnectTimeout time.Duration) error

func (*Peer) Leave

func (p *Peer) Leave(timeout time.Duration) error

Leave the cluster, waiting up to timeout.

func (*Peer) Name

func (p *Peer) Name() string

Name returns the unique ID of this peer in the cluster.

func (*Peer) Peers

func (p *Peer) Peers() []ClusterMember

Peers returns the peers in the cluster.

func (*Peer) Position

func (p *Peer) Position() int

Position returns the position of the peer in the cluster.

func (*Peer) Ready

func (p *Peer) Ready() bool

Return true when router has settled.

func (*Peer) Self

func (p *Peer) Self() *memberlist.Node

Self returns the node information about the peer itself.

func (*Peer) Settle

func (p *Peer) Settle(ctx context.Context, interval time.Duration)

Settle waits until the mesh is ready (and sets the appropriate internal state when it is). The idea is that we don't want to start "working" before we get a chance to know most of the alerts and/or silences. Inspired from https://github.com/apache/cassandra/blob/7a40abb6a5108688fb1b10c375bb751cbb782ea4/src/java/org/apache/cassandra/gms/Gossiper.java This is clearly not perfect or strictly correct but should prevent the alertmanager to send notification before it is obviously not ready. This is especially important for those that do not have persistent storage.

func (*Peer) Status

func (p *Peer) Status() string

Return a status string representing the peer state.

func (*Peer) WaitReady

func (p *Peer) WaitReady(ctx context.Context) error

Wait until Settle() has finished.

type PeerStatus

type PeerStatus int

PeerStatus is the state that a peer is in.

const (
	StatusNone PeerStatus = iota
	StatusAlive
	StatusFailed
)

func (PeerStatus) String

func (s PeerStatus) String() string

type State

type State interface {
	// MarshalBinary serializes the underlying state.
	MarshalBinary() ([]byte, error)

	// Merge merges serialized state into the underlying state.
	Merge(b []byte) error
}

State is a piece of state that can be serialized and merged with other serialized state.

Directories

Path Synopsis

Jump to

Keyboard shortcuts

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