void ClusterTopologyMonitor::NodeMonitoringThread::handle_writer_conn()

in src/failover/cluster_topology_monitor.cc [509:530]


void ClusterTopologyMonitor::NodeMonitoringThread::handle_writer_conn() {
    std::lock_guard<std::mutex> hdbc_lock(main_monitor_->node_threads_writer_hdbc_mutex_);
    if (main_monitor_->node_threads_writer_hdbc_ != nullptr) {
        // Writer connection already set
        // Disconnect this thread's connection
        LOG(INFO) << "Writer connection already set, disconnect this thread's connection";
        main_monitor_->odbc_helper_->Cleanup(SQL_NULL_HANDLE, hdbc_, SQL_NULL_HANDLE);
    } else {
        // Main monitor now tracks this connection
        LOG(INFO) << "Main monitor now tracks this connection";
        main_monitor_->node_threads_writer_hdbc_ = std::make_shared<SQLHDBC>(hdbc_);
        // Update topology using writer connection
        LOG(INFO) << "Update topology using writer connection";
        main_monitor_->FetchTopologyUpdateCache(hdbc_);
        {
            std::lock_guard<std::mutex> host_info_lock(main_monitor_->node_threads_writer_host_info_mutex_);
            main_monitor_->node_threads_writer_host_info_ = host_info_;
        }
    }
    hdbc_ = SQL_NULL_HDBC;
    main_monitor_->node_threads_stop_.store(true);
}