cluster

package
v0.0.10 Latest Latest
Warning

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

Go to latest
Published: Oct 28, 2025 License: MIT Imports: 7 Imported by: 0

Documentation

Index

Constants

This section is empty.

Variables

This section is empty.

Functions

This section is empty.

Types

type BalanceAnalysis

type BalanceAnalysis struct {
	TotalNodes  int
	Balanced    bool
	Imbalance   float64
	Suggestions []string
}

BalanceAnalysis contains balance analysis results

type ClusterSizeRecommendation

type ClusterSizeRecommendation struct {
	ClusterSize    int
	QuorumSize     int
	FaultTolerance int
	Notes          string
}

ClusterSizeRecommendation contains cluster size recommendations

type Manager

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

Manager implements cluster management

func NewManager

func NewManager(config ManagerConfig, logger forge.Logger) *Manager

NewManager creates a new cluster manager

func (*Manager) AddNode

func (m *Manager) AddNode(nodeID, address string, port int) error

AddNode adds a node to the cluster

func (*Manager) GetClusterInfo

func (m *Manager) GetClusterInfo() *internal.ClusterInfo

GetClusterInfo returns cluster information

func (*Manager) GetClusterSize

func (m *Manager) GetClusterSize() int

GetClusterSize returns the size of the cluster

func (*Manager) GetHealthyNodes

func (m *Manager) GetHealthyNodes() int

GetHealthyNodes returns the number of healthy nodes

func (*Manager) GetLeader

func (m *Manager) GetLeader() *internal.NodeInfo

GetLeader returns the current leader node

func (*Manager) GetNode

func (m *Manager) GetNode(nodeID string) (*internal.NodeInfo, error)

GetNode returns information about a specific node

func (*Manager) GetNodeStats

func (m *Manager) GetNodeStats() map[string]interface{}

GetNodeStats returns statistics about the nodes

func (*Manager) GetNodes

func (m *Manager) GetNodes() []internal.NodeInfo

GetNodes returns all nodes in the cluster

func (*Manager) HasQuorum

func (m *Manager) HasQuorum() bool

HasQuorum returns true if the cluster has quorum

func (*Manager) RecordHeartbeat

func (m *Manager) RecordHeartbeat(nodeID string) error

RecordHeartbeat records a heartbeat from a node

func (*Manager) RemoveNode

func (m *Manager) RemoveNode(nodeID string) error

RemoveNode removes a node from the cluster

func (*Manager) Start

func (m *Manager) Start(ctx context.Context) error

Start starts the cluster manager

func (*Manager) Stop

func (m *Manager) Stop(ctx context.Context) error

Stop stops the cluster manager

func (*Manager) UpdateNode

func (m *Manager) UpdateNode(nodeID string, info internal.NodeInfo) error

UpdateNode updates node information

func (*Manager) UpdateNodeRole

func (m *Manager) UpdateNodeRole(nodeID string, role internal.NodeRole) error

UpdateNodeRole updates a node's role

func (*Manager) UpdateNodeStatus

func (m *Manager) UpdateNodeStatus(nodeID string, status internal.NodeStatus) error

UpdateNodeStatus updates a node's status

type ManagerConfig

type ManagerConfig struct {
	NodeID              string
	HealthCheckInterval time.Duration
	HealthTimeout       time.Duration
}

ManagerConfig contains cluster manager configuration

type MembershipChange

type MembershipChange struct {
	ID        string
	Type      MembershipChangeType
	NodeInfo  internal.NodeInfo
	Initiated time.Time
	Status    MembershipChangeStatus
}

MembershipChange represents a pending membership change

type MembershipChangeStatus

type MembershipChangeStatus int

MembershipChangeStatus represents the status of a membership change

