mirror of
https://github.com/MariaDB/server.git
synced 2025-07-12 22:38:14 +02:00

Problem was that total order isolation (TOI) is started before we know sequence implementing storage engine. This led to situation where table implementing persistent storate for sequence in case of MyISAM was created on applier causing errors later in test execution. Therefore, in both CREATE SEQUENCE and ALTER TABLE to implementing persistent storage we need to check implementing storage engine after open_tables and this check must be done in both master and applier, because if implementing storage engine is MyISAM it does not support rollback. Added tests to make sure that if sequence implementing storage engine is MyISAM or we try to alter it to MyISAM user gets error and changes are not replicated. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
86 lines
2.3 KiB
Text
86 lines
2.3 KiB
Text
--source include/galera_cluster.inc
|
|
--source include/big_test.inc
|
|
--source include/have_debug_sync.inc
|
|
|
|
#
|
|
# To have real concurrent CTAS this test uses DEBUG_SYNC
|
|
#
|
|
|
|
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
|
--connect node_1b, 127.0.0.1, root, , test, $NODE_MYPORT_1
|
|
--connect node_2a, 127.0.0.1, root, , test, $NODE_MYPORT_2
|
|
|
|
--connection node_1
|
|
#
|
|
# Send CTAS it will block before open_tables call
|
|
#
|
|
SET DEBUG_SYNC = 'wsrep_create_table_as_select WAIT_FOR continue';
|
|
--send CREATE table t1 as SELECT SLEEP(0.1);
|
|
|
|
--connection node_1a
|
|
#
|
|
# Wait for CTAS to block
|
|
#
|
|
--echo # Wait until CTAS is on debug sync point
|
|
--let $wait_condition = SELECT COUNT(*) = 1 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'debug sync point: wsrep_create_table_as_select'
|
|
--source include/wait_condition.inc
|
|
|
|
--connection node_1b
|
|
#
|
|
# Block node_1 applier
|
|
#
|
|
SET SESSION wsrep_sync_wait = 0;
|
|
SET GLOBAL debug_dbug = '+d,sync.wsrep_apply_cb';
|
|
|
|
#
|
|
# Send concurrent CTAS it will block on applier
|
|
#
|
|
--connection node_2
|
|
--send CREATE table t1 as SELECT SLEEP(0.2);
|
|
|
|
#
|
|
# Wait until second CTAS is blocked
|
|
#
|
|
--connection node_1b
|
|
SET SESSION debug_sync = 'now WAIT_FOR sync.wsrep_apply_cb_reached';
|
|
|
|
--echo # Signal first CTAS to continue and wait until CTAS has executed
|
|
SET DEBUG_SYNC= 'now SIGNAL continue';
|
|
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'Creating table CREATE table t1 as SELECT SLEEP(0.1)'
|
|
--source include/wait_condition.inc
|
|
#
|
|
# Release second CTAS and cleanup
|
|
#
|
|
SET GLOBAL debug_dbug= '';
|
|
SET DEBUG_SYNC = 'now SIGNAL signal.wsrep_apply_cb';
|
|
#
|
|
# Wait until second CTAS continues
|
|
#
|
|
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE LIKE 'debug sync point: now%'
|
|
--source include/wait_condition.inc
|
|
#
|
|
# Wait until second CTAS finishes
|
|
#
|
|
--connection node_2a
|
|
--let $wait_condition = SELECT COUNT(*) = 0 FROM INFORMATION_SCHEMA.PROCESSLIST WHERE STATE = 'Creating table CREATE table t1 as SELECT SLEEP(0.2)'
|
|
--source include/wait_condition.inc
|
|
#
|
|
# Cleanup
|
|
#
|
|
--connection node_1b
|
|
SET DEBUG_SYNC= 'RESET';
|
|
#
|
|
# Verify that at least one is successful
|
|
#
|
|
--connection node_2
|
|
--reap
|
|
|
|
--connection node_1
|
|
--error 0,ER_TABLE_EXISTS_ERROR,ER_QUERY_INTERRUPTED
|
|
--reap
|
|
DROP TABLE t1;
|
|
|
|
|
|
--source include/galera_end.inc
|
|
--echo # End of test
|
|
|