• v0.0.8 b6cea3f539

    v0.0.8
    Gates / frontend (push) Successful in 1m34s
    Gates / test (push) Successful in 1m53s
    Gates / test-aarch64 (push) Successful in 6m34s
    Gates / package (push) Successful in 43s
    Gates / test-aarch64 (push) Successful in 7m23s
    Gates / package (push) Successful in 4m11s
    Gates / container (push) Successful in 18s
    CI / gates (push) Successful in 27m37s
    Release / guard (push) Successful in 18s
    Gates / frontend (push) Successful in 1m9s
    Gates / test (push) Successful in 1m36s
    Gates / container (push) Successful in 10s
    Release / gates (push) Successful in 9m6s
    Release / publish (push) Successful in 4m33s
    Stable

    mokhtar released this 2026-08-21 17:25:32 +00:00 | 40 commits to master since this release

    One constant, chosen from the 0.0.7 field numbers: the checkpoint cadence was the last first-order write cost on the Pi's SD card.

    Changed

    • The query log checkpoints its write-ahead log every 32 MiB instead of every 4 MiB. Batching the writer in 0.0.7 took the deployed Pi from about 0.5 to 0.281 GiB of writes a day, and about 130 MiB of what is left is checkpoint writeback: SQLite's 1000-page default trips roughly every 40 minutes and rewrites the same hot index and interior pages into querylog.db each time. Every read-write connection to querylog.db now sets wal_autocheckpoint to 8192 pages, which stretches that to roughly five hours and cuts those in-place rewrites about eightfold, for an expected total near 190 MiB a day. The price is durability under power loss or a kernel panic. At synchronous = NORMAL a commit does not fsync, so the checkpoint is the only guaranteed durability boundary, and it now sits about five hours of query rows and upstream-history minutes back rather than 40 minutes. Kernel writeback normally makes the real loss far smaller than that, but nothing guarantees it. A process crash or a clean stop still loses nothing that was committed, and the database is never left inconsistent: recovery replays the longest valid prefix of the log. The querylog.db-wal file is expected to sit near 32 MiB rather than capped there, since a long-running reader can hold a checkpoint off and let it overshoot, and the daily retention pass still truncates it. config.db is unchanged.

    Artifacts

    aaf2b72be2fdbeb2052e0f9dbc23c52aa2b6dea538dc720f001c69cbe6569c75  nxdns-0.0.8-x86_64-linux-musl.tar.gz
    0670430fad5b07d45e1d4248deba03ac72420cdcbb1b3c7c25d160c3dbb22f65  nxdns-0.0.8-aarch64-linux-musl.tar.gz
    687feb04186aba42ff3ce8d0b8921b37e9ec875c080840dde79a49dc7d69cda6  IMAGE-DIGEST.txt
    
    git.mial.net/mokhtar/nxdns:0.0.8@sha256:f5ec2a8cdae6225d8207e98e305a20a1fb8cba7ab007f6b3113a80ee754e25df
    

    Compare v0.0.7...v0.0.8

    Commits since v0.0.7
    b6cea3f build: bump version to 0.0.8
    9b0b7c1 querylog: checkpoint every 8192 wal pages instead of 1000
    
    Downloads