MCPcopy Create free account
hub / github.com/Tencent/phxqueue / KeepMaster

Method KeepMaster

phxqueue/lock/keepmasterthread.cpp:156–321  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

154}
155
156comm::RetCode KeepMasterThread::KeepMaster() {
157 const int topic_id{impl_->lock->GetTopicID()};
158
159 shared_ptr<const config::TopicConfig> topic_config;
160 comm::RetCode ret{config::GlobalConfig::GetThreadInstance()->
161 GetTopicConfigByTopicID(topic_id, topic_config)};
162 if (comm::RetCode::RET_OK != ret) {
163 QLErr("GetTopicConfigByTopicID ret %d topic_id %d", ret, topic_id);
164
165 return ret;
166 }
167
168 static vector<bool> last_master;
169 const auto &opt(impl_->lock->GetLockOption());
170 last_master.resize(opt->nr_group);
171
172 comm::proto::Addr addr;
173 addr.set_ip(opt->ip);
174 addr.set_port(opt->port);
175 addr.set_paxos_port(opt->paxos_port);
176
177 shared_ptr<const config::LockConfig> lock_config;
178 ret = config::GlobalConfig::GetThreadInstance()->GetLockConfig(topic_id, lock_config);
179 if (comm::RetCode::RET_OK != ret) {
180 QLErr("GetLockConfig ret %d topic_id %d", as_integer(ret), topic_id);
181
182 return ret;
183 }
184
185 shared_ptr<const config::proto::Lock> lock;
186 ret = lock_config->GetLockByAddr(addr, lock);
187 if (comm::RetCode::RET_OK != ret) {
188 QLErr("GetLockByAddr ret %d", as_integer(ret));
189
190 return ret;
191 }
192
193 int idx_in_lock{-1};
194 for (size_t i{0}; lock->addrs_size() > i; ++i) {
195 if (addr.ip() == lock->addrs(i).ip() &&
196 addr.port() == lock->addrs(i).port() &&
197 addr.paxos_port() == lock->addrs(i).paxos_port()) {
198 idx_in_lock = i;
199
200 break;
201 }
202 }
203
204 auto node(impl_->lock->GetNode());
205
206 if (-1 == idx_in_lock)
207 return comm::RetCode::RET_ERR_LOGIC;
208
209 for (int paxos_group_id{0}; paxos_group_id < opt->nr_group; ++paxos_group_id) {
210 if (static_cast<double>(paxos_group_id) / opt->nr_group * 100.0 + 0.5 >
211 impl_->master_rate) {
212 QLInfo("MASTERSTAT: master_rate too low, need drop master. "
213 "paxos_group_id %d master_rate %d", paxos_group_id, impl_->master_rate);

Callers

nothing calls this directly

Calls 9

as_integerFunction · 0.85
GetLockConfigMethod · 0.80
GetLockByAddrMethod · 0.80
GetTopicIDMethod · 0.45
GetNodeMethod · 0.45
NeedDropMasterMethod · 0.45
OnIMMasterMethod · 0.45
OnSnatchMasterMethod · 0.45

Tested by

no test coverage detected