Task 47 — Retry, timeout, circuit breaker
Phase: 4
Initiative: 19
Status: done
Owner: —
Slug: retry-timeout-breaker
Goal
Peer-вызовы защищены deadline-aware retries, exponential backoff с jitter, per-peer circuit breaker’ами и bulkheads. Non-idempotent операции не ретраятся вслепую и требуют idempotency keys.
Acceptance criteria
ResilienceConfigsection inMeshConfig- Jitter in
RetryPolicy.GetDelay()+MaxDelayenforcement ResilientTransportwrapper: CB check → retry loop with jitter → bulkheadCircuitBreakerconfigured fromResilienceConfig.FailureThresholdRetryPolicyconfigured fromResilienceConfig- DI registration in
MeshServiceExtensions CircuitBreakerintegrated intoFanOutOrchestrator(peer filtering)appsettings.jsonupdated withResiliencesection- Unit tests for
CircuitBreaker,RetryPolicy,ResilientTransport dotnet build+dotnet testpass
Sub-tasks
- Add
ResilienceConfigtoMeshConfiginAppConfig.cs - Add jitter to
RetryPolicy.GetDelay()(deterministic + random) - Configure
CircuitBreakerfromResilienceConfigin DI - Configure
RetryPolicyfromResilienceConfigin DI - Create
ResilientTransportwrapper (src/agent/Mesh/Resilience/ResilientTransport.cs) - Implement bulkhead pattern via per-peer semaphore in
ResilientTransport - Integrate
CircuitBreakerintoFanOutOrchestratorpeer filtering - Add
Resiliencesection toappsettings.json - Write unit tests in
tests/Hercules.Agent.Tests/Mesh/Resilience/ dotnet build src/agent/Hercules.csproj— succeeddotnet test --filter "FullyQualifiedName~Resilience"— pass
Scope / Likely files
src/agent/Mesh/Resilience/
Dependencies
- блокирует / опирается на: task_037 — transports
- блокирует / опирается на: task_040 — trust-admission
Risks / Rollback
Retry storm; per-peer rate limit + наблюдаемое состояние breaker’ов.
Validation
dotnet build src/agent/Hercules.csproj → 0 errors
dotnet build tests/Hercules.Agent.Tests/Hercules.Agent.Tests.csproj → 0 errors
dotnet test --filter "FullyQualifiedName~Resilience" --no-build → 18/18 pass
dotnet test tests/Hercules.Agent.Tests/Hercules.Agent.Tests.csproj → 1307/1316 pass
(9 pre-existing failures:
OtelServiceTests ×5, NumericValidatorTests ×2,
BudgetGuardTests ×1, WasmToolTests ×1)
Links
- Backlog: ../backlog.md
- Roadmap (EN): ../../ROADMAP-EN.md
- Roadmap (RU): ../../ROADMAP-RU.md