[master] fix tx free route reject multi-stmt on tmp node

This commit is contained in:
chinaxing 2023-02-13 09:44:49 +00:00 committed by ob-robot
parent 8487f67368
commit 173515e1b4
4 changed files with 11 additions and 7 deletions

View File

@ -464,6 +464,7 @@ int ObMPPacketSender::send_error_packet(int err,
if (OB_FAIL(send_ok_packet(*session, ok_param, &epacket))) {
LOG_WARN("failed to send ok packet", K(ok_param), K(ret));
}
LOG_INFO("dump txn free route audit_record", "value", session->get_txn_free_route_flag());
}
} else { // just a basic ok packet contain nothing
OMPKOK okp;

View File

@ -305,7 +305,14 @@ int ObMPQuery::process()
*/
bool optimization_done = false;
const char *p_normal_start = nullptr;
if (queries.count() > 1
if (queries.count() > 1 && session.is_txn_free_route_temp()) {
need_disconnect = false;
need_response_error = true;
ret = OB_TRANS_FREE_ROUTE_NOT_SUPPORTED;
LOG_WARN("multi stmt is not supported to be executed on txn temporary node", KR(ret),
"tx_free_route_ctx", session.get_txn_free_route_ctx(),
"trans_id", session.get_tx_id(), K(session));
} else if (queries.count() > 1
&& OB_FAIL(try_batched_multi_stmt_optimization(session,
queries,
parse_stat,
@ -322,11 +329,6 @@ int ObMPQuery::process()
need_disconnect = false;
need_response_error = true;
LOG_WARN("explain batch statement failed", K(ret));
} else if (!optimization_done && queries.count() > 1 && session.is_txn_free_route_temp()) {
need_disconnect = false;
need_response_error = true;
ret = OB_TRANS_FREE_ROUTE_NOT_SUPPORTED;
LOG_WARN("multi stmt is not supported to be executed on txn temporary node", KR(ret), K(session));
} else if (!optimization_done) {
ARRAY_FOREACH(queries, i) {
// in multistmt sql, audit_record will record multistmt_start_ts_ when count over 1

View File

@ -1191,6 +1191,7 @@ public:
bool can_txn_free_route() const;
virtual bool is_txn_free_route_temp() const { return tx_desc_ != NULL && txn_free_route_ctx_.is_temp(*tx_desc_); }
transaction::ObTxnFreeRouteCtx &get_txn_free_route_ctx() { return txn_free_route_ctx_; }
uint64_t get_txn_free_route_flag() const { return txn_free_route_ctx_.get_audit_record(); }
void check_txn_free_route_alive();
private:
transaction::ObTxnFreeRouteCtx txn_free_route_ctx_;

View File

@ -94,7 +94,7 @@ struct ObTxnFreeRouteCtx {
bool has_calculated() const { return calculated_; }
void set_calculated() { calculated_ = true; }
void reset_audit_record() { audit_record_.reset(); }
uint64_t get_audit_record() { return audit_record_.v_; }
uint64_t get_audit_record() const { return audit_record_.v_; }
private:
void reset_changed_() {
static_changed_ = false;