Server IP : 172.67.216.182 / Your IP : 172.68.242.43 Web Server : Apache System : Linux krdc-ubuntu-s-2vcpu-4gb-amd-blr1-01.localdomain 5.15.0-142-generic #152-Ubuntu SMP Mon May 19 10:54:31 UTC 2025 x86_64 User : www ( 1000) PHP Version : 7.4.33 Disable Function : passthru,exec,system,putenv,chroot,chgrp,chown,shell_exec,popen,proc_open,pcntl_exec,ini_alter,ini_restore,dl,openlog,syslog,readlink,symlink,popepassthru,pcntl_alarm,pcntl_fork,pcntl_waitpid,pcntl_wait,pcntl_wifexited,pcntl_wifstopped,pcntl_wifsignaled,pcntl_wifcontinued,pcntl_wexitstatus,pcntl_wtermsig,pcntl_wstopsig,pcntl_signal,pcntl_signal_dispatch,pcntl_get_last_error,pcntl_strerror,pcntl_sigprocmask,pcntl_sigwaitinfo,pcntl_sigtimedwait,pcntl_exec,pcntl_getpriority,pcntl_setpriority,imap_open,apache_setenv MySQL : OFF | cURL : ON | WGET : ON | Perl : ON | Python : OFF | Sudo : ON | Pkexec : ON Directory : /www/server/mysql/src/mysql-test/suite/ndb_rpl/t/ |
Upload File : |
--source include/have_ndb.inc --source include/have_binlog_format_mixed_or_row.inc --source suite/ndb_rpl/ndb_master-slave.inc --source include/have_debug.inc # Test how the slave behaves when Binlog is replayed intentionally # and unintentionally # --connection master use test; create table test.t1 (a int primary key, content varchar(1000)) engine=ndb; --sync_slave_with_master --connection master reset master; --connection slave # Add a suppression for the warning that will appear in the # Slave's .err file call mtr.add_suppression("NDB Slave : At SQL thread start applying epoch .*"); STOP SLAVE; CHANGE MASTER TO MASTER_LOG_POS=4; START SLAVE; --echo Capture current count of epoch decline warnings --let mysqld_name=mysqld.1.slave --source ndb_rpl_get_server_error_log.inc --disable_query_log --disable_result_log select @init_lower_warn_count:=count(1) from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select @init_lower_err_count:=count(1) from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select @init_repeat_err_count:=count(1) from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select @init_skipped_err_count:=count(1) from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --enable_result_log --connection master # Create some distinct epochs by writing data, and # synchronising on binlog... --let $i=6 while($i) { eval insert into test.t1 values ($i, repeat('B', 1000)); --disable_query_log --disable_result_log show binlog events; --enable_result_log --enable_query_log --dec $i } --echo Expect that we have at least 2 epochs logged. select count(1) > 1 from (select distinct epoch from mysql.ndb_binlog_index) as logged_epochs; --sync_slave_with_master --connection slave --echo Any slave positioning warnings? --echo Should be none --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --echo Now stop and manually replay old binlog. stop slave; change master to master_log_pos=4; start slave; --connection master --sync_slave_with_master --connection slave --echo Any slave positioning warnings? --echo Should be one --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --echo Repeat stop slave; change master to master_log_pos=4; start slave; --connection master --sync_slave_with_master --connection slave --echo Any slave positioning warnings? --echo Should be two --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --echo Now try re-positioning after RESET SLAVE STOP SLAVE; RESET SLAVE; --source include/rpl_start_slaves.inc --connection master --sync_slave_with_master --connection slave --echo Any slave positioning warnings? --echo Should be two, e.g. no extras after the RESET SLAVE --echo This avoids warnings when slave context has been explicitly reset --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log # TODO : Test replay exactly on last-applied epoch, as this is probably a # common case for users who position on last epoch rather than just-after it. --connection master --echo Now get unexpected epoch back-step using fault injection --echo on the Master. call mtr.add_suppression("NDB Binlog injector cycling gcis .*"); set @old_debug = @@global.debug; set global debug=""; set global debug="+d,ndb_binlog_injector_cycle_gcis"; show variables like 'debug'; --echo Let's make some epochs --let $i=6 while($i) { eval insert into test.t1 values ($i + 6, repeat('E', 1000)); --disable_query_log --disable_result_log show binlog events; --enable_result_log --enable_query_log --dec $i } --connection slave call mtr.add_suppression("NDB Slave : SQL thread stopped as applying epoch .*"); call mtr.add_suppression("Slave SQL for channel '': Could not execute .* HA_ERR_ROWS_EVENT_APPLY; .*"); call mtr.add_suppression("Slave: Got error 173 .*"); --echo Check that slave stopped with an error --let $slave_sql_errno=1296 --source include/wait_for_slave_sql_error.inc --echo Let's look at the warnings and errors now... --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --echo Now check that we can manually restart the slave --connection master set global debug = @old_debug; reset master; --connection slave stop slave; change master to master_log_pos=4; start slave; --connection master insert into test.t1 values (13, repeat('A', 1000)); --sync_slave_with_master --connection slave --echo Check slave warnings now, should be no extras --echo e.g. 2 warnings, 1 error --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --connection master delete from test.t1; --sync_slave_with_master --connection master --echo Now get unexpected epoch repeat using fault-injection on the master call mtr.add_suppression("NDB Binlog injector repeating gcis .*"); set @old_debug = @@global.debug; set global debug=""; set global debug="+d,ndb_binlog_injector_repeat_gcis"; show variables like 'debug'; --echo Let's make some epochs --let $i=6 while($i) { eval insert into test.t1 values ($i, repeat('E', 1000)); --disable_query_log --disable_result_log show binlog events; --enable_result_log --enable_query_log --dec $i } --connection slave call mtr.add_suppression("NDB Slave : SQL thread stopped as attempted to reapply already committed epoch .*"); call mtr.add_suppression("Slave SQL for channel '': Could not execute .* HA_ERR_ROWS_EVENT_APPLY; .*"); call mtr.add_suppression("Slave: Got error 173 .*"); --echo Check that slave stopped with an error --let $slave_sql_errno=1296 --source include/wait_for_slave_sql_error.inc --echo Let's look at the warnings and errors now... --echo Should be increase in repeat error count. --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --echo Now check that we can manually restart the slave --connection master set global debug = @old_debug; reset master; --connection slave stop slave; change master to master_log_pos=4; start slave; --connection master insert into test.t1 values (13, repeat('A', 1000)); --sync_slave_with_master --connection slave --echo Check slave warnings now, should be no extras --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --connection master delete from test.t1; --sync_slave_with_master --connection slave --echo Now get skipped epoch using fault injection on the slave set @old_debug = @@global.debug; set global debug=""; set global debug="+d,ndb_slave_fail_marking_epoch_committed"; show variables like 'debug'; --connection master --echo Let's make some epochs --let $i=6 while($i) { eval insert into test.t1 values ($i, repeat('E', 1000)); --disable_query_log --disable_result_log show binlog events; --enable_result_log --enable_query_log --dec $i } --connection slave call mtr.add_suppression("NDB Slave : SQL thread stopped as attempting to apply new epoch .*"); call mtr.add_suppression("Slave SQL for channel '': Could not execute .* HA_ERR_ROWS_EVENT_APPLY; .*"); call mtr.add_suppression("Slave: Got error 173 .*"); --echo Check that slave stopped with an error --let $slave_sql_errno=1296 --source include/wait_for_slave_sql_error.inc --echo Let's look at the warnings and errors now... --echo Should be increase in repeat error count. --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log --echo Now check that we can manually restart the slave --connection slave set global debug = @old_debug; --connection master reset master; --connection slave stop slave; change master to master_log_pos=4; start slave; --connection master insert into test.t1 values (13, repeat('A', 1000)); --sync_slave_with_master --connection slave --echo Check slave warnings now, should be no extras --source ndb_rpl_get_server_error_log.inc --disable_query_log select count(1) - @init_lower_warn_count as lower_warn_count from test.server_error_log where line like '%Ndb Slave%lower than previously applied%Check slave positioning%'; select count(1) - @init_lower_err_count as lower_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%lower than previously applied%'; select count(1) - @init_repeat_err_count as repeat_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%reapply already committed epoch%'; select count(1) - @init_skipped_err_count as skipped_err_count from test.server_error_log where line like '%Ndb Slave%SQL thread stopped%has not been committed%'; --enable_query_log drop table test.server_error_log; --connection master drop table test.t1; --sync_slave_with_master --source include/rpl_end.inc