Documentation
¶
Overview ¶
Package retry — конвенциональные обертки для повторов gRPC-вызовов с экспоненциальным backoff. Поверх `pkg/backoff`.
Использование в cross-service-клиентах:
var resp *pb.Resp
err := retry.OnUnavailable(ctx, func(ctx context.Context) error {
var err error
resp, err = client.Foo(ctx, req)
return err
})
retry-y:
- OnUnavailable — только при codes.Unavailable (peer downlink, network glitch)
- OnAborted — при codes.Aborted (OCC retry)
- OnCodes(codes...) — пользовательский набор кодов
Index ¶
Constants ¶
This section is empty.
Variables ¶
var Defaults = struct { InitialInterval time.Duration Multiplier float64 MaxInterval time.Duration MaxElapsed time.Duration RandomizationFactor float64 }{ InitialInterval: 100 * time.Millisecond, Multiplier: 2.0, MaxInterval: 5 * time.Second, MaxElapsed: 30 * time.Second, RandomizationFactor: 0.2, }
Defaults — стандартные параметры экспоненциального backoff для cross-service gRPC-вызовов в Kachō.
- InitialInterval: 100ms
- Multiplier: 2.0
- MaxInterval: 5s
- MaxElapsed: 30s (после этого retry прекращается, ошибка возвращается)
Этого достаточно для типичных перезапусков peer-Pod-а (rolling-restart 5-15s).
Functions ¶
func OnCodes ¶
func OnCodes(ctx context.Context, fn func(ctx context.Context) error, retryCodes ...codes.Code) error
OnCodes — retry если grpc-status попадает в один из перечисленных кодов. Любой другой error (включая ctx-cancel) — fail-fast.
РЕПЛИКИ: запрос — петля принадлежит ОДНОМУ вызову соседа: это его повтор с отсрочкой, завершающийся по исходу. Общего состояния не трогает.
func OnUnavailable ¶
OnUnavailable вызывает fn с retry на codes.Unavailable. Ctx-cancel прерывает retry-цикл немедленно.
ВНИМАНИЕ (идемпотентность): применять ТОЛЬКО к идемпотентным вызовам — read'ам либо мутациям с ключом идемпотентности. codes.Unavailable может прийти ПОСЛЕ того, как peer уже применил мутацию (обрыв на ответе), поэтому слепой retry не-идемпотентной мутации (Create/Allocate без idempotency-key) рискует задвоить эффект. Для не-идемпотентных мутаций используйте отдельный idempotency-механизм.
Types ¶
This section is empty.