absl::StatusOr ResDBTxnAccessor::GetBlockNumbers()

in interface/common/resdb_txn_accessor.cpp [150:189]


absl::StatusOr<uint64_t> ResDBTxnAccessor::GetBlockNumbers() {
  QueryRequest request;
  request.set_min_seq(0);
  request.set_max_seq(0);

  std::vector<std::unique_ptr<NetChannel>> clients;
  std::vector<std::thread> ths;
  std::string final_str;
  std::mutex mtx;
  std::condition_variable resp_cv;
  bool success = false;

  std::unique_ptr<NetChannel> client =
      GetNetChannel(replicas_[0].ip(), replicas_[0].port());

  LOG(INFO) << "ip:" << replicas_[0].ip() << " port:" << replicas_[0].port();

  std::string response_str;
  int ret = 0;
  for (int i = 0; i < 5; ++i) {
    ret = client->SendRequest(request, Request::TYPE_QUERY);
    if (ret) {
      continue;
    }
    client->SetRecvTimeout(100000);
    ret = client->RecvRawMessageStr(&response_str);
    LOG(INFO) << "receive str:" << ret << " len:" << response_str.size();
    if (ret != 0) {
      continue;
    }
    break;
  }

  QueryResponse resp;
  if (response_str.empty() || !resp.ParseFromString(response_str)) {
    LOG(ERROR) << "parse fail len:" << final_str.size();
    return absl::InternalError("recv data fail.");
  }
  return resp.max_seq();
}