in platform/consensus/ordering/pbft/performance_manager.cpp [293:340]
int PerformanceManager::DoBatch(
const std::vector<std::unique_ptr<QueueItem>>& batch_req) {
auto new_request =
NewRequest(Request::TYPE_NEW_TXNS, Request(), config_.GetSelfInfo().id());
if (new_request == nullptr) {
return -2;
}
std::vector<std::unique_ptr<Context>> context_list;
BatchUserRequest batch_request;
for (size_t i = 0; i < batch_req.size(); ++i) {
BatchUserRequest::UserRequest* req = batch_request.add_user_requests();
*req->mutable_request() = *batch_req[i]->user_request.get();
if (batch_req[i]->context) {
*req->mutable_signature() = batch_req[i]->context->signature;
}
req->set_id(i);
}
batch_request.set_createtime(GetCurrentTime());
batch_request.set_local_id(local_id_++);
batch_request.SerializeToString(new_request->mutable_data());
if (verifier_) {
auto signature_or = verifier_->SignMessage(new_request->data());
if (!signature_or.ok()) {
LOG(ERROR) << "Sign message fail";
return -2;
}
*new_request->mutable_data_signature() = *signature_or;
}
new_request->set_hash(SignatureVerifier::CalculateHash(new_request->data()));
new_request->set_proxy_id(config_.GetSelfInfo().id());
replica_communicator_->SendMessage(*new_request, GetPrimary());
global_stats_->BroadCastMsg();
send_num_[GetPrimary()]++;
if (total_num_++ == 1000000) {
stop_ = true;
LOG(WARNING) << "total num is done:" << total_num_;
}
if (total_num_ % 10000 == 0) {
LOG(WARNING) << "total num is :" << total_num_;
}
global_stats_->IncClientCall();
AddWaitingResponseRequest(std::move(new_request));
return 0;
}