in platform/consensus/ordering/pbft/message_manager.cpp [134:167]
bool MessageManager::MayConsensusChangeStatus(
int type, int received_count, std::atomic<TransactionStatue>* status,
bool ret) {
switch (type) {
case Request::TYPE_PRE_PREPARE:
if (*status == TransactionStatue::None) {
TransactionStatue old_status = TransactionStatue::None;
return status->compare_exchange_strong(
old_status, TransactionStatue::READY_PREPARE,
std::memory_order_acq_rel, std::memory_order_acq_rel);
}
break;
case Request::TYPE_PREPARE:
if (*status == TransactionStatue::READY_PREPARE &&
config_.GetMinDataReceiveNum() <= received_count) {
TransactionStatue old_status = TransactionStatue::READY_PREPARE;
return status->compare_exchange_strong(
old_status, TransactionStatue::READY_COMMIT,
std::memory_order_acq_rel, std::memory_order_acq_rel);
}
break;
case Request::TYPE_COMMIT:
if (*status == TransactionStatue::READY_COMMIT &&
config_.GetMinDataReceiveNum() <= received_count) {
TransactionStatue old_status = TransactionStatue::READY_COMMIT;
return status->compare_exchange_strong(
old_status, TransactionStatue::READY_EXECUTE,
std::memory_order_acq_rel, std::memory_order_acq_rel);
return true;
}
break;
}
return ret;
}