in platform/consensus/ordering/common/framework/performance_manager.cpp [131:167]
CollectorResultCode PerformanceManager::AddResponseMsg(
std::unique_ptr<Request> request,
std::function<void(std::unique_ptr<BatchUserResponse>)>
response_call_back) {
if (request == nullptr) {
return CollectorResultCode::INVALID;
}
std::unique_ptr<BatchUserResponse> batch_response =
std::make_unique<BatchUserResponse>();
if (!batch_response->ParseFromString(request->data())) {
LOG(ERROR) << "parse response fail:" << request->data().size()
<< " seq:" << request->seq();
return CollectorResultCode::INVALID;
}
uint64_t seq = batch_response->local_id();
bool done = false;
{
int idx = seq % response_set_size_;
std::unique_lock<std::mutex> lk(response_lock_[idx]);
if (response_[idx].find(seq) == response_[idx].end()) {
return CollectorResultCode::OK;
}
response_[idx][seq]++;
if (response_[idx][seq] >= config_.GetMinClientReceiveNum()) {
response_[idx].erase(response_[idx].find(seq));
done = true;
}
}
if (done) {
response_call_back(std::move(batch_response));
return CollectorResultCode::STATE_CHANGED;
}
return CollectorResultCode::OK;
}