const (
	// MembershipChangeStatusPending is waiting to be applied
	MembershipChangeStatusPending MembershipChangeStatus = iota
	// MembershipChangeStatusInProgress is currently being applied
	MembershipChangeStatusInProgress
	// MembershipChangeStatusCommitted has been committed
	MembershipChangeStatusCommitted
	// MembershipChangeStatusFailed has failed
	MembershipChangeStatusFailed
)

func (MembershipChangeStatus) String

func (s MembershipChangeStatus) String() string

String returns string representation of change status

type MembershipChangeType

type MembershipChangeType int

MembershipChangeType represents the type of membership change

const (
	// MembershipChangeAdd adds a node to the cluster
	MembershipChangeAdd MembershipChangeType = iota
	// MembershipChangeRemove removes a node from the cluster
	MembershipChangeRemove
	// MembershipChangeUpdate updates node information
	MembershipChangeUpdate
)

func (MembershipChangeType) String

func (t MembershipChangeType) String() string

String returns string representation of change type

type MembershipManager

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

MembershipManager manages cluster membership changes

func NewMembershipManager

func NewMembershipManager(manager *Manager, logger forge.Logger) *MembershipManager

NewMembershipManager creates a new membership manager

func (*MembershipManager) AddNode

func (mm *MembershipManager) AddNode(ctx context.Context, nodeInfo internal.NodeInfo) error

AddNode proposes adding a node to the cluster

func (*MembershipManager) CanSafelyRemoveNode

func (mm *MembershipManager) CanSafelyRemoveNode(nodeID string) (bool, string)

CanSafelyRemoveNode checks if a node can be safely removed

func (*MembershipManager) CleanupOldChanges

func (mm *MembershipManager) CleanupOldChanges(maxAge time.Duration)

CleanupOldChanges removes old completed/failed changes

func (*MembershipManager) GetPendingChanges

func (mm *MembershipManager) GetPendingChanges() []MembershipChange

GetPendingChanges returns all pending membership changes

func (*MembershipManager) RemoveNode

func (mm *MembershipManager) RemoveNode(ctx context.Context, nodeID string) error

RemoveNode proposes removing a node from the cluster

func (*MembershipManager) UpdateNode

func (mm *MembershipManager) UpdateNode(ctx context.Context, nodeInfo internal.NodeInfo) error

UpdateNode proposes updating node information

func (*MembershipManager) ValidateClusterSize

func (mm *MembershipManager) ValidateClusterSize(proposedSize int) error

ValidateClusterSize validates that cluster size is within bounds

type NodeLocation

type NodeLocation struct {
	NodeID string
	Region string
	Zone   string
	Rack   string
}

NodeLocation represents a node's physical/logical location

type NodeMatchIndex

type NodeMatchIndex struct {
	NodeID     string
	MatchIndex uint64
}

NodeMatchIndex represents a node's match index

type NodeState

type NodeState struct {
	Info          internal.NodeInfo
	LastHeartbeat time.Time
	LastContact   time.Time
	FailureCount  int
	Healthy       bool
	// contains filtered or unexported fields
}

NodeState represents the state of a node in the cluster

type QuorumInfo

type QuorumInfo struct {
	TotalNodes    int
	HealthyNodes  int
	QuorumSize    int
	HasQuorum     bool
	MajorityIndex int
}

QuorumInfo contains quorum information

type QuorumManager

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

QuorumManager manages quorum calculations and checks

func NewQuorumManager

func NewQuorumManager(manager *Manager, logger forge.Logger) *QuorumManager

NewQuorumManager creates a new quorum manager

func (*QuorumManager) CalculateQuorumSize

func (qm *QuorumManager) CalculateQuorumSize(clusterSize int) int

CalculateQuorumSize calculates the quorum size for a given cluster size

func (*QuorumManager) CalculateReplicationFactor

func (qm *QuorumManager) CalculateReplicationFactor() int

CalculateReplicationFactor returns effective replication factor

func (*QuorumManager) CheckIndexCommitted

func (qm *QuorumManager) CheckIndexCommitted(replicatedIndexes map[string]uint64) (uint64, bool)

