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