cluster

package
v0.7.2 Latest Latest
Warning

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

Go to latest
Published: Dec 10, 2025 License: Apache-2.0 Imports: 9 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]any

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]any

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]any

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