void ConsensusManager::SendHeartBeat()

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