miroir/crates
jedarden baa484b61e feat(tenant): integrate tenant affinity into proxy request flow (P5.15 §13.15)
Integrates the existing tenant affinity module into the proxy request
handling to enable noisy-neighbor isolation for multi-tenant deployments.

Changes:
- Add TenantAffinityManager to AppState with initialization
- Resolve tenant identity from X-Miroir-Tenant header in search handler
- Use pinned group for scatter planning when tenant affinity is active
- Session pin takes precedence over tenant affinity (plan §13.15 interaction)
- Add miroir_tenant_session_pin_override_total metric
- Fix tenant affinity tests to be robust against hash value variations

Tenant affinity modes:
- header: read tenant ID from X-Miroir-Tenant header
- api_key: derive tenant from API key via tenant_map table
- explicit: static map only, unknown tenants use fallback policy

Writes always fan out to all groups (consistency invariant).
Only reads honor tenant affinity for isolation.

Metrics: miroir_tenant_queries_total, miroir_tenant_pinned_groups,
miroir_tenant_fallback_total, miroir_tenant_session_pin_override_total

Closes: miroir-uhj.15

Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
2026-05-24 15:21:36 -04:00
..
miroir-core feat(tenant): integrate tenant affinity into proxy request flow (P5.15 §13.15) 2026-05-24 15:21:36 -04:00
miroir-ctl docs(miroir-ctl): add subcommand runbooks and help text (P11.4, miroir-uyx.4) 2026-05-24 11:47:36 -04:00
miroir-proxy feat(tenant): integrate tenant affinity into proxy request flow (P5.15 §13.15) 2026-05-24 15:21:36 -04:00