diff --git a/src/sql/session/ob_basic_session_info.cpp b/src/sql/session/ob_basic_session_info.cpp index b0a580cc7d62a8f9e9a5f056dd9a0e2aa45cfa24..6b7a97f7369326b362e19180296d204120f63956 100644 --- a/src/sql/session/ob_basic_session_info.cpp +++ b/src/sql/session/ob_basic_session_info.cpp @@ -4633,5 +4633,14 @@ int ObExecEnv::store(ObBasicSessionInfo& session) return ret; } +bool ObBasicSessionInfo::is_xa_trans() +{ + int bool_ret = false; + if (trans_desc_.is_valid() && trans_desc_.is_xa_local_trans()) { + bool_ret = true; + } + return bool_ret; +} + } // end of namespace sql } // end of namespace oceanbase diff --git a/src/sql/session/ob_basic_session_info.h b/src/sql/session/ob_basic_session_info.h index 0943fee0b2ac7e7bfb4ea4bc713d886809bdc8fc..bb8897a4f0842d71ecf34e199645745fa2a1f86c 100644 --- a/src/sql/session/ob_basic_session_info.h +++ b/src/sql/session/ob_basic_session_info.h @@ -1371,6 +1371,7 @@ public: { return trans_desc_.get_standalone_stmt_desc().is_valid(); } + bool is_xa_trans(); bool is_server_status_in_transaction() const; diff --git a/src/sql/session/ob_sql_session_mgr.cpp b/src/sql/session/ob_sql_session_mgr.cpp index 0b258bab40c8c27842a9b427f8156ab761664fd4..7f0056eadc4563cfc172908ca209f240df651883 100644 --- a/src/sql/session/ob_sql_session_mgr.cpp +++ b/src/sql/session/ob_sql_session_mgr.cpp @@ -637,7 +637,7 @@ bool ObSQLSessionMgr::CheckSessionFunctor::operator()(sql::ObSQLSessionMgr::Key // kill transaction which is idle more than configuration 'ob_trx_idle_timeout' if (OB_FAIL(sess_info->is_trx_idle_timeout(is_timeout))) { LOG_WARN("fail to check transaction idle timeout", K(ret)); - } else if (true == is_timeout) { + } else if (true == is_timeout && !sess_info->is_xa_trans()) { LOG_INFO("transaction is idle timeout, start to rollback", K(key.version_), K(key.sessid_)); int tmp_ret; if (OB_SUCCESS != (tmp_ret = sess_mgr_->kill_active_trx(sess_info))) {