提交 edb71c1b 编写于 作者: K KernelMaker

bugfix: A <- B <- C, when C executesslaveof no one, B should change its status...

bugfix: A <- B <- C, when C executesslaveof no one, B should change its status from (MASTER/SLAVE) to (SLAVE)
上级 4d770a03
......@@ -297,6 +297,8 @@ void PikaServer::Start() {
void PikaServer::DeleteSlave(const std::string& ip, int64_t port) {
std::string ip_port = slash::IpPortString(ip, port);
int slave_num = 0;
{
slash::MutexLock l(&slave_mutex_);
std::vector<SlaveItem>::iterator iter = slaves_.begin();
while (iter != slaves_.end()) {
......@@ -312,10 +314,18 @@ void PikaServer::DeleteSlave(const std::string& ip, int64_t port) {
delete static_cast<PikaBinlogSenderThread*>(iter->sender);
}
slaves_.erase(iter);
return;
slave_num = slaves_.size();
}
slash::RWLock l(&state_protector_, true);
if (slave_num == 0) {
role_ &= ~PIKA_ROLE_MASTER;
}
}
void PikaServer::DeleteSlave(int fd) {
int slave_num = 0;
{
slash::MutexLock l(&slave_mutex_);
std::vector<SlaveItem>::iterator iter = slaves_.begin();
......@@ -330,6 +340,12 @@ void PikaServer::DeleteSlave(int fd) {
}
iter++;
}
slave_num = slaves_.size();
}
slash::RWLock l(&state_protector_, true);
if (slave_num == 0) {
role_ &= ~PIKA_ROLE_MASTER;
}
}
/*
......
......@@ -51,7 +51,7 @@ void MigrateKv(const std::string& ip, const int port,
}
prev_start = kvs[kvs.size() - 2];
}
delete client;
std::cout << std::this_thread::get_id() << ", Kv client done" << std::endl;
}
......@@ -105,6 +105,7 @@ void MigrateHash(const std::string& ip, const int port,
prev_start_field = fvs[fvs.size() - 2];
}
}
delete client;
std::cout << std::this_thread::get_id() << ", Hash client done" << std::endl;
}
......@@ -158,6 +159,7 @@ void MigrateQueue(const std::string& ip, const int port,
start += fs.size();
}
}
delete client;
std::cout << std::this_thread::get_id() << ", Queue client done" << std::endl;
}
......@@ -211,6 +213,7 @@ void MigrateZset(const std::string& ip, const int port,
prev_start_member = sms[sms.size() - 2];
}
}
delete client;
std::cout << std::this_thread::get_id() << ", Zset client done" << std::endl;
}
......
Markdown is supported
0% .
You are about to add 0 people to the discussion. Proceed with caution.
先完成此消息的编辑!
想要评论请 注册