CheckIndexCommitted checks if a log index has been replicated to quorum

func (*QuorumManager) GetFaultTolerance

func (qm *QuorumManager) GetFaultTolerance() int

GetFaultTolerance returns the number of nodes that can fail

func (*QuorumManager) GetMinimumNodesForQuorum

func (qm *QuorumManager) GetMinimumNodesForQuorum(totalNodes int) int

GetMinimumNodesForQuorum returns minimum nodes needed for quorum

func (*QuorumManager) GetNodesByMatchIndex

func (qm *QuorumManager) GetNodesByMatchIndex(matchIndexes map[string]uint64) []NodeMatchIndex

GetNodesByMatchIndex returns nodes sorted by their match index

func (*QuorumManager) GetQuorumInfo

func (qm *QuorumManager) GetQuorumInfo() QuorumInfo

GetQuorumInfo returns detailed quorum information

func (*QuorumManager) GetQuorumMargin

func (qm *QuorumManager) GetQuorumMargin() int

GetQuorumMargin returns how many nodes above quorum we have

func (*QuorumManager) GetQuorumStatus

func (qm *QuorumManager) GetQuorumStatus() map[string]interface{}

GetQuorumStatus returns a detailed status of quorum health

func (*QuorumManager) HasQuorum

func (qm *QuorumManager) HasQuorum() bool

HasQuorum checks if the cluster currently has quorum

func (*QuorumManager) IsQuorumHealthy

func (qm *QuorumManager) IsQuorumHealthy() bool

IsQuorumHealthy checks if quorum is healthy (more than minimum)

func (*QuorumManager) RecommendClusterSize

func (qm *QuorumManager) RecommendClusterSize() map[int]ClusterSizeRecommendation

RecommendClusterSize recommends optimal cluster sizes

func (*QuorumManager) ValidateClusterResilience

func (qm *QuorumManager) ValidateClusterResilience() []string

ValidateClusterResilience validates overall cluster resilience

func (*QuorumManager) ValidateQuorumForRemoval

func (qm *QuorumManager) ValidateQuorumForRemoval(nodeIDs []string) (bool, string)

ValidateQuorumForRemoval checks if removing nodes would maintain quorum

func (*QuorumManager) WouldHaveQuorum

func (qm *QuorumManager) WouldHaveQuorum(healthyNodesAfterChange int, totalNodesAfterChange int) bool

WouldHaveQuorum checks if quorum would exist after a change

type RackInfo

type RackInfo struct {
	Name      string
	Zone      string
	NodeCount int
	Nodes     []string
	Healthy   int
	Unhealthy int
}

RackInfo contains information about a rack

type RebalanceAction

type RebalanceAction struct {
	Type        RebalanceActionType
	SourceNode  string
	TargetNode  string
	Description string
	Applied     bool
	Error       error
}

RebalanceAction represents a single rebalance action

type RebalanceActionType

type RebalanceActionType int

RebalanceActionType represents the type of rebalance action

const (
	// RebalanceActionMoveLeader moves leadership
	RebalanceActionMoveLeader RebalanceActionType = iota
	// RebalanceActionAddReplica adds a replica
	RebalanceActionAddReplica
	// RebalanceActionRemoveReplica removes a replica
	RebalanceActionRemoveReplica
	// RebalanceActionTransferSnapshot transfers a snapshot
	RebalanceActionTransferSnapshot
)

func (RebalanceActionType) String

func (t RebalanceActionType) String() string

String returns string representation of action type

type RebalanceConfig

type RebalanceConfig struct {
	Enabled       bool
	AutoRebalance bool
	Threshold     float64 // Imbalance threshold (0.0 - 1.0)
	CheckInterval time.Duration
}

RebalanceConfig contains rebalance configuration

type RebalanceManager

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

RebalanceManager manages cluster rebalancing operations

func NewRebalanceManager

