Попытка и повторы#

Почему один вызов не повторяется бесконечно?

Каждая отправка имеет неизменяемый 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 --> [*]
    

Независимые бюджеты#

Бюджет

Кто расходует

Модуль

transport

Ошибка транспорта или повторяемый ответ

eazy_sdk.clients.attempts

auth

Обновление отклонённой авторизации

eazy_sdk.clients.attempts

redirect

Переход на новый адрес

eazy_sdk.clients.attempts

replays[policy]

Реакция конкретной защиты

eazy_sdk.clients.attempts

Каждая политика расходует только свой бюджет. Жёсткий предел фиксируется при начале вызова и добавляет бюджеты защит к max_attempts; расход одного бюджета не уменьшает остальные (AttemptBudgets.of).

Классификатор ответа выбирает один переход в установленном порядке: предложение middleware, повторяемый статус, сигнал защиты, обновление авторизации, перенаправление или терминальный исход (eazy_sdk.clients._decisions).

Повтор небезопасной операции запрещён для транспорта, middleware и обновления авторизации. Исполнитель возвращает UnsafeReplayError, если правило требует повторить неидемпотентную операцию (eazy_sdk.clients._decisions).

Дальше#