Skip to content

Hot-Reloading Configuration #48

Description

@taitelee

Status (2026-08-20): being delivered via the settings-directory design — validation landed in PR #500; boot loading + key migration, then reload triggers, follow. JSON Schema follow-up in #506. See the status comment below for the full sequencing.

Problem

Changing a log level or a metric interval currently requires a full application restart, causing a small window of downtime and re-sharding in NATS.

Proposed Solution

Implement a watcher for the configuration file or handle the SIGHUP signal. When triggered, the application will re-parse the config and update internal components (like the LogLevel variable) in real-time without dropping active connections.

Alternatives Considered

Easy endpoint to change LogLevel using a pointer to point at the current log level and change it via that in the logger. This is only for log level though. Probably not the ideal way to approach this.

Additional Context

Any mockups, examples, or references that help explain the request.

Activity

  1. added theissue type on Apr 16, 2026
  2. changed the title [-][feature] Hot-Reloading Configuration[/-] [+]Hot-Reloading Configuration[/+] on Apr 16, 2026
  3. moved this from Backlog to Ready in WaveHouse Task Boardon Jul 9, 2026
  4. moved this from Ready to In progress in WaveHouse Task Boardon Jul 20, 2026
  5. self-assigned this
    on Jul 22, 2026
  6. taitelee commented on Aug 20, 2026

    @taitelee
    MemberAuthor

    Status update — this is now being delivered via the settings-directory design rather than re-parsing config.yaml:

    • PR feat(settings): add settings-directory validation and validate CLI #500 lands the first piece: hot-reloadable settings live in a directory of JSON documents (roles.json, policies.json, pipes.json, config.json), gated by wavehouse validate [dir] — the single validation pass every consumer of the directory runs. That PR is validation-only; no loading or reload wiring yet.
    • Next PR: boot loads the directory and adopts it (reload trigger → validate → snapshot swap), and the hot-reloadable keys migrate out of config.yaml into config.json, with an audit of every config key — which move, which stay boot-tier (per PR feat(settings): add settings-directory validation and validate CLI #500 review discussion).
    • Reload triggers (fsnotify watcher, SIGHUP, ops reload endpoint) layer on after the wiring. PR feat(config): hot-reload whitelisted fields via SIGHUP or admin endpoint #414 prototyped SIGHUP + an admin reload endpoint against the pre-pivot whitelist design and is being closed as superseded; its branch (hot-reload-config, f506b5f) keeps the reusable mechanisms — trigger serialization onto one code path and the atomic snapshot swap at the record boundary.
    • Validate settings files with published JSON Schemas #506 tracks the follow-on JSON Schema work: published schemas per settings file for editor-side feedback, and Go-side schema validation mapped onto the same findings.

    On the original examples here: whether log level and metric intervals move into the hot-reloadable config.json gets decided in the migration PR's audit — WH_LOG_LEVEL is env-only today.

  7. taitelee commented on Sep 10, 2026

    @taitelee
    MemberAuthor

    Delivered. The settings-directory design replaced the SIGHUP whitelist from #414: validation and wavehouse validate [dir] landed in #500, boot loading plus fsnotify/SIGHUP//v1/ops/reload triggers with swap-only-on-valid landed in #508, and the boot-config half (unbound WH_* env, unusable data_dir) landed in #569. JSON Schema follow-up stays in #506. Multi-tenant settings directories are tracked in #583.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

area/configConfig file, config knobs, hot-reloadenhancementNew feature or request

Projects

Milestone

No milestone

Relationships

None yet

Development

No branches or pull requests

Issue actions