From: Remi Gacogne Date: Mon, 28 Feb 2022 12:21:53 +0000 (+0100) Subject: dnsdist: The check interval applies to health-check, not timeouts X-Git-Tag: rec-4.7.0-beta1~69^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=18b5c40b25e85ff137b0a79ab0df0171489d89ea;p=thirdparty%2Fpdns.git dnsdist: The check interval applies to health-check, not timeouts --- diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index 58f695e118..ffe03ff6c6 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -1829,7 +1829,15 @@ static void healthChecksThread() auto mplexer = std::unique_ptr(FDMultiplexer::getMultiplexerSilent()); auto states = g_dstates.getLocal(); // this points to the actual shared_ptrs! - for(auto& dss : *states) { + for (auto& dss : *states) { + auto delta = dss->sw.udiffAndSet()/1000000.0; + dss->queryLoad.store(1.0*(dss->queries.load() - dss->prev.queries.load())/delta); + dss->dropRate.store(1.0*(dss->reuseds.load() - dss->prev.reuseds.load())/delta); + dss->prev.queries.store(dss->queries.load()); + dss->prev.reuseds.store(dss->reuseds.load()); + + dss->handleTimeouts(); + if (dss->d_nextCheck > 1) { --dss->d_nextCheck; continue; @@ -1842,14 +1850,6 @@ static void healthChecksThread() updateHealthCheckResult(dss, false, false); } } - - auto delta = dss->sw.udiffAndSet()/1000000.0; - dss->queryLoad.store(1.0*(dss->queries.load() - dss->prev.queries.load())/delta); - dss->dropRate.store(1.0*(dss->reuseds.load() - dss->prev.reuseds.load())/delta); - dss->prev.queries.store(dss->queries.load()); - dss->prev.reuseds.store(dss->reuseds.load()); - - dss->handleTimeouts(); } handleQueuedHealthChecks(*mplexer);