luaCtx.registerFunction("setUp", &DownstreamState::setUp);
luaCtx.registerFunction<void(DownstreamState::*)(boost::optional<bool> newStatus)>("setAuto", [](DownstreamState& s, boost::optional<bool> newStatus) {
if (newStatus) {
- s.upStatus = *newStatus;
+ s.setUpStatus(*newStatus);
}
s.setAuto();
});
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());
}
}
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;
}
}
- dss->upStatus = newState;
+ dss->setUpStatus(newState);
dss->currentCheckFailures = 0;
dss->consecutiveSuccessfulChecks = 0;
if (g_snmpAgent && g_snmpTrapsEnabled) {
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<FDMultiplexer>& mplexer, const std::shared_ptr<DownstreamState>& ds, bool initialCheck)
}
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);