mirror of
https://github.com/hickory-dns/hickory-dns.git
synced 2026-04-25 11:15:54 +03:00
[GH-ISSUE #3429] SQLite journal replay does not preserve SOA serial increments across restart after dynamic updates #1180
Labels
No labels
blocked
breaking-change
bug
bug:critical
bug:tests
cleanup
compliance
compliance
compliance
crate:all
crate:client
crate:native-tls
crate:proto
crate:recursor
crate:resolver
crate:resolver
crate:rustls
crate:server
crate:util
dependencies
docs
duplicate
easy
easy
enhance
enhance
enhance
feature:dns-over-https
feature:dns-over-quic
feature:dns-over-tls
feature:dnsssec
feature:global_lb
feature:mdns
feature:tsig
features:edns
has workaround
ops
perf
platform:WASM
platform:android
platform:fuchsia
platform:linux
platform:macos
platform:windows
pull-request
question
test
tools
tools
trust
unclear
wontfix
No milestone
No project
No assignees
1 participant
Notifications
Due date
No due date set.
Dependencies
No dependencies set.
Reference
starred/hickory-dns#1180
Loading…
Add table
Add a link
Reference in a new issue
No description provided.
Delete branch "%!s()"
Deleting a branch is permanent. Although the deleted branch may continue to exist for a short time before it actually gets removed, it CANNOT be undone in most cases. Continue?
Originally created by @zachsmith1 on GitHub (Jan 8, 2026).
Original GitHub issue: https://github.com/hickory-dns/hickory-dns/issues/3429
Describe the bug
When using the SQLite journaling backend with dynamic updates enabled, Hickory increments the SOA serial in memory after a successful RFC2136 update, but that increment is not persisted. After restarting the server, the updated records are recovered from the journal, but the SOA serial reverts to the pre-update value.
To Reproduce
Steps to reproduce the behavior:
Using a simple zone and a SIG(0) update:
Expected behavior
After a successful dynamic update that modifies zone contents, the SOA serial should remain monotonic across restarts. If the journal recovers the updated RRsets, it should also recover the updated SOA serial.
System:
Version:
Crate: server
Version: main/0.26.0-alpha.1
Additional context
SqliteZoneHandler::update_records()journals the client-supplied update records (journal.insert_records(serial, records)) but the subsequent SOA serial bump (in_memory.increment_soa_serial()) is not appended to the journal. Recovery replays withauto_signing_and_increment = false, so the serial bump is not reconstructed.crates/server/src/store/sqlite/mod.rs (update_records, recover_with_journal, journaling)
crates/server/src/store/sqlite/persistence.rs
Why this matters
Authoritative zone serials are used by secondaries and tooling; reverting serial across restart while serving updated zone data breaks expectations and can cause incorrect behavior for consumers relying on SOA serial monotonicity.
@cpu commented on GitHub (Jan 9, 2026):
Happy to review a PR with a fix if you're interested
@zachsmith1 commented on GitHub (Jan 14, 2026):
@cpu just gave it a shot. please share any/all feedback as I'm pretty new to rust