• Home
  • Features
  • Pricing
  • Docs
  • Announcements
  • Sign In

kubernetes-sigs / external-dns / 32660228669
82%

Build:
DEFAULT BRANCH: master
Ran 23 Aug 2026 07:09PM UTC
Jobs 2
Files 157
Run time 1min
Badge
Embed ▾
README BADGES
x

If you need to use a raster PNG badge, change the '.svg' to '.png' in the link

Markdown

Textile

RDoc

HTML

Rst

23 Aug 2026 07:07PM UTC coverage: 82.065% (+0.03%) from 82.031%
32660228669

push

github

web-flow
fix(rfc2136): do not swallow AXFR envelope errors (#6652)

* fix(rfc2136): do not swallow AXFR envelope errors

List() discarded errors delivered on the AXFR envelope channel with a bare continue, so read timeouts, TSIG verification failures, non-NOERROR rcodes, dns.ErrSoa, dns.ErrId and mid-stream I/O errors (connection reset, EOF) all returned a partial or empty record set together with a nil error. Callers could not distinguish "this zone is empty" from "I failed to read this zone".

Only the IncomeTransfer return value was routed into lastErr, so the "if lastErr != nil" guard could never fire for envelope-level failures. IncomeTransfer returning nil only means a connection was opened and the AXFR query was written; every response-side failure is reported in-band on the envelope channel as Envelope.Error.

With --registry=txt this fails open. An empty read makes every desired endpoint take the "dns name not taken" branch in plan.go, which leaves the owner-mismatch guard unreachable because it iterates row.current. A second ExternalDNS instance then creates ownership TXT records for names owned by another instance.

Envelope errors are now wrapped into lastErr so the existing SoftError path reports them, and records are buffered per attempt and merged only after a clean transfer, so a partial read is never mixed into the result of a retry against another nameserver.

The function-local lastErr is now cleared when a nameserver attempt succeeds, restoring nameserver failover: previously, an error from an earlier nameserver attempt would poison lastErr and cause the post-loop guard to return SoftError even after a later nameserver succeeded. This incidentally covers the same latent failover bug on the pre-existing connection-error path (related to #6561 and #6567, which address stale errors after a successful fallback; this commit addresses the envelope-error variant of the same class).

Authored on top of #6591, which split the shared load-balancing s... (continued)

17506 of 21332 relevant lines covered (82.06%)

1466.41 hits per line

Coverage Regressions

Lines Coverage ∆ File
43
72.26
1.91% rfc2136/rfc2136.go
Jobs
ID Job ID Ran Files Coverage
1 run-macos-latest - 32660228669.1 23 Aug 2026 07:10PM UTC 157
82.02
GitHub Action Run
2 run-ubuntu-latest - 32660228669.2 23 Aug 2026 07:09PM UTC 157
82.06
GitHub Action Run
Source Files on build 32660228669
  • Tree
  • List 157
  • Changed 1
  • Source Changed 0
  • Coverage Changed 1
Coverage ∆ File Lines Relevant Covered Missed Hits/Line
  • Back to Repo
  • Github Actions Build #32660228669
  • 2a47cf7b on github
  • Prev Build on master (#32596046857)
  • Next Build on master (#32772620423)
STATUS · Troubleshooting · Open an Issue · Sales · Support · CAREERS · ENTERPRISE · START FREE TRIAL · SCHEDULE DEMO
ANNOUNCEMENTS · TWITTER · TOS & SLA · Supported CI Services · What's a CI service? · Automated Testing

© 2026 Coveralls, Inc