resolver: try servers in a random order on each resolution (closes #138)
check / check (push) Failing after 2m13s

Every resolution walked the root servers in a fixed order, so
a.root-servers.net got every first query and its timeouts were paid on
every lookup. Each list of servers the resolver walks is now walked in a
random order from rand.Shuffle, chosen anew each time; a server that does
not reply, refuses, or gives an error reply or a referral that leads no
closer is still passed over for the next. When a referral names a zone's
nameservers without their addresses, all of them are now looked up, not
only the first that resolves, so the zone is not given up because the
first nameserver whose address was found gave no usable reply. No test
fails if the walk stops shuffling: which server a live query reached is
not observable.

Model: opus-5-5
Šī revīzija ir iekļauta:
2026-10-02 01:15:16 +00:00
vecāks af81f2ac76
revīzija ec82f97dc7
8 mainīti faili ar 146 papildinājumiem un 14 dzēšanām
+5 -5
Parādīt failu
@@ -9,11 +9,11 @@
//
// 1. Bounded concurrency. Tests run in parallel and the build hosts
// have many cores, so without a limit every test starts its own
// iterative resolution at the same instant and they all hit the
// first root server within a few milliseconds of each other. Root
// servers rate-limit that, which shows up as a different arbitrary
// subset of tests failing on each run. Run caps how many live
// operations are in flight at once in one test binary.
// iterative resolution at the same instant and they all send their
// first queries to the root servers within a few milliseconds of
// each other. Root servers rate-limit that, which shows up as a
// different arbitrary subset of tests failing on each run. Run caps
// how many live operations are in flight at once in one test binary.
//
// 2. Retry with exponential backoff. Each live operation gets several
// attempts with its own timeout. An attempt is retried when it