bool ClusterTopologyMonitor::handle_regular_mode()

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;
}