in src/failover/cluster_topology_monitor.cc [325:353]
bool ClusterTopologyMonitor::handle_regular_mode() {
node_monitoring_threads_.clear();
std::vector<HostInfo> hosts;
{
std::lock_guard hdbc_lock(hdbc_mutex_);
hosts = FetchTopologyUpdateCache(reinterpret_cast<SQLHDBC>(main_hdbc_ ? *main_hdbc_.get() : SQL_NULL_HDBC));
}
// No hosts, switch to panic
if (hosts.empty()) {
std::lock_guard hdbc_lock(hdbc_mutex_);
dbc_clean_up(main_hdbc_);
is_writer_connection_.store(false);
return false;
}
std::chrono::steady_clock::time_point now =
std::chrono::steady_clock::time_point(std::chrono::high_resolution_clock::now().time_since_epoch());
std::chrono::steady_clock::time_point epoch = std::chrono::steady_clock::time_point{};
if (high_refresh_end_time_ != epoch && now > high_refresh_end_time_) {
high_refresh_end_time_ = epoch;
}
if (high_refresh_end_time_ == epoch) {
ClusterTopologyHelper::LogTopology(hosts);
}
DelayMainThread(false);
return true;
}