Попытка и повторы#
Почему один вызов не повторяется бесконечно?
Каждая отправка имеет неизменяемый AttemptState: номер, причину, адрес, эффективный метод и
остатки бюджетов. Политика читает состояние и исход, затем возвращает Continue, Stop или
Fail без сетевых эффектов
(eazy_sdk.clients.attempts).
stateDiagram-v2
[*] --> Attempt: initial
Attempt --> Attempt: transport retry
Attempt --> Attempt: response retry
Attempt --> Attempt: redirect
Attempt --> Attempt: auth refresh
Attempt --> Attempt: protection reaction
Attempt --> Success: terminal response
Attempt --> Failure: rejected or exhausted
Success --> [*]
Failure --> [*]
Независимые бюджеты#
Бюджет |
Кто расходует |
Модуль |
|---|---|---|
|
Ошибка транспорта или повторяемый ответ |
|
|
Обновление отклонённой авторизации |
|
|
Переход на новый адрес |
|
|
Реакция конкретной защиты |
Каждая политика расходует только свой бюджет. Жёсткий предел фиксируется при начале вызова и
добавляет бюджеты защит к max_attempts; расход одного бюджета не уменьшает остальные
(AttemptBudgets.of).
Классификатор ответа выбирает один переход в установленном порядке: предложение middleware,
повторяемый статус, сигнал защиты, обновление авторизации, перенаправление или терминальный исход
(eazy_sdk.clients._decisions).
Повтор небезопасной операции запрещён для транспорта, middleware и обновления авторизации.
Исполнитель возвращает UnsafeReplayError, если правило требует повторить неидемпотентную операцию
(eazy_sdk.clients._decisions).