discovery

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: 7 Imported by: 0

Documentation

Overview

Package discovery отвечает за начальное обнаружение узлов кластера. При старте реплика читает список хостов из конфига и пытается подключиться к ним.

Discovery выполняется один раз при запуске приложения (в фазе PostExecute). Он не отвечает за динамическое обнаружение новых узлов — это задача Sync.

Index

Constants

This section is empty.

Variables

View Source
var Component = compogo.Component{
	Name: "cluster.discovery",
	Dependencies: compogo.Components{
		&discoveryConfig.Component,
		&grpc.Component,
	},
	PostExecute: compogo.StepFunc(func(container compogo.Container) error {
		return container.Invoke(func(
			config *discoveryConfig.Config,
			grpcConfig *grpc.Config,
			replicaConfig *managerConfig.Replica,
			m cluster.Manager,
			logger compogo.Logger,
			closer compogo.Closer,
		) (err error) {

			if len(config.Hosts) == 0 || (len(config.Hosts) == 1 && config.Hosts[0] == m.Me().GetHost()) {
				m.Me().AddRole(domain.Master)
				return
			}

			for _, host := range config.Hosts {
				if host == replicaConfig.Host {
					continue
				}

				err = m.AddPeer(manager.NewPeer(host, m.Me(), &grpcConfig.GrpcConfig, logger.GetLogger("discovery"), closer))
				if err != nil {

					return err
				}
			}

			return nil
		})
	}),
}

Component — компонент Compogo для фазы обнаружения. Выполняется после инициализации всех зависимостей (PostExecute).

Логика работы:

  1. Если список хостов пуст → текущий узел становится мастером.
  2. Если в списке только текущий хост → текущий узел становится мастером.
  3. Иначе для каждого хоста из списка (кроме себя) создаётся Peer и добавляется в Manager.

После добавления Peer, Manager начинает синхронизацию состояния через gRPC-стримы.

Functions

This section is empty.

Types

This section is empty.

Jump to

Keyboard shortcuts

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