in platform/networkstrate/consensus_manager.cpp [110:157]
void ConsensusManager::SendHeartBeat() {
auto keys = verifier_->GetAllPublicKeys();
std::vector<ReplicaInfo> replicas = GetAllReplicas();
LOG(ERROR) << "all replicas:" << replicas.size();
std::vector<ReplicaInfo> client_replicas = GetClientReplicas();
HeartBeatInfo hb_info;
hb_info.set_sender(config_.GetSelfInfo().id());
hb_info.set_ip(config_.GetSelfInfo().ip());
hb_info.set_port(config_.GetSelfInfo().port());
hb_info.set_hb_version(version_);
for (const auto& key : keys) {
*hb_info.add_public_keys() = key;
hb_info.add_node_version(hb_[key.public_key_info().node_id()]);
}
for (const auto& client : client_replicas) {
replicas.push_back(client);
}
auto client = GetReplicaClient(replicas, false);
if (client == nullptr) {
return;
}
// If it is not a client node, broadcost the current primary to the client.
if (config_.GetPublicKeyCertificateInfo()
.public_key()
.public_key_info()
.type() == CertificateKeyInfo::REPLICA) {
hb_info.set_primary(GetPrimary());
hb_info.set_version(GetVersion());
}
LOG(ERROR) << " server:" << config_.GetSelfInfo().id() << " sends HB"
<< " is ready:" << is_ready_
<< " client size:" << client_replicas.size()
<< " svr size:" << replicas.size();
Request request;
request.set_type(Request::TYPE_HEART_BEAT);
request.mutable_region_info()->set_region_id(
config_.GetConfigData().self_region_id());
hb_info.SerializeToString(request.mutable_data());
int ret = client->SendHeartBeat(request);
if (ret <= 0) {
LOG(ERROR) << " server:" << config_.GetSelfInfo().id()
<< " sends HB fail:" << ret;
}
}