[master] fix tx free route reject multi-stmt on tmp node
This commit is contained in:
parent
8487f67368
commit
173515e1b4
@ -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;
|
||||
|
@ -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
|
||||
|
@ -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_;
|
||||
|
@ -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;
|
||||
|
Loading…
x
Reference in New Issue
Block a user