mirror of
				https://github.com/MariaDB/server.git
				synced 2025-10-31 19:06:14 +01:00 
			
		
		
		
	
		
			
				
	
	
		
			87 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
			
		
		
	
	
			87 lines
		
	
	
	
		
			2.7 KiB
		
	
	
	
		
			Text
		
	
	
	
	
	
| # ==== Purpose ====
 | |
| #
 | |
| # Test verifies truncation of multiple binary logs.
 | |
| #
 | |
| # ==== References ====
 | |
| # MDEV-21117: recovery for --rpl-semi-sync-slave-enabled server
 | |
| 
 | |
| --source include/have_innodb.inc
 | |
| --source include/have_debug_sync.inc
 | |
| --source include/have_binlog_format_row.inc
 | |
| 
 | |
| call mtr.add_suppression("Can.t init tc log");
 | |
| call mtr.add_suppression("Aborting");
 | |
| 
 | |
| SET @@global.max_binlog_size= 4096;
 | |
| SET @@global.sync_binlog= 1;
 | |
| RESET MASTER;
 | |
| FLUSH LOGS;
 | |
| CREATE TABLE ti (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=Innodb;
 | |
| CREATE TABLE tm (a INT PRIMARY KEY, b MEDIUMTEXT) ENGINE=MyISAM;
 | |
| 
 | |
| connect(master1,localhost,root,,);
 | |
| --echo "List of binary logs before rotation"
 | |
| --source include/show_binary_logs.inc
 | |
| 
 | |
| # Some load to either non- and transactional engines
 | |
| # that should not affect the following recovery:
 | |
| INSERT INTO ti VALUES(1,"I am gonna survive");
 | |
| INSERT INTO tm VALUES(1,"me too!");
 | |
| 
 | |
| # hold on near engine commit
 | |
| SET DEBUG_SYNC= "commit_after_release_LOCK_after_binlog_sync SIGNAL master1_ready WAIT_FOR master1_go_never_arrives";
 | |
| --send INSERT INTO ti VALUES (2, REPEAT("x", 4100))
 | |
| 
 | |
| connect(master2,localhost,root,,);
 | |
| # The 2nd trx for recovery, it does not rotate binlog
 | |
| SET DEBUG_SYNC= "now WAIT_FOR master1_ready";
 | |
| SET DEBUG_SYNC= "commit_before_get_LOCK_commit_ordered SIGNAL master2_ready WAIT_FOR master2_go_never_arrives";
 | |
| --send INSERT INTO ti VALUES (3, "not gonna survive")
 | |
| 
 | |
| --connection default
 | |
| SET DEBUG_SYNC= "now WAIT_FOR master2_ready";
 | |
| 
 | |
| connect(master3,localhost,root,,);
 | |
| # The 3nd trx for recovery, it won't get into binlog nor therefore recover
 | |
| SET DEBUG_SYNC= "ha_commit_trans_before_log_and_order SIGNAL master3_ready WAIT_FOR master3_go_never_arrives";
 | |
| --send INSERT INTO ti VALUES (4, "not gonna be log therefore survive"),(5, "ditto")
 | |
| 
 | |
| --connection default
 | |
| SET DEBUG_SYNC= "now WAIT_FOR master3_ready";
 | |
| 
 | |
| --echo "List of binary logs before crash"
 | |
| --source include/show_binary_logs.inc
 | |
| --echo # The gtid binlog state prior the crash will be truncated at the end of the test
 | |
| SELECT @@global.gtid_binlog_state;
 | |
| 
 | |
| --connection default
 | |
| --source include/kill_mysqld.inc
 | |
| --disconnect master1
 | |
| --disconnect master2
 | |
| --disconnect master3
 | |
| 
 | |
| #
 | |
| # Server restart
 | |
| #
 | |
| --let $restart_parameters= --init-rpl-role=SLAVE --sync-binlog=1 --log-warnings=3
 | |
| --source include/start_mysqld.inc
 | |
| 
 | |
| # Check error log for a successful truncate message.
 | |
| let $log_error_ = $MYSQLTEST_VARDIR/log/mysqld.1.err;
 | |
| 
 | |
| --let SEARCH_FILE=$log_error_
 | |
| --let SEARCH_PATTERN=truncated binlog file:.*master.*000002
 | |
| --source include/search_pattern_in_file.inc
 | |
| 
 | |
| 
 | |
| --echo "One record should be present in table"
 | |
| SELECT * FROM ti;
 | |
| 
 | |
| --echo # The truncated gtid binlog state
 | |
| SELECT @@global.gtid_binlog_state;
 | |
| SELECT @@global.gtid_binlog_pos;
 | |
| 
 | |
| --echo # Cleanup
 | |
| DROP TABLE ti;
 | |
| SET @@global.sync_binlog= default;
 | |
| --echo # End of the tests
 | 
