Добавить ретраи и проверки устойчивости после нагрузочного прогона #22

Open
stepan wants to merge 3 commits from t2_grpc_retry into main
Owner

Ссылка на задачу: #2

Что сделано

  • RetryExecutor (Deal.SharedKernel.Resilience) — повтор операции при транзиентном сбое: экспоненциальная задержка, предикат транзиентности, отмена не заглатывается (при отменённом токене повтор не делается), пауза инъектируется для тестов.
  • GrpcRetry (Deal.Infrastructure.Integrations.Resilience) — 2 повтора, база 200 мс, джиттер 0.5–1.5×; транзиентными считаются Unavailable/DeadlineExceeded.
  • Применено к идемпотентным вызовам: ai-service (Filter, Classify, generate-keywords, evaluate-fit), ml-service (Predict, Status). Мутирующие вызовы (TrainBatch, Reset, telegram-операции) намеренно не повторяются, чтобы не задваивать побочные эффекты.
  • Тесты: RetryExecutor (успех/повтор/исчерпание/нетранзиент/отмена/экспоненциальный рост) и GrpcRetry (предикат, повтор, исчерпание); обновлены тесты, ранее ожидавшие один вызов.

Проверки

  • Сборка 5 решений: 0 предупреждений / 0 ошибок.
  • Тесты: core 1357, telegram 130, ai 52, ml 38, storage 9 — зелёные.

Не сделано (блокеры/риски)

  • Ретраи уровня БД (EF EnableRetryOnFailure) не включены: в репозиториях есть явные транзакции, которые под retry-стратегией требуют обёртки CreateExecutionStrategy().ExecuteAsync(...) — отдельная аккуратная правка.
  • Повторный нагрузочный прогон (критерий приёмки) зависит от задачи #6 «Прогнать нагрузочное тестирование» (нужен живой стек/владелец).
  • Ретраи telegram gRPC-клиента не добавлены: у него единый CallAsync, включающий неидемпотентные операции (send/join/leave) — нужен per-method флаг.
Ссылка на задачу: https://gitea.khomegeneric.keenetic.pro/rust/Deal/issues/2 ## Что сделано - `RetryExecutor` (`Deal.SharedKernel.Resilience`) — повтор операции при транзиентном сбое: экспоненциальная задержка, предикат транзиентности, отмена не заглатывается (при отменённом токене повтор не делается), пауза инъектируется для тестов. - `GrpcRetry` (`Deal.Infrastructure.Integrations.Resilience`) — 2 повтора, база 200 мс, джиттер 0.5–1.5×; транзиентными считаются `Unavailable`/`DeadlineExceeded`. - Применено к идемпотентным вызовам: ai-service (`Filter`, `Classify`, `generate-keywords`, `evaluate-fit`), ml-service (`Predict`, `Status`). Мутирующие вызовы (`TrainBatch`, `Reset`, telegram-операции) намеренно не повторяются, чтобы не задваивать побочные эффекты. - Тесты: `RetryExecutor` (успех/повтор/исчерпание/нетранзиент/отмена/экспоненциальный рост) и `GrpcRetry` (предикат, повтор, исчерпание); обновлены тесты, ранее ожидавшие один вызов. ## Проверки - Сборка 5 решений: 0 предупреждений / 0 ошибок. - Тесты: core 1357, telegram 130, ai 52, ml 38, storage 9 — зелёные. ## Не сделано (блокеры/риски) - Ретраи уровня БД (EF `EnableRetryOnFailure`) не включены: в репозиториях есть явные транзакции, которые под retry-стратегией требуют обёртки `CreateExecutionStrategy().ExecuteAsync(...)` — отдельная аккуратная правка. - Повторный нагрузочный прогон (критерий приёмки) зависит от задачи #6 «Прогнать нагрузочное тестирование» (нужен живой стек/владелец). - Ретраи telegram gRPC-клиента не добавлены: у него единый `CallAsync`, включающий неидемпотентные операции (send/join/leave) — нужен per-method флаг.
stepan added 2 commits 2026-09-13 14:43:13 +03:00
RetryExecutor (SharedKernel) с экспоненциальной задержкой и GrpcRetry (Infrastructure) для gRPC Unavailable/DeadlineExceeded; джиттер сглаживает синхронные ретраи воркеров. Покрыто тестами.
Filter/Classify, generate-keywords/evaluate-fit и Predict/Status оборачиваются в GrpcRetry; мутирующие вызовы (train/reset/telegram) не повторяются. Тесты учли повторы.
stepan requested review from rust 2026-09-13 14:43:14 +03:00
rust added 1 commit 2026-09-13 14:55:00 +03:00
Merge branch 'main' into t2_grpc_retry
ci / build-test (pull_request) Successful in 3m0s
63242775ee
All checks were successful
ci / build-test (pull_request) Successful in 3m0s
This pull request doesn't have enough required approvals yet. 0 of 1 approvals granted from users or teams on the allowlist.
This pull request has official review requests.
You are not authorized to merge this pull request.
This branch is out-of-date with the base branch
View command line instructions

Checkout

From your project repository, check out a new branch and test the changes.
git fetch -u origin t2_grpc_retry:t2_grpc_retry
git checkout t2_grpc_retry
Sign in to join this conversation.