Documentation
¶
Overview ¶
Package shutdown — graceful-shutdown helper для cmd/<svc>/main.go.
Контракт: один Manager на процесс. Регистрируем cleanup-handlers; при SIGTERM/SIGINT (или ctx.Cancel) хэндлеры выполняются в LIFO-порядке (close-в-обратном-порядке-открытия). Каждый handler ограничен timeout'ом (WithHandlerTimeout, дефолт 10s): зависший cleanup не задерживает завершение процесса бесконечно — он бросается, фиксируется ErrHandlerTimeout, остальные продолжают выполняться.
Минимальная самодостаточная реализация (без внешних зависимостей).
Index ¶
Constants ¶
This section is empty.
Variables ¶
var ErrHandlerTimeout = errors.New("shutdown: handler timed out")
ErrHandlerTimeout фиксируется, когда cleanup-handler не уложился в handler-timeout. Возвращается из Wait/Close как первая ошибка, если других нет.
Functions ¶
This section is empty.
Types ¶
type Handler ¶
type Handler func() error
Handler — функция-cleanup. Должна быть идемпотентной и завершаться в пределах handler-timeout'а; иначе она бросается (ErrHandlerTimeout), shutdown продолжается.
type Manager ¶
type Manager struct {
// contains filtered or unexported fields
}
Manager собирает cleanup-handlers и выполняет их в LIFO при сигнале или Close().
func New ¶
New создает Manager и стартует goroutine-listener для SIGINT/SIGTERM.
Listener неблокирующий: первый сигнал инициирует shutdown (вызов Close()); последующие сигналы игнорируются (если процесс «завис», admin делает kill -9).
func (*Manager) Close ¶
Close — программный shutdown без сигнала. Идемпотентен (повторный вызов no-op).
func (*Manager) OnExit ¶
OnExit регистрирует один или несколько handlers. Они выполнятся в обратном порядке регистрации (LIFO) при shutdown.
Если shutdown уже инициирован, поздно зарегистрированный handler выполняется немедленно (best-effort, под тем же handler-timeout'ом) — чтобы ресурс, открытый уже на фазе завершения, не остался без cleanup'а (без silent loss). Можно вызывать многократно из любой goroutine.
type Option ¶
type Option func(*Manager)
Option настраивает Manager.
func WithHandlerTimeout ¶
WithHandlerTimeout задает верхнюю границу выполнения одного handler'а. d<=0 отключает ограничение (handler выполняется синхронно без timeout'а).
func WithLogger ¶
WithLogger задает logger для наблюдаемости shutdown'а. Используется для логирования ошибок best-effort cleanup'а на пути поздней регистрации (OnExit после начала shutdown'а), где ошибка не может быть возвращена вызвавшему и иначе была бы потеряна молча. nil → slog.Default().