Documentation
¶
Overview ¶
Package manager содержит ядро управления кластером: менеджер (Manager), текущую реплику (Me) и удалённую (Peer). Отвечает за хранение состояния кластера, подписки на события и управление репликами.
Index ¶
- Constants
- Variables
- type Me
- func (m *Me) AddRole(role domain.Role)
- func (m *Me) AddRoles(roles set.Set[domain.Role])
- func (m *Me) GetAvailableRoles() set.Set[domain.Role]
- func (m *Me) GetHost() string
- func (m *Me) GetId() uuid.UUID
- func (m *Me) GetMeta() *domain.Meta
- func (m *Me) GetName() string
- func (m *Me) GetResource() *linker.Linker[resource.Type, *resource.Resource]
- func (m *Me) GetRoles() set.Set[domain.Role]
- func (m *Me) GetScore() float32
- func (m *Me) GetState() *domain.State
- func (m *Me) GetTimeStart() time.Time
- func (m *Me) GetUptime() time.Duration
- func (m *Me) IsMe() bool
- func (m *Me) OnChangeResource(_ context.Context, resource *resource.Resource)
- func (m *Me) OnChangeRole() emitter.Emitter[cluster.Replica]
- func (m *Me) OnChangeScore() emitter.Emitter[cluster.Me]
- func (m *Me) RemoveRole(role domain.Role)
- func (m *Me) RemoveRoles(roles set.Set[domain.Role])
- func (m *Me) SetScore(score float32)
- type Peer
- func (r *Peer) GetAvailableRoles() set.Set[domain.Role]
- func (r *Peer) GetGrpcConnection() (grpc.ClientConnInterface, error)
- func (r *Peer) GetHost() string
- func (r *Peer) GetId() uuid.UUID
- func (r *Peer) GetName() string
- func (r *Peer) GetResource() *linker.Linker[resource.Type, *resource.Resource]
- func (r *Peer) GetRoles() set.Set[domain.Role]
- func (r *Peer) GetScore() float32
- func (r *Peer) GetStatus() domain.Status
- func (r *Peer) GetUptime() time.Duration
- func (r *Peer) IsMe() bool
- func (r *Peer) OnChangeAvailableRoles() emitter.Emitter[cluster.Peer]
- func (r *Peer) OnChangeRole() emitter.Emitter[cluster.Replica]
- func (r *Peer) OnChangeStatus() emitter.Emitter[cluster.Peer]
- func (r *Peer) SetMeta(meta *domain.Meta)
- func (r *Peer) SetState(state *domain.State)
- func (r *Peer) SetStatus(status domain.Status)
Constants ¶
const (
ZeroUptime = time.Duration(0)
)
Variables ¶
var Component = compogo.Component{ Name: "cluster.manager", Dependencies: compogo.Components{ &runner.Component, &config.Component, }, Init: compogo.StepFunc(func(container compogo.Container) error { return container.Provides( NewMe, func(m *Me) cluster.Me { return m }, newManager, func(m *manager) cluster.Manager { return m }, ) }), Execute: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(func(manager *manager, m *Me) { m.onChangeRole.Subscribe(manager.replicaOnChangeRole) }) }), }
Component — компонент менеджера кластера для Compogo.
Жизненный цикл компонента:
- Init — регистрирует конструкторы Me и Manager в DI-контейнере.
- Execute — подписывает Manager на события изменения ролей Me.
Компонент является основой всего кластера — без него не работают ни Election, ни Reaper, ни Sync.
var ( // PeerAlreadyExistsError возникает при попытке добавить реплику, // которая уже существует в кластере (по Host). // // Это защита от дублирования реплик в кластере. PeerAlreadyExistsError = errors.New("already exists") )
Ошибки, возвращаемые менеджером кластера.
Functions ¶
This section is empty.
Types ¶
type Me ¶
type Me struct {
// contains filtered or unexported fields
}
Me — представление текущей (локальной) реплики.
Реализует интерфейс cluster.Me и хранит всё состояние текущего узла.
Ключевые особенности:
- Ресурсы обновляются через OnChangeResource (из пакета resource)
- Роли меняются через AddRole/RemoveRole (при выборах)
- Score меняется через SetScore (для динамического веса)
- Все изменения генерируют события (OnChangeRole, OnChangeScore)
func NewMe ¶
NewMe создаёт новый объект Me.
Инициализация:
- Устанавливает начальные роли: Slave (Master удаляется, если был в конфиге)
- Устанавливает Score из конфига
- Создаёт пустой linker для ресурсов
func (*Me) GetAvailableRoles ¶
GetAvailableRoles возвращает роли, которые реплика МОЖЕТ выполнять. Это статическая информация из конфигурации.
func (*Me) GetResource ¶
GetResource возвращает информацию об использовании ресурсов.
func (*Me) GetRoles ¶
GetRoles возвращает текущие роли реплики. Это динамическая информация, которая меняется при выборах.
func (*Me) GetTimeStart ¶
GetTimeStart возвращает время запуска реплики.
Используется для вычисления uptime (время работы).
func (*Me) OnChangeResource ¶
OnChangeResource — обработчик изменения ресурсов.
Вызывается из пакета resource при изменении использования CPU/Memory. Обновляет информацию о ресурсах текущей реплики.
func (*Me) OnChangeRole ¶
OnChangeRole возвращает emitter для событий изменения ролей.
func (*Me) OnChangeScore ¶
OnChangeScore возвращает emitter для событий изменения Score.
func (*Me) RemoveRoles ¶
RemoveRoles удаляет несколько ролей.
type Peer ¶
type Peer struct {
// contains filtered or unexported fields
}
Peer — представление удалённой реплики.
Реализует интерфейс cluster.Peer и хранит кэш состояния удалённой реплики.
Ключевые особенности:
- Статус соединения — может быть Disconnection, Connection, Ready.
- Метаданные (Meta) обновляются через SetMeta.
- Состояние (State) обновляется через SetState (при получении из gRPC).
- gRPC-соединение создаётся лениво при первом вызове GetGrpcConnection.
func NewPeer ¶
func NewPeer( host string, me cluster.Me, grpcConfig *grpcClient.Config, logger compogo.Logger, closer compogo.Closer, ) *Peer
NewPeer создаёт новый объект Peer для указанного хоста.
При создании:
- Устанавливается Host
- Статус = Disconnection
- Создаётся пустой linker для ресурсов
func (*Peer) GetGrpcConnection ¶
func (r *Peer) GetGrpcConnection() (grpc.ClientConnInterface, error)
GetGrpcConnection возвращает gRPC-соединение к реплике.
Соединение создаётся лениво (при первом вызове) и кэшируется. Это позволяет не открывать соединения для всех Peer'ов сразу.
Настройки соединения берутся из grpcConfig (keepalive, таймауты).
func (*Peer) GetResource ¶
func (*Peer) OnChangeAvailableRoles ¶
func (*Peer) SetMeta ¶
SetMeta обновляет метаданные реплики.
Вызывается при получении Meta через gRPC. Генерирует событие onChangeAvailableRoles, если изменились доступные роли.