nameservers.insert({nameserver, {{}, false}});
}
LOG("looping to them" << endl);
+ if (s_maxnsperresolve > 0 && nameservers.size() > s_maxnsperresolve) {
+ LOG(prefix << qname << "Reducing number of NS attempted to " << s_maxnsperresolve << endl);
+ NsSet selected;
+ std::sample(nameservers.cbegin(), nameservers.cend(), std::inserter(selected, selected.begin()), s_maxnsperresolve, pdns::dns_random_engine());
+ nameservers = std::move(selected);
+ }
+
*gotNewServers = true;
auth = std::move(newauth);
if (rnameservers.size() > nsLimit) {
int newLimit = static_cast<int>(nsLimit - (rnameservers.size() - nsLimit));
nsLimit = std::max(5, newLimit);
+ LOG("Applying nsLimit " << nsLimit << endl);
}
for (auto tns = rnameservers.cbegin();; ++tns) {
}
catch (const ImmediateServFailException& ex) {
BOOST_CHECK_EQUAL(ret.size(), 0U);
- // one query to get NSs, then A and AAAA for each NS, 5th NS hits the limit
- // limit is reduced to 5, because zone publishes many (20) NS
- BOOST_CHECK_EQUAL(queriesCount, 11U);
+ // one query to get NSs, then A and AAAA for each NS, 7th NS hits the limit
+ // limit is reduced to 7, because zone publishes many (20, but actually reduced to 13 used) NS
+ BOOST_CHECK_EQUAL(queriesCount, 15U);
}
}