sync

package
v1.0.0-rc1 Latest Latest
Warning

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

Go to latest
Published: Jun 23, 2026 License: MIT Imports: 16 Imported by: 0

Documentation

Overview

Package sync отвечает за синхронизацию списка активных хостов между репликами.

Это позволяет автоматически добавлять новые реплики в кластер без ручного конфигурирования.

Механизм работы:

  1. Каждая реплика периодически запрашивает у других реплик их списки хостов.
  2. Если обнаружен хост, которого нет в локальном списке, он добавляется.
  3. Это позволяет кластеру "узнавать" о новых узлах динамически.

Index

Constants

This section is empty.

Variables

View Source
var Component = compogo.Component{
	Name: "cluster.sync",
	Dependencies: compogo.Components{
		&sync.Component,
		&repeater.Component,
		&grpc.Component,
	},
	Init: compogo.StepFunc(func(container compogo.Container) error {
		return container.Provide(NewSync)
	}),
	PreExecute: compogo.StepFunc(func(container compogo.Container) error {
		return container.Invoke(func(m cluster.Manager, sync *Sync) {

			m.OnAddPeer().Subscribe(sync.onAddPeer)
			m.OnDeletingPeer().Subscribe(sync.onDeletingPeer)
		})
	}),
}

Component - компонент синхронизации хостов для Compogo.

Компонент подписывается на события добавления и удаления Peer'ов, автоматически запуская и останавливая процессы синхронизации.

Functions

This section is empty.

Types

type Process

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

Process — задача синхронизации хостов для конкретной реплики.

Каждый Peer имеет свой процесс синхронизации. Процесс запускается через Repeater (периодически) и выполняет:

  1. Проверку статуса Peer (должен быть Ready).
  2. Запрос списка хостов у Peer.
  3. Сравнение с локальным списком.
  4. Добавление новых хостов через Manager.AddPeer.

Важно: процесс не удаляет хосты. За удаление отвечает Reaper.

func NewProcess

func NewProcess(
	peer cluster.Peer,
	manager cluster.Manager,
	grpcConfig *grpcClient.Config,
	syncConfig *syncConfig.Config,
	logger compogo.Logger,
	closer compogo.Closer,
) *Process

NewProcess создаёт новый процесс синхронизации для указанного Peer.

func (*Process) Close

func (p *Process) Close() error

Close отменяет текущий запрос синхронизации.

Используется при остановке приложения или при удалении Peer. Это предотвращает "висящие" горутины, ожидающие ответа от мёртвой реплики.

func (*Process) Delay

func (p *Process) Delay() time.Duration

Delay возвращает интервал выполнения для Repeater.

func (*Process) Name

func (p *Process) Name() string

Name возвращает имя процесса для Runner.

func (*Process) Process

func (p *Process) Process(ctx context.Context) error

Process — основная логика синхронизации (вызывается через Repeater).

Алгоритм:

  1. Проверяем статус Peer (только Ready-реплики участвуют в синхронизации).
  2. Получаем gRPC-клиент к Peer.
  3. Запрашиваем у Peer его список хостов.
  4. Сравниваем с нашим списком хостов.
  5. Для каждого нового хоста создаём Peer и добавляем в Manager.

Примечание: если Peer не готов (не в статусе Ready), синхронизация пропускается. Это предотвращает запросы к репликам, которые ещё не инициализированы.

func (*Process) RunNumbers

func (p *Process) RunNumbers() uint64

RunNumbers возвращает количество выполненных запусков.

type Sync

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

Sync — менеджер синхронизации хостов.

Управляет процессами синхронизации для всех Peer'ов. При добавлении нового Peer создаёт для него процесс синхронизации. При удалении Peer — останавливает его процесс.

func NewSync

func NewSync(
	m cluster.Manager,
	syncConfig *syncConfig.Config,
	grpcConfig *grpc.Config,
	repeater repeater.Repeater,
	logger compogo.Logger,
	closer compogo.Closer,
) *Sync

NewSync создаёт новый менеджер синхронизации.

Jump to

Keyboard shortcuts

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