updateConsistency();
}
+bool ServerPool::shouldKeepStaleData() const
+{
+ return !getServers().empty() && countServers(true) == 0;
+}
+
namespace dnsdist::backend
{
void registerNewBackend(std::shared_ptr<DownstreamState>& backend)
size_t poolLoad() const;
size_t countServers(bool upOnly) const;
bool hasAtLeastOneServerAvailable() const;
+ bool shouldKeepStaleData() const;
const ServerPolicy::NumberedServerVector& getServers() const;
void addServer(std::shared_ptr<DownstreamState>& server);
void removeServer(std::shared_ptr<DownstreamState>& server);
has all its backends down) */
if (packetCache->keepStaleData() && !iter->second) {
/* so far all pools had at least one backend up */
- if (pool.countServers(true) == 0) {
+ if (pool.shouldKeepStaleData()) {
iter->second = true;
}
}
BOOST_CHECK_EQUAL(pool.countServers(true), 0U);
BOOST_CHECK_EQUAL(pool.countServers(false), 0U);
BOOST_CHECK_EQUAL(pool.poolLoad(), 0U);
+ BOOST_CHECK(!pool.shouldKeepStaleData());
{
const auto& servers = pool.getServers();
BOOST_CHECK(!pool.hasAtLeastOneServerAvailable());
BOOST_CHECK_EQUAL(pool.countServers(true), 0U);
BOOST_CHECK_EQUAL(pool.countServers(false), 1U);
+ BOOST_CHECK(pool.shouldKeepStaleData());
BOOST_CHECK_EQUAL(pool.poolLoad(), 0U);
{
BOOST_CHECK(pool.hasAtLeastOneServerAvailable());
BOOST_CHECK_EQUAL(pool.countServers(true), 1U);
BOOST_CHECK_EQUAL(pool.countServers(false), 1U);
+ BOOST_CHECK(!pool.shouldKeepStaleData());
/* now remove it */
pool.removeServer(ds);
BOOST_CHECK_EQUAL(pool.countServers(true), 0U);
BOOST_CHECK_EQUAL(pool.countServers(false), 0U);
+ BOOST_CHECK(!pool.shouldKeepStaleData());
{
const auto& servers = pool.getServers();
BOOST_CHECK(servers.empty());