in platform/consensus/ordering/common/framework/response_manager.cpp [190:233]
int ResponseManager::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();
*req->mutable_signature() = batch_req[i]->context->signature;
req->set_id(i);
context_list.push_back(std::move(batch_req[i]->context));
}
if (!config_.IsPerformanceRunning()) {
LOG(ERROR) << "add context list:" << new_request->seq()
<< " list size:" << context_list.size();
batch_request.set_local_id(local_id_);
}
batch_request.set_createtime(GetCurrentTime());
std::string data;
batch_request.SerializeToString(&data);
if (verifier_) {
auto signature_or = verifier_->SignMessage(data);
if (!signature_or.ok()) {
LOG(ERROR) << "Sign message fail";
return -2;
}
*new_request->mutable_data_signature() = *signature_or;
}
batch_request.SerializeToString(new_request->mutable_data());
new_request->set_hash(SignatureVerifier::CalculateHash(new_request->data()));
new_request->set_proxy_id(config_.GetSelfInfo().id());
replica_communicator_->SendMessage(*new_request, GetPrimary());
send_num_++;
LOG(INFO) << "send msg to primary:" << GetPrimary()
<< " batch size:" << batch_req.size();
return 0;
}