[master] fix multi-stmt txn-free-route

This commit is contained in:
chinaxing
2023-02-20 06:41:21 +00:00
committed by ob-robot
parent ca1fd8c5c3
commit a84ff5f257
3 changed files with 20 additions and 6 deletions

View File

@ -336,6 +336,9 @@ int ObMPQuery::process()
if (i > 0) { if (i > 0) {
session.get_raw_audit_record().exec_timestamp_.multistmt_start_ts_ session.get_raw_audit_record().exec_timestamp_.multistmt_start_ts_
= ObTimeUtility::current_time(); = ObTimeUtility::current_time();
// before handle multi-stmt's followers, re-calc the txn_free_route's baseline
// in order to capture accurate state changed by current stmt
session.prep_txn_free_route_baseline();
} }
need_disconnect = true; need_disconnect = true;
//FIXME qianfu NG_TRACE_EXT(set_disconnect, OB_ID(disconnect), true, OB_ID(pos), "multi stmt begin"); //FIXME qianfu NG_TRACE_EXT(set_disconnect, OB_ID(disconnect), true, OB_ID(pos), "multi stmt begin");

View File

@ -2437,16 +2437,26 @@ int ObSQLSessionInfo::on_user_disconnect()
return ret; return ret;
} }
void ObSQLSessionInfo::post_sync_session_info() // prepare baseline for the following `calc_txn_free_route` to get the diff
void ObSQLSessionInfo::prep_txn_free_route_baseline(bool reset_audit)
{ {
if (!get_is_in_retry()) {
#define RESET_TXN_STATE_ENCODER_CHANGED_(x) txn_##x##_info_encoder_.is_changed_ = false #define RESET_TXN_STATE_ENCODER_CHANGED_(x) txn_##x##_info_encoder_.is_changed_ = false
#define RESET_TXN_STATE_ENCODER_CHANGED(x) RESET_TXN_STATE_ENCODER_CHANGED_(x) #define RESET_TXN_STATE_ENCODER_CHANGED(x) RESET_TXN_STATE_ENCODER_CHANGED_(x)
LST_DO(RESET_TXN_STATE_ENCODER_CHANGED, (;), static, dynamic, participants, extra); LST_DO(RESET_TXN_STATE_ENCODER_CHANGED, (;), static, dynamic, participants, extra);
#undef RESET_TXN_STATE_ENCODER_CHANGED #undef RESET_TXN_STATE_ENCODER_CHANGED
#undef RESET_TXN_STATE_ENCODER_CHANGED_ #undef RESET_TXN_STATE_ENCODER_CHANGED_
if (reset_audit) {
txn_free_route_ctx_.reset_audit_record();
}
txn_free_route_ctx_.init_before_handle_request(tx_desc_); txn_free_route_ctx_.init_before_handle_request(tx_desc_);
} }
void ObSQLSessionInfo::post_sync_session_info()
{
if (!get_is_in_retry()) {
// preapre baseline for the following executing stmt/cmd
prep_txn_free_route_baseline(false);
}
} }
void ObSQLSessionInfo::set_txn_free_route(bool txn_free_route) void ObSQLSessionInfo::set_txn_free_route(bool txn_free_route)

View File

@ -1186,6 +1186,7 @@ private:
ObTxnExtraInfoEncoder txn_extra_info_encoder_; ObTxnExtraInfoEncoder txn_extra_info_encoder_;
public: public:
void post_sync_session_info(); void post_sync_session_info();
void prep_txn_free_route_baseline(bool reset_audit = true);
void set_txn_free_route(bool txn_free_route); void set_txn_free_route(bool txn_free_route);
int calc_txn_free_route(); int calc_txn_free_route();
bool can_txn_free_route() const; bool can_txn_free_route() const;