✨ feat(server): wire sampler hot-reload callback (ADR-0023 Phase 3, sub-phase 3.3)
Closes ADR-0023 hot-reload Phase 3 (telemetry sampler). Last sub-phase of the 3-PR sequence: 3.1 = ReconfigureTracerProvider in pkg/telemetry (PR #45), 3.2 = sampler callback plumbing in pkg/config (in main via PR #47 race-merge — see Q-038 in mistral-quirks.md), 3.3 = wire it in pkg/server.Run (this PR). Implementation: - Capture telemetrySetup pointer (was a local) so it outlives initial setup and the sampler callback can mutate it. - After WatchAndApply registration, register a callback that: 1. Mutates SamplerType/SamplerRatio on the captured Setup 2. Calls ReconfigureTracerProvider (which builds the new TP, swaps the global, drains the old) 3. Updates s.tracerProvider so graceful shutdown still drains the correct provider. - Callback only registered if telemetrySetup != nil (telemetry was successfully initialized at startup; hot-reloading telemetry-on is out of scope per ADR-0023). ADR-0023 status updated: Phase 1+2+3 Implemented. api.v2_enabled remains explicitly deferred (router refactor needed; separate ADR). Race detector clean on touched packages. Full BDD suite green.
This commit is contained in:
@@ -1,6 +1,6 @@
|
||||
# Config Hot Reloading Strategy
|
||||
|
||||
**Status:** Phase 1+2 Implemented (2026-05-05 — `logging.level` and `auth.jwt.ttl` hot-reloadable via `Config.WatchAndApply` in `pkg/config/config.go`, wired in `pkg/server/server.go Run`. Phase 2 also fixed a pre-existing bug where the hardcoded 24h TTL ignored `auth.jwt.ttl` from config entirely.) Phase 3 sub-phase 3.1 Implemented (2026-05-05 — `ReconfigureTracerProvider` in `pkg/telemetry/telemetry.go` added). Phase 3 sub-phase 3.2 In Flight (2026-05-05 — `telemetry.sampler.type` + `telemetry.sampler.ratio` hot-reload via `SetSamplerReconfigureCallback` in `pkg/config/config.go`. Remaining field: `api.v2_enabled`.)
|
||||
**Status:** Phase 1+2+3 Implemented (2026-05-05). Hot-reloadable fields: `logging.level`, `auth.jwt.ttl`, `telemetry.sampler.type`, `telemetry.sampler.ratio`. Plumbing: `Config.WatchAndApply` in `pkg/config/config.go`, `ReconfigureTracerProvider` in `pkg/telemetry/telemetry.go`, sampler reconfigure callback wired in `pkg/server/server.go Run`. Phase 2 also fixed a pre-existing bug where the hardcoded 24h TTL ignored `auth.jwt.ttl` from config. Remaining field `api.v2_enabled` is **deferred**: hot-reloading routing requires either an always-register-with-middleware-gate refactor of the chi router or an atomic router swap — different complexity class, separate ADR if reopened.
|
||||
**Authors:** Gabriel Radureau, AI Agent
|
||||
**Date:** 2026-04-05
|
||||
**Last Updated:** 2026-05-05
|
||||
|
||||
Reference in New Issue
Block a user