make is_in_2pc semantic better
This commit is contained in:
@ -1000,8 +1000,14 @@ int ObPartTransCtx::replay_start_working_log(const SCN start_working_ts)
|
|||||||
return ret;
|
return ret;
|
||||||
}
|
}
|
||||||
|
|
||||||
// The txn is in the state between prepare and clear
|
|
||||||
bool ObPartTransCtx::is_in_2pc_() const
|
bool ObPartTransCtx::is_in_2pc_() const
|
||||||
|
{
|
||||||
|
// The order is important if you use it without lock.
|
||||||
|
return is_2pc_logging_() || is_in_durable_2pc_();
|
||||||
|
}
|
||||||
|
|
||||||
|
// The txn is in the durable state between prepare and clear
|
||||||
|
bool ObPartTransCtx::is_in_durable_2pc_() const
|
||||||
{
|
{
|
||||||
ObTxState state = exec_info_.state_;
|
ObTxState state = exec_info_.state_;
|
||||||
return state >= ObTxState::PREPARE;
|
return state >= ObTxState::PREPARE;
|
||||||
@ -2119,7 +2125,8 @@ int ObPartTransCtx::try_submit_next_log_(const bool for_freeze)
|
|||||||
{
|
{
|
||||||
int ret = OB_SUCCESS;
|
int ret = OB_SUCCESS;
|
||||||
ObTxLogType log_type = ObTxLogType::UNKNOWN;
|
ObTxLogType log_type = ObTxLogType::UNKNOWN;
|
||||||
if (ObPartTransAction::COMMIT == part_trans_action_ && !is_2pc_logging_() && !is_in_2pc_()
|
if (ObPartTransAction::COMMIT == part_trans_action_
|
||||||
|
&& !is_in_2pc_()
|
||||||
&& !need_force_abort_()) {
|
&& !need_force_abort_()) {
|
||||||
if (is_follower_()) {
|
if (is_follower_()) {
|
||||||
ret = OB_NOT_MASTER;
|
ret = OB_NOT_MASTER;
|
||||||
|
|||||||
@ -249,9 +249,14 @@ public:
|
|||||||
private:
|
private:
|
||||||
void default_init_();
|
void default_init_();
|
||||||
int init_memtable_ctx_(const uint64_t tenant_id, const share::ObLSID &ls_id);
|
int init_memtable_ctx_(const uint64_t tenant_id, const share::ObLSID &ls_id);
|
||||||
bool is_in_2pc_() const;
|
// Please use it carefully, because it only refer to the downstream_state_
|
||||||
|
bool is_in_durable_2pc_() const;
|
||||||
bool is_logging_() const;
|
bool is_logging_() const;
|
||||||
|
|
||||||
|
// It is decided based on both durable 2pc state and on the fly logging.
|
||||||
|
// So it can be used safely at any time.
|
||||||
|
bool is_in_2pc_() const;
|
||||||
|
|
||||||
// force abort but not submit abort log
|
// force abort but not submit abort log
|
||||||
bool need_force_abort_() const;
|
bool need_force_abort_() const;
|
||||||
// force abort but wait abort log_cb
|
// force abort but wait abort log_cb
|
||||||
|
|||||||
Reference in New Issue
Block a user