void ClusterTopologyMonitor::DelayMainThread()

in src/failover/cluster_topology_monitor.cc [181:199]


void ClusterTopologyMonitor::DelayMainThread(bool use_high_refresh_rate) {
    std::chrono::steady_clock::time_point curr_time =
        std::chrono::steady_clock::time_point(std::chrono::high_resolution_clock::now().time_since_epoch());
    if ((high_refresh_end_time_ != std::chrono::steady_clock::time_point() &&
            curr_time < high_refresh_end_time_) || request_update_topology_.load()) {
        use_high_refresh_rate = true;
    }

    std::chrono::steady_clock::time_point end = curr_time + (use_high_refresh_rate ?
        std::chrono::milliseconds(high_refresh_rate_ms_) :
        std::chrono::milliseconds(refresh_rate_ms_));
    std::unique_lock<std::mutex> request_lock(request_update_topology_mutex_);
    do {
        request_update_topology_cv_.wait_for(request_lock, std::chrono::milliseconds(TOPOLOGY_REQUEST_WAIT_MS));
        curr_time = std::chrono::steady_clock::time_point(std::chrono::high_resolution_clock::now().time_since_epoch());
    } while (!request_update_topology_.load() &&
        curr_time < end && !is_running_.load()
    );
}