From a5fefa0b763e77617f98bb3ce4287a689854e41b Mon Sep 17 00:00:00 2001 From: cheniujh <1271435567@qq.com> Date: Fri, 12 Jul 2024 14:54:45 +0800 Subject: [PATCH] add function DeactivateSyncSlaveDB --- include/pika_rm.h | 1 + src/pika_rm.cc | 11 +++++++++++ src/pika_server.cc | 2 +- 3 files changed, 13 insertions(+), 1 deletion(-) diff --git a/include/pika_rm.h b/include/pika_rm.h index 4cb488253..8dcb7a350 100644 --- a/include/pika_rm.h +++ b/include/pika_rm.h @@ -166,6 +166,7 @@ class PikaReplicaManager { void RmStatus(std::string* debug_info); pstd::Status CheckDBRole(const std::string& table, int* role); pstd::Status LostConnection(const std::string& ip, int port); + pstd::Status DeactivateSyncSlaveDB(const std::string& ip, int port); // Update binlog win and try to send next binlog pstd::Status UpdateSyncBinlogStatus(const RmNode& slave, const LogOffset& offset_start, const LogOffset& offset_end); diff --git a/src/pika_rm.cc b/src/pika_rm.cc index 61bd6216f..2cadef240 100644 --- a/src/pika_rm.cc +++ b/src/pika_rm.cc @@ -726,6 +726,17 @@ bool PikaReplicaManager::CheckSlaveDBState(const std::string& ip, const int port return true; } +Status PikaReplicaManager::DeactivateSyncSlaveDB(const std::string& ip, int port) { + std::shared_lock l(dbs_rw_); + for (auto& iter : sync_slave_dbs_) { + std::shared_ptr db = iter.second; + if (db->MasterIp() == ip && db->MasterPort() == port) { + db->Deactivate(); + } + } + return Status::OK(); +} + Status PikaReplicaManager::LostConnection(const std::string& ip, int port) { std::shared_lock l(dbs_rw_); for (auto& iter : sync_master_dbs_) { diff --git a/src/pika_server.cc b/src/pika_server.cc index 35efd4674..ed32bfb07 100644 --- a/src/pika_server.cc +++ b/src/pika_server.cc @@ -659,7 +659,7 @@ void PikaServer::RemoveMaster() { if (!master_ip_.empty() && master_port_ != -1) { g_pika_rm->CloseReplClientConn(master_ip_, master_port_ + kPortShiftReplServer); - g_pika_rm->LostConnection(master_ip_, master_port_); + g_pika_rm->DeactivateSyncSlaveDB(master_ip_, master_port_); UpdateMetaSyncTimestampWithoutLock(); LOG(INFO) << "Remove Master Success, ip_port: " << master_ip_ << ":" << master_port_; }