Skip to content

Secondary zone does not fall back to AXFR when IXFR fails with a transport timeout #1884

@Hemsby

Description

@Hemsby

Description

When a secondary zone attempts IXFR, SecondaryZone.cs correctly falls back to AXFR if the primary responds with RCODE=NotImplemented or RCODE=Refused. However, if the IXFR request fails at the transport layer (e.g. QuicException: Connection timed out waiting for a response from the peer), the exception propagates directly to the outer catch block and the refresh is marked as completely failed — no AXFR fallback is attempted.

Reproduction:

  1. Primary zone is DNSSEC-signed and has a large SOA expire (e.g. 604800s = 7 days)
  2. Zone receives frequent DHCP-driven updates — DNSSEC auto-signing causes serial to increment rapidly, building a large IXFR history
  3. Secondary falls significantly behind (200+ serial versions) after a transient network event
  4. Secondary attempts IXFR — primary must build and stream a large diff; the QUIC stream times out before completing
  5. Secondary logs DNS Server failed to refresh and does not retry with AXFR
  6. Manual resync (which forces AXFR via _resync = true) succeeds immediately

Expected: A transport-level failure during IXFR should fall back to AXFR, consistent with the existing fallback for RCODE errors.

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions