[xa][4.x] acquire data lock before set tx desc in session for xa
This commit is contained in:
@ -90,6 +90,7 @@ int ObTMService::tm_rm_start(ObExecContext &exec_ctx,
|
||||
// step 2, promote or start trans in current session
|
||||
if (OB_SUCCESS != ret) {
|
||||
} else {
|
||||
ObSQLSessionInfo::LockGuard data_lock_guard(my_session->get_thread_data_lock());
|
||||
const int64_t timeout_seconds = my_session->get_xa_end_timeout_seconds();
|
||||
//if (need_start || need_promote) {
|
||||
// if (OB_FAIL(ObXAService::generate_xid(xid))) {
|
||||
@ -160,6 +161,7 @@ int ObTMService::tm_commit(ObExecContext &exec_ctx,
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpected param", K(ret), KP(xa_service), KP(my_session), KP(tx_desc));
|
||||
} else {
|
||||
ObSQLSessionInfo::LockGuard data_lock_guard(my_session->get_thread_data_lock());
|
||||
tx_id = tx_desc->tid();
|
||||
if (OB_FAIL(xa_service->commit_for_dblink_trans(tx_desc))) {
|
||||
LOG_WARN("fail to commit for dblink trans", K(ret));
|
||||
@ -193,6 +195,7 @@ int ObTMService::tm_rollback(ObExecContext &exec_ctx,
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpected param", K(ret), KP(xa_service), KP(my_session), KP(tx_desc));
|
||||
} else {
|
||||
ObSQLSessionInfo::LockGuard data_lock_guard(my_session->get_thread_data_lock());
|
||||
tx_id = tx_desc->tid();
|
||||
if (OB_FAIL(xa_service->rollback_for_dblink_trans(tx_desc))) {
|
||||
LOG_WARN("fail to rollback for dblink trans", K(ret));
|
||||
@ -227,6 +230,7 @@ int ObTMService::recover_tx_for_callback(const ObTransID &tx_id,
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpected session", K(ret), K(tx_id), K(tx_desc->tid()));
|
||||
} else {
|
||||
ObSQLSessionInfo::LockGuard data_lock_guard(my_session->get_thread_data_lock());
|
||||
if (OB_FAIL(xa_service->recover_tx_for_dblink_callback(tx_id, tx_desc))) {
|
||||
LOG_WARN("fail to recover tx for dblink callback", K(ret), K(tx_id));
|
||||
} else if (NULL == tx_desc || tx_desc->get_xid().empty()) {
|
||||
@ -254,6 +258,7 @@ int ObTMService::revert_tx_for_callback(ObExecContext &exec_ctx)
|
||||
ret = OB_ERR_UNEXPECTED;
|
||||
LOG_WARN("unexpected session", K(ret), K(tx_desc->tid()));
|
||||
} else {
|
||||
ObSQLSessionInfo::LockGuard data_lock_guard(my_session->get_thread_data_lock());
|
||||
tx_id = tx_desc->tid();
|
||||
if (OB_FAIL(xa_service->revert_tx_for_dblink_callback(tx_desc))) {
|
||||
LOG_WARN("fail to recover tx for dblink callback", K(ret), K(tx_id));
|
||||
|
||||
Reference in New Issue
Block a user