Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
MDEV-13073. This is a part with a new test (refined Ali's
one) and affected result files. Specifically to rpl_semi_sync_after_sync*, the changed results reflect a fact that thanks to fixes in the dump thread functionality there's no longer zombie thread to kill neither such thread represent a semisync client (so the counter drops).
- Loading branch information
Showing
8 changed files
with
804 additions
and
8 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
367 changes: 367 additions & 0 deletions
367
mysql-test/suite/rpl/r/perf_buildin_semisync_issue40.result
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,367 @@ | ||
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("slaveReadSyncHeader*"); | ||
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'; | ||
Warnings: | ||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead | ||
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'; | ||
Warnings: | ||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead | ||
SET GLOBAL rpl_semi_sync_master_enabled= ON; | ||
SHOW VARIABLES LIKE 'rpl_semi_sync_master_enabled'; | ||
Variable_name Value | ||
rpl_semi_sync_master_enabled OFF | ||
# Test failure of pthread_join | ||
SET GLOBAL DEBUG = 'd,rpl_semisync_simulate_thread_join_failure'; | ||
Warnings: | ||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead | ||
SET GLOBAL rpl_semi_sync_master_enabled= ON; | ||
SET GLOBAL rpl_semi_sync_master_enabled= OFF; | ||
# | ||
# Failure on registering semisync slave | ||
# | ||
SET GLOBAL debug= 'd,rpl_semisync_simulate_add_slave_failure'; | ||
Warnings: | ||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead | ||
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; | ||
# Should be Zero. | ||
show status like 'Rpl_semi_sync_master_clients'; | ||
Variable_name Value | ||
Rpl_semi_sync_master_clients 0 | ||
SET GLOBAL debug=''; | ||
Warnings: | ||
Warning 1287 '@@debug' is deprecated and will be removed in a future release. Please use '@@debug_dbug' instead | ||
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; | ||
SELECT * FROM t2; | ||
c1 | ||
1 | ||
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 |
Oops, something went wrong.