func NewRebalanceManager(
	manager *Manager,
	topology *TopologyManager,
	quorum *QuorumManager,
	config RebalanceConfig,
	logger forge.Logger,
) *RebalanceManager

NewRebalanceManager creates a new rebalance manager

func (*RebalanceManager) AnalyzeBalance

func (rm *RebalanceManager) AnalyzeBalance() BalanceAnalysis

AnalyzeBalance analyzes cluster balance

func (*RebalanceManager) Disable

func (rm *RebalanceManager) Disable()

Disable disables rebalancing

func (*RebalanceManager) Enable

func (rm *RebalanceManager) Enable()

Enable enables rebalancing

func (*RebalanceManager) IsEnabled

func (rm *RebalanceManager) IsEnabled() bool

IsEnabled returns whether rebalancing is enabled

func (*RebalanceManager) Rebalance

func (rm *RebalanceManager) Rebalance(ctx context.Context) (*RebalanceResult, error)

Rebalance performs a rebalance operation

func (*RebalanceManager) Start

func (rm *RebalanceManager) Start(ctx context.Context) error

Start starts the rebalance manager

type RebalanceResult

type RebalanceResult struct {
	StartTime    time.Time
	EndTime      time.Time
	Duration     time.Duration
	ActionsToken int
	Success      bool
	Error        error
	Actions      []RebalanceAction
}

RebalanceResult contains the result of a rebalance operation

type RegionInfo

type RegionInfo struct {
	Name      string
	NodeCount int
	ZoneCount int
	Nodes     []string
	Healthy   int
	Unhealthy int
}

RegionInfo contains information about a region

type TopologyManager

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

TopologyManager manages cluster topology and node relationships

func NewTopologyManager

func NewTopologyManager(manager *Manager, logger forge.Logger) *TopologyManager

NewTopologyManager creates a new topology manager

func (*TopologyManager) GetNodesInRack

func (tm *TopologyManager) GetNodesInRack(rack string) []string

GetNodesInRack returns all nodes in a rack

func (*TopologyManager) GetNodesInRegion

func (tm *TopologyManager) GetNodesInRegion(region string) []string

GetNodesInRegion returns all nodes in a region

func (*TopologyManager) GetNodesInZone

func (tm *TopologyManager) GetNodesInZone(zone string) []string

GetNodesInZone returns all nodes in a zone

func (*TopologyManager) GetTopologyDistribution

func (tm *TopologyManager) GetTopologyDistribution() map[string]interface{}

GetTopologyDistribution returns distribution statistics

func (*TopologyManager) GetTopologyView

func (tm *TopologyManager) GetTopologyView() TopologyView

GetTopologyView returns a complete view of the cluster topology

func (*TopologyManager) IsTopologyAware

func (tm *TopologyManager) IsTopologyAware() bool

IsTopologyAware returns true if topology information is being tracked

func (*TopologyManager) RegisterNodeLocation

func (tm *TopologyManager) RegisterNodeLocation(location NodeLocation) error

RegisterNodeLocation registers a node's location

func (*TopologyManager) UnregisterNode

func (tm *TopologyManager) UnregisterNode(nodeID string)

UnregisterNode removes a node from topology

func (*TopologyManager) ValidateTopology

func (tm *TopologyManager) ValidateTopology() []string

ValidateTopology validates cluster topology for fault tolerance

type TopologyView

type TopologyView struct {
	TotalNodes  int
	RegionCount int
	ZoneCount   int
	RackCount   int
	Regions     map[string]RegionInfo
	Zones       map[string]ZoneInfo
	Racks       map[string]RackInfo
}

TopologyView represents a view of the cluster topology

type ZoneInfo

type ZoneInfo struct {
	Name      string
	Region    string
	NodeCount int
	RackCount int
	Nodes     []string
	Healthy   int
	Unhealthy int
}

ZoneInfo contains information about a zone

Jump to

Keyboard shortcuts

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