Repository navigation
Conversation
f73df4a to
bfe4a3a
Compare
90db938 to
1d7fb92
Compare
1d7fb92 to
697822e
Compare
4830b10 to
8a42d50
Compare
67f3407 to
50ed071
Compare
d28b974 to
f46429c
Compare
f46429c to
0839f10
Compare
ecv
left a comment
There was a problem hiding this comment.
Approving. Every failure path here fails closed for isolation. Follow-ups are in #261, and the first two are worth doing before staging relies on restarts: restoreActive does not mark activation needed when ApplyForce fails, and probeLocalDaemons accepts REFUSED and SERVFAIL, so a gated node can report Ready. Every restart test sets UnsafeAllowNoDNSVerify, so none of them runs the probe. The body says invalid updates retain accepted state, but a rejected record removal or version bump drops all serving. Say which is intended.
The merge-base changed after approval.
ecv
left a comment
There was a problem hiding this comment.
Re-approving. Only the parent merge changed this PR. Its own commits and diff are unchanged apart from line offsets.
…nal-dns-serving-recovery
…nal-dns-serving-recovery
…nal-dns-serving-recovery Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
…nal-dns-serving-recovery Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
kevwilliams
left a comment
There was a problem hiding this comment.
Hold: a withdrawal whose render fails keeps serving the withdrawn data.
Agent.reconcilereturns on arenderPublicationserror, and on thestore.SaveafterActive = nil, before any gate. The old files and daemons keep answering for a revoked binding or deleted record, and every tick retries the same error. Still true at the top of the stack (#244).- Fix: call
failClosedwhenever!canRetainActive()and reconcile fails for any reason, not only whenApplyfails. - Test: inject a render error on a withdrawal and assert serving stops.
…nal-dns-serving-recovery
`Agent.reconcile` only failed closed when `Apply` was rejected. If the desired state withdrew something the approved configuration serves (a revoked binding, a detached zone or a deleted record) and reconciliation failed earlier, for example in `renderPublications` or the checkpoint save after clearing `Active`, it returned before any gate. The daemons kept answering with the withdrawn data and every tick retried the same error. Reconcile now records whether the approved configuration can be retained before it starts, and fails closed on any reconcile error when it cannot. A shutdown is not treated as a failed install, since `restoreActive` gates again on restart. A render failure that withdraws nothing still keeps the approved configuration. A new test injects a render error on a binding withdrawal and asserts that serving is gated, and that the same error without a withdrawal does not gate. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
The local daemon readiness probe queried CoreDNS over UDP and TCP, but CoreDNS has listened only on TCP since the shared query serving change, with dnsdist in front of it for UDP. The UDP query was refused, so `internal-dns-node` never became Ready and the E2E environment timed out in `env:internal-dns:up`. The probe now checks CoreDNS over TCP only and still checks dnsdist over both UDP and TCP, matching what each daemon listens on. The publication probe timeout test now listens on TCP accordingly. Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
|
@kevwilliams Fixed in 3f8fa1a. This push also carries 50d1585, which fixes the Chainsaw E2E hold on #239 and #243: the local readiness probe queried CoreDNS over UDP, but CoreDNS listens only on TCP. |
ecv
left a comment
There was a problem hiding this comment.
Re-approving at 50d1585. Reconcile now fails closed on any error when the desired state withdraws something the approved configuration serves, so a revoked binding stops answering even if rendering fails, and a test covers both the withdrawal and the no-withdrawal case. The readiness probe checks CoreDNS over TCP only, matching #236's TCP-only listener. probeLocalDaemons still accepts any DNS response from dnsdist, which #261 tracks.
The merge-base changed after approval.
ecv
left a comment
There was a problem hiding this comment.
Re-approving. The head is unchanged; only the base moved after the parent merged.
Summary
Keep validated private DNS available during configuration agent restarts and control plane outages.
CoreDNS restores accepted snapshots from persistent storage and activates record changes without restarting DNS listeners. Failed restart installations retry activation. The fleet verifies installed publications before reporting readiness. Rejected additions preserve accepted records; if an update removes records or resolver access and cannot be applied, the member stops serving the affected configuration.
Test plan
Stacked on #236. Architecture: #229.
Related: datum-cloud/enhancements#921