mirror of
https://github.com/MariaDB/server.git
synced 2025-07-10 05:18:14 +02:00

Description: ============ To change 'CONSERVATIVE' @@global.slave_parallel_mode default to 'OPTIMISTIC' in 10.5. @sql/sys_vars.cc Changed default parallel_mode to 'OPTIMISTIC' @sql/rpl_filter.cc Changed default parallel_mode to 'OPTIMISTIC' @sql/mysqld.cc Removed the initialization of 'SLAVE_PARALLEL_CONSERVATIVE' to 'opt_slave_parallel_mode' variable. @mysql-test/suite/rpl/t/rpl_parallel_mdev6589.test @mysql-test/suite/rpl/t/rpl_mdev6386.test Added 'mtr' suppression to ignore 'ER_PRIOR_COMMIT_FAILED'. In case of 'OPTIMISTIC' mode if a transaction gets killed during "wait_for_prior_commit" it results in above error "1964". Hence suppression needs to be added for this error. @mysql-test/suite/rpl/t/rpl_parallel_conflicts.test Test has a 'slave.opt' which explicitly sets slave_parallel_mode to 'conservative'. When the test ends this mode conflicts with new default mode. Hence check test case reports an error. The 'slave.opt' is removed and options are set and reset within test. @mysql-test/suite/multi_source/info_logs.result @mysql-test/suite/multi_source/reset_slave.result @mysql-test/suite/multi_source/simple.result Result content mismatch in "show slave status" output. This is expected as new slave_parallel_mode='OPTIMISTIC'. @mysql-test/include/check-testcase.test Updated default 'slave_parallel_mode' to 'optimistic'. Refactored rpl_parallel.test into following test cases. Test case 1: @mysql-test/suite/rpl/t/rpl_parallel_domain.test Test case 2: @mysql-test/suite/rpl/t/rpl_parallel_domain_slave_single_grp.test Test case 3: @mysql-test/suite/rpl/t/rpl_parallel_single_grpcmt.test Test case 4: @mysql-test/suite/rpl/t/rpl_parallel_stop_slave.test Test case 5: @mysql-test/suite/rpl/t/rpl_parallel_slave_bgc_kill.test Test case 6: @mysql-test/suite/rpl/t/rpl_parallel_gco_wait_kill.test Test case 7: @mysql-test/suite/rpl/t/rpl_parallel_free_deferred_event.test Test case 8: @mysql-test/suite/rpl/t/rpl_parallel_missed_error_handling.test Test case 9: @mysql-test/suite/rpl/t/rpl_parallel_innodb_lock_conflict.test Test case 10: @mysql-test/suite/rpl/t/rpl_parallel_gtid_slave_pos_update_fail.test Test case 11: @mysql-test/suite/rpl/t/rpl_parallel_wrong_exec_master_pos.test Test case 12: @mysql-test/suite/rpl/t/rpl_parallel_partial_binlog_trans.test Test case 13: @mysql-test/suite/rpl/t/rpl_parallel_ignore_error_on_rotate.test Test case 14: @mysql-test/suite/rpl/t/rpl_parallel_wrong_binlog_order.test Test case 15: @mysql-test/suite/rpl/t/rpl_parallel_incorrect_relay_pos.test Test case 16: @mysql-test/suite/rpl/t/rpl_parallel_retry_deadlock.test Test case 17: @mysql-test/suite/rpl/t/rpl_parallel_deadlock_corrupt_binlog.test Test case 18: @mysql-test/suite/rpl/t/rpl_parallel_mode.test Test case 19: @mysql-test/suite/rpl/t/rpl_parallel_analyze_table_hang.test Test case 20: @mysql-test/suite/rpl/t/rpl_parallel_record_gtid_wakeup.test Test case 21: @mysql-test/suite/rpl/t/rpl_parallel_stop_on_con_kill.test Test case 22: @mysql-test/suite/rpl/t/rpl_parallel_rollback_assert.test
192 lines
7.9 KiB
Text
192 lines
7.9 KiB
Text
include/master-slave.inc
|
|
[connection master]
|
|
call mtr.add_suppression("Unsafe statement written to the binary log using statement format");
|
|
connection slave;
|
|
call mtr.add_suppression("Unsafe statement written to the binary log using statement format");
|
|
connection master;
|
|
[on master]
|
|
CREATE TABLE t1 (a VARCHAR(100), b INT);
|
|
INSERT INTO t1 VALUES ("zero", 0);
|
|
==== Normal setup ====
|
|
[on slave]
|
|
connection slave;
|
|
include/stop_slave.inc
|
|
# CHANGE MASTER TO MASTER_DELAY = 2*T
|
|
include/start_slave.inc
|
|
# Asserted this: SHOW SLAVE STATUS should return the same delay that we set with CHANGE MASTER
|
|
[on master]
|
|
connection master;
|
|
INSERT INTO t1 VALUES ('normal setup', 1);
|
|
connection master;
|
|
[on slave]
|
|
include/sync_slave_io_with_master.inc
|
|
# sleep 1*T
|
|
# Asserted this: Query 1 should not be executed
|
|
# Asserted this: Status should be 'Waiting until MASTER_DELAY...'
|
|
# sleep 1*T
|
|
# sync with master (with timeout 1*T)
|
|
include/wait_for_slave_param.inc [Relay_Master_Log_File]
|
|
include/wait_for_slave_param.inc [Exec_Master_Log_Pos]
|
|
# Asserted this: Query 1 should be executed
|
|
# Asserted this: Status should be 'Has read all relay log...'
|
|
include/check_slave_is_running.inc
|
|
==== Slave lags "naturally" after master ====
|
|
[on master]
|
|
connection master;
|
|
# CREATE FUNCTION delay_on_slave(time_units INT) RETURNS INT BEGIN IF @@GLOBAL.server_id = 2 THEN RETURN SLEEP(time_units * T); ELSE RETURN 0; END IF; END
|
|
INSERT INTO t1 SELECT delay_on_slave(3), 2;
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave
|
|
INSERT INTO t1 VALUES ('slave is already lagging: this statement should execute immediately', 3);
|
|
INSERT INTO t1 SELECT delay_on_slave(2), 4;
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave
|
|
[on slave]
|
|
include/sync_slave_io_with_master.inc
|
|
# sleep 1*T
|
|
# Asserted this: No query executed
|
|
# Asserted this: Status should be 'Waiting until MASTER_DELAY...'
|
|
# wait for first query to execute
|
|
# sleep 1*T
|
|
# Asserted this: Second query executed
|
|
# Asserted this: Status should be executing third query (i.e., 'User sleep')
|
|
# sleep 2*T
|
|
# Asserted this: Third query executed
|
|
# Asserted this: Status should be 'Has read all relay log...'
|
|
==== Seconds_Behind_Master ====
|
|
# Bring slave to sync.
|
|
include/stop_slave.inc
|
|
CHANGE MASTER TO MASTER_DELAY = 0;
|
|
include/start_slave.inc
|
|
connection master;
|
|
INSERT INTO t1 VALUES ('Syncing slave', 5);
|
|
connection slave;
|
|
include/stop_slave.inc
|
|
# CHANGE MASTER TO MASTER_DELAY = 2*T
|
|
include/start_slave.inc
|
|
connection master;
|
|
INSERT INTO t1 VALUES (delay_on_slave(1), 6);
|
|
Warnings:
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system variable that may have a different value on the slave
|
|
Note 1592 Unsafe statement written to the binary log using statement format since BINLOG_FORMAT = STATEMENT. Statement is unsafe because it uses a system function that may return a different value on the slave
|
|
connection slave;
|
|
# sleep 1*T
|
|
# Asserted this: Seconds_Behind_Master should be between 0 and the 2*T
|
|
# sleep 1*T
|
|
# Asserted this: Seconds_Behind_Master should be at least 2*T
|
|
==== STOP SLAVE / START SLAVE + DML ====
|
|
include/stop_slave.inc
|
|
# CHANGE MASTER TO MASTER_DELAY = 3*T
|
|
include/start_slave.inc
|
|
[on master]
|
|
connection master;
|
|
INSERT INTO t1 VALUES ('stop slave and start slave: DML', 7);
|
|
[on slave]
|
|
connection slave;
|
|
# sleep 1*T
|
|
include/stop_slave.inc
|
|
# Asserted this: STOP SLAVE should finish quickly, not wait for the ongoing sleep to finish
|
|
# Asserted this: SQL thread position should not increase after STOP SLAVE
|
|
# Asserted this: Query should not be executed after STOP SLAVE
|
|
# Asserted this: Status should be '' after STOP SLAVE
|
|
include/start_slave.inc
|
|
# Asserted this: START SLAVE should finish quickly
|
|
connection master;
|
|
[on slave]
|
|
include/sync_slave_io_with_master.inc
|
|
# sleep 1*T
|
|
# Asserted this: Query 7 should not be executed
|
|
# Asserted this: Status should be 'Waiting until MASTER_DELAY...'
|
|
# sleep 1*T
|
|
# sync with master (with timeout 1*T)
|
|
include/wait_for_slave_param.inc [Relay_Master_Log_File]
|
|
include/wait_for_slave_param.inc [Exec_Master_Log_Pos]
|
|
# Asserted this: Query 7 should be executed
|
|
# Asserted this: Status should be 'Has read all relay log...'
|
|
include/check_slave_is_running.inc
|
|
==== STOP SLAVE / START SLAVE + DDL ====
|
|
This verifies BUG#56442
|
|
[on master]
|
|
connection master;
|
|
CREATE TABLE t_check_dml_not_executed_prematurely (a INT);
|
|
include/save_master_pos.inc
|
|
[on slave]
|
|
connection slave;
|
|
# sleep 1*T
|
|
include/stop_slave.inc
|
|
# Asserted this: STOP SLAVE should finish quickly, not wait for the ongoing sleep to finish
|
|
# Asserted this: SQL thread position should not increase after STOP SLAVE
|
|
# Asserted this: Query should not be executed after STOP SLAVE
|
|
# Asserted this: Status should be '' after STOP SLAVE
|
|
include/start_slave.inc
|
|
# Asserted this: START SLAVE should finish quickly
|
|
# sleep 1*T
|
|
# Asserted this: DDL Query should not be executed after START SLAVE
|
|
# Asserted this: Status should be 'Waiting until MASTER_DELAY...'
|
|
# sleep 1*T
|
|
# sync with master (with timeout 1*T)
|
|
include/wait_for_slave_param.inc [Relay_Master_Log_File]
|
|
include/wait_for_slave_param.inc [Exec_Master_Log_Pos]
|
|
# Asserted this: DDL Query should be executed
|
|
# Asserted this: Status should be 'Has read all relay log...'
|
|
include/check_slave_is_running.inc
|
|
==== Change back to no delay ====
|
|
[on slave]
|
|
connection slave;
|
|
include/stop_slave.inc
|
|
CHANGE MASTER TO MASTER_DELAY = 0;
|
|
# Asserted this: Delay should be 0 when we set it to 0
|
|
include/start_slave.inc
|
|
[on master]
|
|
connection master;
|
|
INSERT INTO t1 VALUES ('change back to no delay', 8);
|
|
[on slave]
|
|
include/sync_slave_io_with_master.inc
|
|
# sleep 1*T
|
|
# Asserted this: Query should be executed
|
|
# Asserted this: Status should be 'Slave has read all relay log...'
|
|
==== Reset delay with RESET SLAVE ====
|
|
include/stop_slave.inc
|
|
CHANGE MASTER TO MASTER_DELAY = 71;
|
|
include/start_slave.inc
|
|
# Asserted this: Delay should be 71 when we set it to 71
|
|
include/stop_slave.inc
|
|
RESET SLAVE;
|
|
[on master]
|
|
connection master;
|
|
RESET MASTER;
|
|
[on slave]
|
|
connection slave;
|
|
include/start_slave.inc
|
|
# Asserted this: Delay should be 0 after RESET SLAVE
|
|
==== Set an invalid value for the delay ====
|
|
include/stop_slave.inc
|
|
# Expect error for setting negative delay
|
|
CHANGE MASTER TO MASTER_DELAY = -1;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near '-1' at line 1
|
|
# Expect that it's ok to set delay of 2^31-1
|
|
CHANGE MASTER TO MASTER_DELAY = 2147483647;
|
|
# Expect error for setting delay between 2^31 and 2^32-1
|
|
CHANGE MASTER TO MASTER_DELAY = 2147483648;
|
|
ERROR HY000: The requested value 2147483648 for the master delay exceeds the maximum 2147483647
|
|
# Expect error for setting delay to nonsense
|
|
CHANGE MASTER TO MASTER_DELAY = blah;
|
|
ERROR 42000: You have an error in your SQL syntax; check the manual that corresponds to your MariaDB server version for the right syntax to use near 'blah' at line 1
|
|
CHANGE MASTER TO MASTER_DELAY = 0;
|
|
include/start_slave.inc
|
|
==== Clean up ====
|
|
[on master]
|
|
connection master;
|
|
DROP TABLE t1, t_check_dml_not_executed_prematurely;
|
|
DROP FUNCTION delay_on_slave;
|
|
[on slave]
|
|
connection slave;
|
|
SELECT @@GLOBAL.slave_parallel_mode;
|
|
@@GLOBAL.slave_parallel_mode
|
|
optimistic
|
|
SELECT @@GLOBAL.slave_parallel_threads;
|
|
@@GLOBAL.slave_parallel_threads
|
|
0
|
|
include/rpl_end.inc
|