Documentation
¶
Index ¶
Constants ¶
const (
// HostsFieldName — имя флага для указания начального списка хостов кластера.
HostsFieldName = "cluster.discovery.hosts"
)
Variables ¶
var Component = compogo.Component{ Name: "cluster.discovery.config", Init: compogo.StepFunc(func(container compogo.Container) error { return container.Provide(NewConfig) }), BindFlags: compogo.BindFlags(func(flagSet flag.FlagSet, container compogo.Container) error { return container.Invoke(func(config *Config) { flagSet.StringSliceVar(&config.Hosts, HostsFieldName, nil, "") }) }), Configuration: compogo.StepFunc(func(container compogo.Container) error { return container.Invoke(Configuration) }), }
Component — компонент Compogo для инициализации конфигурации discovery.
Жизненный цикл компонента:
- Init — регистрирует конструктор NewConfig в DI-контейнере.
- BindFlags — привязывает флаг командной строки --cluster.discovery.hosts.
- Configuration — загружает конфигурацию из Configurator (и переопределяет флагами).
После этого конфигурация доступна для внедрения в другие компоненты через DI.
Functions ¶
This section is empty.
Types ¶
type Config ¶
type Config struct {
Hosts []string
}
Config содержит настройки для обнаружения узлов.
Механизм discovery работает следующим образом:
- Если список Hosts пуст — текущая реплика становится мастером (единственный узел).
- Если список содержит только текущий хост — аналогично, она становится мастером.
- Если список содержит другие хосты — реплика пытается подключиться к ним, обмениваясь метаданными и состоянием.
После успешного обнаружения, реплики синхронизируются через другие механизмы (election, sync, reaper), и список discovery больше не используется до перезапуска.
func Configuration ¶
func Configuration(config *Config, configurator compogo.Configurator) *Config
Configuration загружает конфигурацию из Configurator и устанавливает дефолтные значения.
Важно: если Hosts не задан через флаг, он пытается получить его из Configurator. Это позволяет гибко настраивать кластер через файлы конфигурации, переменные окружения или флаги командной строки.