Merge pull request #71938 from ClickHouse/backport/24.9/71863

Backport #71863 to 24.9: update host resolver a little bit often
This commit is contained in:
robot-clickhouse 2024-11-14 19:08:16 +01:00 committed by GitHub
commit 8c11406a0f
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
2 changed files with 13 additions and 10 deletions

View File

@ -9,6 +9,7 @@
#include <mutex> #include <mutex>
#include <algorithm> #include <algorithm>
#include <Poco/Timespan.h>
namespace ProfileEvents namespace ProfileEvents
@ -49,16 +50,18 @@ HostResolver::WeakPtr HostResolver::getWeakFromThis()
} }
HostResolver::HostResolver(String host_, Poco::Timespan history_) HostResolver::HostResolver(String host_, Poco::Timespan history_)
: host(std::move(host_)) : HostResolver(
, history(history_) [](const String & host_to_resolve) { return DNSResolver::instance().resolveHostAllInOriginOrder(host_to_resolve); },
, resolve_function([](const String & host_to_resolve) { return DNSResolver::instance().resolveHostAllInOriginOrder(host_to_resolve); }) host_,
{ history_)
update(); {}
}
HostResolver::HostResolver( HostResolver::HostResolver(
ResolveFunction && resolve_function_, String host_, Poco::Timespan history_) ResolveFunction && resolve_function_, String host_, Poco::Timespan history_)
: host(std::move(host_)), history(history_), resolve_function(std::move(resolve_function_)) : host(std::move(host_))
, history(history_)
, resolve_interval(history_.totalMicroseconds() / 3)
, resolve_function(std::move(resolve_function_))
{ {
update(); update();
} }
@ -203,7 +206,7 @@ bool HostResolver::isUpdateNeeded()
Poco::Timestamp now; Poco::Timestamp now;
std::lock_guard lock(mutex); std::lock_guard lock(mutex);
return last_resolve_time + history < now || records.empty(); return last_resolve_time + resolve_interval < now || records.empty();
} }
void HostResolver::updateImpl(Poco::Timestamp now, std::vector<Poco::Net::IPAddress> & next_gen) void HostResolver::updateImpl(Poco::Timestamp now, std::vector<Poco::Net::IPAddress> & next_gen)

View File

@ -26,7 +26,7 @@
// a) it still occurs in resolve set after `history_` time or b) all other addresses are pessimized as well. // a) it still occurs in resolve set after `history_` time or b) all other addresses are pessimized as well.
// - resolve schedule // - resolve schedule
// Addresses are resolved through `DB::DNSResolver::instance()`. // Addresses are resolved through `DB::DNSResolver::instance()`.
// Usually it does not happen more often than once in `history_` time. // Usually it does not happen more often than 3 times in `history_` period.
// But also new resolve performed each `setFail()` call. // But also new resolve performed each `setFail()` call.
namespace DB namespace DB
@ -212,6 +212,7 @@ protected:
const String host; const String host;
const Poco::Timespan history; const Poco::Timespan history;
const Poco::Timespan resolve_interval;
const HostResolverMetrics metrics = getMetrics(); const HostResolverMetrics metrics = getMetrics();
// for tests purpose // for tests purpose
@ -245,4 +246,3 @@ private:
}; };
} }