From: Holger Hoffstätte Date: Sat, 26 Jun 2021 16:16:42 +0000 (+0200) Subject: Dnsdist: Reset latency of an upstream server when it is marked down X-Git-Tag: dnsdist-1.7.0-alpha1~118^2 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=refs%2Fpull%2F10508%2Fhead;p=thirdparty%2Fpdns.git Dnsdist: Reset latency of an upstream server when it is marked down --- diff --git a/pdns/dnsdist-lua-bindings.cc b/pdns/dnsdist-lua-bindings.cc index 1a1ace93d7..f8c04b8d0e 100644 --- a/pdns/dnsdist-lua-bindings.cc +++ b/pdns/dnsdist-lua-bindings.cc @@ -111,7 +111,7 @@ void setupLuaBindings(LuaContext& luaCtx, bool client) luaCtx.registerFunction("setUp", &DownstreamState::setUp); luaCtx.registerFunction newStatus)>("setAuto", [](DownstreamState& s, boost::optional newStatus) { if (newStatus) { - s.upStatus = *newStatus; + s.setUpStatus(*newStatus); } s.setAuto(); }); diff --git a/pdns/dnsdist.cc b/pdns/dnsdist.cc index 9a2ac0a23f..3a0b2c20db 100644 --- a/pdns/dnsdist.cc +++ b/pdns/dnsdist.cc @@ -2413,7 +2413,7 @@ int main(int argc, char** argv) for(auto& dss : g_dstates.getCopy()) { // it is a copy, but the internal shared_ptrs are the real deal if (dss->availability == DownstreamState::Availability::Auto) { if (!queueHealthCheck(mplexer, dss, true)) { - dss->upStatus = false; + dss->setUpStatus(false); warnlog("Marking downstream %s as 'down'", dss->getNameWithAddr()); } } diff --git a/pdns/dnsdist.hh b/pdns/dnsdist.hh index 5d6ed9401a..cd2328e644 100644 --- a/pdns/dnsdist.hh +++ b/pdns/dnsdist.hh @@ -988,7 +988,17 @@ struct DownstreamState return upStatus; } void setUp() { availability = Availability::Up; } - void setDown() { availability = Availability::Down; } + void setUpStatus(bool newStatus) + { + upStatus = newStatus; + if (!upStatus) + latencyUsec = 0.0; + } + void setDown() + { + availability = Availability::Down; + latencyUsec = 0.0; + } void setAuto() { availability = Availability::Auto; } const string& getName() const { return name; diff --git a/pdns/dnsdistdist/dnsdist-healthchecks.cc b/pdns/dnsdistdist/dnsdist-healthchecks.cc index ac013d2c02..4b1dd9057e 100644 --- a/pdns/dnsdistdist/dnsdist-healthchecks.cc +++ b/pdns/dnsdistdist/dnsdist-healthchecks.cc @@ -68,7 +68,7 @@ void updateHealthCheckResult(const std::shared_ptr& dss, bool n } } - dss->upStatus = newState; + dss->setUpStatus(newState); dss->currentCheckFailures = 0; dss->consecutiveSuccessfulChecks = 0; if (g_snmpAgent && g_snmpTrapsEnabled) { @@ -172,7 +172,7 @@ static void initialHealthCheckCallback(int fd, FDMultiplexer::funcparam_t& param data->d_mplexer->removeReadFD(fd); bool up = handleResponse(data); warnlog("Marking downstream %s as '%s'", data->d_ds->getNameWithAddr(), up ? "up" : "down"); - data->d_ds->upStatus = up; + data->d_ds->setUpStatus(up); } bool queueHealthCheck(std::shared_ptr& mplexer, const std::shared_ptr& ds, bool initialCheck) @@ -284,7 +284,7 @@ void handleQueuedHealthChecks(std::shared_ptr& mplexer, bool init } if (initial) { warnlog("Marking downstream %s as 'down'", data->d_ds->getNameWithAddr()); - data->d_ds->upStatus = false; + data->d_ds->setUpStatus(false); } else { updateHealthCheckResult(data->d_ds, false);