mirror of
https://github.com/MariaDB/server.git
synced 2025-09-11 05:52:26 +03:00
Under ps-protocol, commandsl like COM_STMT_FETCH, COM_STMT_CLOSE and COM_STMT_SEND_LONG_DATA are not supposed to return errors. Therefore, if a transaction is BF aborted and the client is processing one of those commands, then we should not return a deadlock error immediately. Instead wait for the a subsequent client interaction which permits errors to be returned. To handle this, wsrep_before_command() now accepts parameter keep_command_error. If set true, keep_command_error will cause wsrep-lib side to skip result handling, and to keep the current error for the next interaction with the client. Reviewed-by: Jan Lindström <jan.lindstrom@mariadb.com>
35 lines
1.0 KiB
Plaintext
35 lines
1.0 KiB
Plaintext
#
|
|
# MDEV-24255
|
|
# Test BF abort of a transaction that has ps-protocol enabled
|
|
#
|
|
|
|
--source include/galera_cluster.inc
|
|
|
|
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY, f2 CHAR(6)) ENGINE=InnoDB;
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
|
|
--connection node_2
|
|
--let $wsrep_local_bf_aborts_before = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
|
|
|
|
START TRANSACTION;
|
|
INSERT INTO t1 VALUES (1,'node_2');
|
|
|
|
--connection node_1
|
|
INSERT INTO t1 VALUES (1,'node_1');
|
|
|
|
--connection node_2a
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM t1 WHERE f2 = 'node_1'
|
|
--source include/wait_condition.inc
|
|
|
|
--connection node_2
|
|
--error ER_LOCK_DEADLOCK
|
|
INSERT INTO t1 VALUES (2, 'node_2');
|
|
|
|
--let $wsrep_local_bf_aborts_after = `SELECT VARIABLE_VALUE FROM INFORMATION_SCHEMA.GLOBAL_STATUS WHERE VARIABLE_NAME = 'wsrep_local_bf_aborts'`
|
|
|
|
--disable_query_log
|
|
--eval SELECT $wsrep_local_bf_aborts_after - $wsrep_local_bf_aborts_before = 1 AS wsrep_local_aborts_increment;
|
|
--enable_query_log
|
|
|
|
DROP TABLE t1;
|