[master] reset session txDesc when receive new txstate
This commit is contained in:
@ -196,6 +196,7 @@ TO_STRING_KV(K(is_inited_), K(tenant_id_), KP(this));
|
||||
private:
|
||||
int check_ls_status_(const share::ObLSID &ls_id, bool &leader);
|
||||
int init_tx_(ObTxDesc &tx, const uint32_t session_id);
|
||||
int reinit_tx_(ObTxDesc &tx, const uint32_t session_id);
|
||||
int start_tx_(ObTxDesc &tx);
|
||||
int abort_tx_(ObTxDesc &tx, const int cause, bool cleanup = true);
|
||||
void abort_tx__(ObTxDesc &tx, const bool cleanup);
|
||||
|
@ -148,10 +148,9 @@ int ObTransService::release_tx(ObTxDesc &tx, const bool is_from_xa)
|
||||
MTL_SWITCH(tx.tenant_id_) {
|
||||
return MTL(ObTransService*)->release_tx(tx);
|
||||
}
|
||||
// FIXME: open check later
|
||||
// } else if (NULL != tx.get_xa_ctx() && !is_from_xa) {
|
||||
// ret = OB_ERR_UNEXPECTED;
|
||||
// TRANS_LOG(ERROR, "unexpected case", K(ret), K(is_from_xa), K(tx));
|
||||
} else if (NULL != tx.get_xa_ctx() && !is_from_xa) {
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
TRANS_LOG(ERROR, "unexpected case", K(ret), K(is_from_xa), K(tx));
|
||||
} else {
|
||||
ObTransTraceLog &tlog = tx.get_tlog();
|
||||
REC_TRANS_TRACE_EXT(&tlog, release, OB_Y(ret),
|
||||
@ -212,9 +211,7 @@ int ObTransService::reuse_tx(ObTxDesc &tx)
|
||||
#endif
|
||||
}
|
||||
// it is safe to operate tx without lock when not shared
|
||||
uint32_t session_id = tx.sess_id_;
|
||||
tx.reset();
|
||||
ret = init_tx_(tx, session_id);
|
||||
ret = reinit_tx_(tx, tx.sess_id_);
|
||||
}
|
||||
TRANS_LOG(TRACE, "reuse tx", K(ret), K(orig_tx_id), K(tx));
|
||||
ObTransTraceLog &tlog = tx.get_tlog();
|
||||
@ -228,6 +225,12 @@ int ObTransService::reuse_tx(ObTxDesc &tx)
|
||||
return ret;
|
||||
}
|
||||
|
||||
int ObTransService::reinit_tx_(ObTxDesc &tx, const uint32_t session_id)
|
||||
{
|
||||
tx.reset();
|
||||
return init_tx_(tx, session_id);
|
||||
}
|
||||
|
||||
int ObTransService::stop_tx(ObTxDesc &tx)
|
||||
{
|
||||
int ret = OB_SUCCESS;
|
||||
|
@ -431,7 +431,11 @@ int ObTransService::txn_free_route__update_static_state(const uint32_t session_i
|
||||
} else if (tx->tx_id_ != header.tx_id_) {
|
||||
// replace
|
||||
audit_record.replace_tx_ = true;
|
||||
tx_desc_mgr_.remove(*tx);
|
||||
if (!tx->flags_.SHADOW_) {
|
||||
tx_desc_mgr_.remove(*tx);
|
||||
}
|
||||
// reset tx to cleanup for new txn
|
||||
reinit_tx_(*tx, session_id);
|
||||
need_add_tx = true;
|
||||
} else {
|
||||
// update
|
||||
|
Reference in New Issue
Block a user