mirror of
https://github.com/MariaDB/server.git
synced 2025-07-07 11:58:20 +02:00

--debug is supported by allmost all our other binaries and we should keep it also in the server to keep option names similar.
345 lines
10 KiB
Text
345 lines
10 KiB
Text
include/master-slave.inc
|
|
[connection master]
|
|
CALL mtr.add_suppression("Failed to start semi-sync ACK receiver thread.*");
|
|
CALL mtr.add_suppression("Failed to register slave to semi-sync ACK receiver thread.*");
|
|
CALL mtr.add_suppression("Failed to stop ack receiver thread on pthread_join.*");
|
|
CALL mtr.add_suppression("Got an error reading communication packets:*");
|
|
CALL mtr.add_suppression("Timeout waiting for reply of binlog*");
|
|
CALL mtr.add_suppression("slave_read_sync_header*");
|
|
CALL mtr.add_suppression("Missing magic number for semi-sync*");
|
|
CALL mtr.add_suppression("Got timeout reading communication packets*");
|
|
CALL mtr.add_suppression("Failed to call*");
|
|
CALL mtr.add_suppression("Execution failed on master*");
|
|
CALL mtr.add_suppression("Failed on request_dump()*");
|
|
CALL mtr.add_suppression("Semi-sync master failed on*");
|
|
CALL mtr.add_suppression("Master command COM_BINLOG_DUMP failed*");
|
|
CALL mtr.add_suppression("on master failed*");
|
|
CALL mtr.add_suppression("Master server does not support semi-sync*");
|
|
CALL mtr.add_suppression("Semi-sync slave net_flush*");
|
|
CALL mtr.add_suppression("Failed to flush master info*");
|
|
CALL mtr.add_suppression("Request to stop slave SQL Thread received while apply*");
|
|
connection master;
|
|
[ enable semi-sync on master ]
|
|
set global rpl_semi_sync_master_enabled = 1;
|
|
show variables like 'rpl_semi_sync_master_enabled';
|
|
Variable_name Value
|
|
rpl_semi_sync_master_enabled ON
|
|
connection slave;
|
|
[ enable semi-sync on slave ]
|
|
stop slave;
|
|
set global rpl_semi_sync_slave_enabled = 1;
|
|
start slave;
|
|
show status like 'rpl_semi_sync_slave%';
|
|
Variable_name Value
|
|
Rpl_semi_sync_slave_send_ack 0
|
|
Rpl_semi_sync_slave_status ON
|
|
connection master;
|
|
CREATE TABLE t1(a INT) ENGINE=InnoDB;
|
|
connection slave;
|
|
connection master;
|
|
connect con1,localhost,root,,;
|
|
connect con2,localhost,root,,;
|
|
connect con3,localhost,root,,;
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
show status like "rpl_semi_sync_master_yes_tx";
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_yes_tx 1
|
|
#########################################
|
|
# Test rpl_semi_sync_master_wait_point #
|
|
#########################################
|
|
# Test after_sync and after_commit first.
|
|
#Test after_sync
|
|
connection con1;
|
|
SET GLOBAL rpl_semi_sync_master_timeout = 1000000;
|
|
SET GLOBAL rpl_semi_sync_master_wait_point= 'AFTER_SYNC';
|
|
SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL after_sync_done WAIT_FOR end";
|
|
INSERT into t1 values (1);;
|
|
connection con2;
|
|
SET DEBUG_SYNC= "now WAIT_FOR after_sync_done";
|
|
connection slave;
|
|
#slave can see record (1) after sync slave with master
|
|
select * from t1;
|
|
a
|
|
1
|
|
connection con2;
|
|
#con2 shouldn't see record (1)
|
|
select * from t1;
|
|
a
|
|
SET DEBUG_SYNC= "now SIGNAL end";
|
|
connection con1;
|
|
connection con1;
|
|
select * from t1;
|
|
a
|
|
1
|
|
truncate table t1;
|
|
connection slave;
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'reset';
|
|
SET DEBUG_SYNC= "commit_before_get_LOCK_log SIGNAL before_fetch_done WAIT_FOR more_queue";
|
|
INSERT into t1 VALUES (1);;
|
|
connection con2;
|
|
SET DEBUG_SYNC= "now WAIT_FOR before_fetch_done";
|
|
SET DEBUG_SYNC= "after_semisync_queue SIGNAL more_queue";
|
|
INSERT INTO t1 VALUES (2);
|
|
connection con1;
|
|
connection con1;
|
|
SET DEBUG_SYNC= 'reset';
|
|
SET DEBUG_SYNC= "commit_before_get_LOCK_log SIGNAL before_fetch_done WAIT_FOR disable_semisync";
|
|
INSERT into t1 VALUES (3);;
|
|
connection con2;
|
|
SET DEBUG_SYNC= "now WAIT_FOR before_fetch_done";
|
|
SET GLOBAL rpl_semi_sync_master_enabled= 0;
|
|
SET DEBUG_SYNC= "now SIGNAL disable_semisync";
|
|
connection con1;
|
|
SET GLOBAL rpl_semi_sync_master_enabled = 1;
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
#Test after_commit
|
|
connection con1;
|
|
SET GLOBAL rpl_semi_sync_master_wait_point= 'AFTER_COMMIT';
|
|
SET DEBUG_SYNC= "after_group_after_commit SIGNAL after_commit_done WAIT_FOR end";
|
|
INSERT into t1 values (4);;
|
|
connection con2;
|
|
SET DEBUG_SYNC= "now WAIT_FOR after_commit_done";
|
|
connection slave;
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
connection con2;
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
SET DEBUG_SYNC= "now SIGNAL end";
|
|
connection con1;
|
|
connection con1;
|
|
select * from t1;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
4
|
|
truncate table t1;
|
|
#######################################################
|
|
# Test some other options in order to cover the patch #
|
|
#######################################################
|
|
connection slave;
|
|
# Test rpl_semi_sync_slave_trace_level
|
|
SET GLOBAL rpl_semi_sync_slave_trace_level= 1;
|
|
SET GLOBAL rpl_semi_sync_slave_trace_level= 16;
|
|
SET GLOBAL rpl_semi_sync_slave_trace_level= 64;
|
|
SET GLOBAL rpl_semi_sync_slave_trace_level= 128;
|
|
SET GLOBAL rpl_semi_sync_slave_trace_level= 32;
|
|
connection master;
|
|
# Test rpl_semi_sync_master_trace_level
|
|
SET GLOBAL rpl_semi_sync_master_trace_level= 1;
|
|
SET GLOBAL rpl_semi_sync_master_trace_level= 16;
|
|
SET GLOBAL rpl_semi_sync_master_trace_level= 64;
|
|
SET GLOBAL rpl_semi_sync_master_trace_level= 128;
|
|
SET GLOBAL rpl_semi_sync_master_trace_level= 32;
|
|
# Test rpl_semi_sync_master_timeout
|
|
SET GLOBAL rpl_semi_sync_master_timeout= 1000;
|
|
SET GLOBAL rpl_semi_sync_master_timeout= 10000;
|
|
SET GLOBAL rpl_semi_sync_master_timeout = 1000000;
|
|
# Test rpl_semi_sync_slave_kill_conn_timeout
|
|
SET GLOBAL rpl_semi_sync_slave_kill_conn_timeout= 10;
|
|
SET GLOBAL rpl_semi_sync_slave_kill_conn_timeout= 20;
|
|
SET GLOBAL rpl_semi_sync_slave_kill_conn_timeout= 60;
|
|
SET GLOBAL rpl_semi_sync_slave_kill_conn_timeout= 5;
|
|
############################################
|
|
# Test rpl_semi_sync_master_wait_no_slave #
|
|
############################################
|
|
SET GLOBAL rpl_semi_sync_master_wait_no_slave = 1;
|
|
connection slave;
|
|
STOP SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_stop.inc
|
|
connection con1;
|
|
SET GLOBAL rpl_semi_sync_master_timeout = 1000;
|
|
INSERT INTO t1 values (1);;
|
|
connection con1;
|
|
# Rpl_semi_sync_master_no_tx should be non-zero
|
|
SHOW STATUS LIKE 'Rpl_semi_sync_master_no_tx'
|
|
connection slave;
|
|
START SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_start.inc
|
|
connection con1;
|
|
INSERT INTO t1 values (2);
|
|
connection slave;
|
|
connection con1;
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
connection slave;
|
|
STOP SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_stop.inc
|
|
connection con1;
|
|
SET GLOBAL rpl_semi_sync_master_wait_no_slave= 0;
|
|
SET GLOBAL rpl_semi_sync_master_timeout= 1000000000;
|
|
INSERT INTO t1 values (3);
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 0
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status OFF
|
|
connection slave;
|
|
START SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_start.inc
|
|
connection con1;
|
|
SET GLOBAL rpl_semi_sync_master_timeout= 10000000;
|
|
SET GLOBAL rpl_semi_sync_master_wait_no_slave= 1;
|
|
INSERT INTO t1 values (4);
|
|
connection slave;
|
|
connection con1;
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
##########################################
|
|
# Test rpl_semi_sync_slave_delay_master #
|
|
##########################################
|
|
connection slave;
|
|
SET GLOBAL rpl_semi_sync_slave_delay_master= 1;
|
|
START SLAVE IO_THREAD;
|
|
Warnings:
|
|
Note 1254 Slave is already running
|
|
include/wait_for_slave_io_to_start.inc
|
|
connection con1;
|
|
INSERT INTO t1 values (3);
|
|
include/sync_slave_io_with_master.inc
|
|
connection con1;
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
show status like 'Rpl_semi_sync_master_status';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_status ON
|
|
connection slave;
|
|
connection slave;
|
|
select * from t1 order by a;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
3
|
|
4
|
|
connection con1;
|
|
select * from t1 order by a;
|
|
a
|
|
1
|
|
2
|
|
3
|
|
3
|
|
4
|
|
connection slave;
|
|
SET GLOBAL rpl_semi_sync_slave_delay_master = 0;
|
|
STOP SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_stop.inc
|
|
START SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_start.inc
|
|
##########################################################
|
|
# Test rpl_semi_sync_master_enabled and new ACK thread #
|
|
#########################################################
|
|
connection con1;
|
|
SET GLOBAL rpl_semi_sync_master_enabled = 0;
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
INSERT INTO t1 VALUES (1);
|
|
SET GLOBAL rpl_semi_sync_master_enabled = 1;
|
|
INSERT INTO t1 VALUES (2);
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 1
|
|
# Test failure of select error .
|
|
SET GLOBAL debug = 'd,rpl_semisync_simulate_select_error';
|
|
INSERT INTO t1 VALUES(3);
|
|
connection slave;
|
|
connection con1;
|
|
# Test failure of pthread_create
|
|
SET GLOBAL rpl_semi_sync_master_enabled = 0;
|
|
SET GLOBAL debug = 'd,rpl_semisync_simulate_create_thread_failure';
|
|
SET GLOBAL rpl_semi_sync_master_enabled= ON;
|
|
# Test failure of pthread_join
|
|
SET GLOBAL rpl_semi_sync_master_enabled= OFF;
|
|
#
|
|
# Failure on registering semisync slave
|
|
#
|
|
SET GLOBAL debug= 'd,rpl_semisync_simulate_add_slave_failure';
|
|
SET GLOBAL rpl_semi_sync_master_enabled= ON;
|
|
connection slave;
|
|
STOP SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_stop.inc
|
|
START SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_start.inc
|
|
connection con1;
|
|
SET GLOBAL debug='';
|
|
connection slave;
|
|
START SLAVE IO_THREAD;
|
|
include/wait_for_slave_io_to_start.inc
|
|
connection con1;
|
|
connection slave;
|
|
show status like 'Rpl_semi_sync_master_clients';
|
|
Variable_name Value
|
|
Rpl_semi_sync_master_clients 0
|
|
##################################################################
|
|
# Test fixing of BUG#70669 #
|
|
#SLAVE CAN'T CONTINUE REPLICATION AFTER MASTER'S CRASH RECOVERY #
|
|
#################################################################
|
|
connection con1;
|
|
SET GLOBAL sync_binlog = 1;
|
|
CREATE TABLE t2 (c1 INT);
|
|
connection slave;
|
|
connection con1;
|
|
INSERT INTO t2 values (1);
|
|
connection slave;
|
|
connection con2;
|
|
connection con1;
|
|
connection slave;
|
|
show tables like 't2';
|
|
Tables_in_test (t2)
|
|
t2
|
|
select * from t2;
|
|
c1
|
|
1
|
|
connection con1;
|
|
INSERT INTO t2 VALUES (2);
|
|
connection con2;
|
|
INSERT INTO t2 VALUES (3);
|
|
connection con1;
|
|
connection con2;
|
|
connection con1;
|
|
SET GLOBAL sync_binlog = 0;
|
|
DROP TABLE t2;
|
|
connection con2;
|
|
connection slave;
|
|
show tables like 't2';
|
|
Tables_in_test (t2)
|
|
connection con2;
|
|
#cleanup
|
|
connection master;
|
|
SET DEBUG_SYNC= 'reset';
|
|
disconnect con1;
|
|
disconnect con2;
|
|
disconnect con3;
|
|
SET GLOBAL rpl_semi_sync_master_timeout= 10000;
|
|
SET GLOBAL rpl_semi_sync_master_enabled = 0;
|
|
DROP TABLE t1;
|
|
connection slave;
|
|
SET GLOBAL rpl_semi_sync_slave_enabled = 0;
|
|
stop slave;
|
|
start slave;
|
|
include/rpl_end.inc
|