From 25bddd93c3c2333a23e31c991bb8f9b044d61ede Mon Sep 17 00:00:00 2001 From: Sven Sandberg <sven@mysql.com> Date: Mon, 26 May 2008 15:06:49 +0200 Subject: [PATCH] BUG#36826: rpl_slave_status fails sporadically in pushbuild rpl_slave_status failed on pushbuild. The slave stopped with an error. Adding sync_slave_with_master fixes the problem. Updated test case. --- .../suite/rpl/r/rpl_slave_status.result | 56 ++++----------- mysql-test/suite/rpl/t/rpl_slave_status.test | 71 +++++++++++-------- 2 files changed, 57 insertions(+), 70 deletions(-) diff --git a/mysql-test/suite/rpl/r/rpl_slave_status.result b/mysql-test/suite/rpl/r/rpl_slave_status.result index 08f79d01e7a..b435af499df 100644 --- a/mysql-test/suite/rpl/r/rpl_slave_status.result +++ b/mysql-test/suite/rpl/r/rpl_slave_status.result @@ -4,59 +4,33 @@ reset master; reset slave; drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9; start slave; +==== Create new replication user ==== +[on master] grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl'; +[on slave] stop slave; change master to master_user='rpl',master_password='rpl'; start slave; -drop table if exists t1; +==== Do replication as new user ==== +[on master] create table t1 (n int); insert into t1 values (1); +[on slave] select * from t1; n 1 -delete from mysql.user where user='rpl'; +==== Delete new replication user ==== +[on master] +drop user rpl@127.0.0.1; flush privileges; +[on slave] +==== Restart slave without privileges ===== stop slave; start slave; -show slave status; -Slave_IO_State # -Master_Host 127.0.0.1 -Master_User rpl -Master_Port MASTER_MYPORT -Connect_Retry 1 -Master_Log_File master-bin.000001 -Read_Master_Log_Pos # -Relay_Log_File # -Relay_Log_Pos # -Relay_Master_Log_File master-bin.000001 -Slave_IO_Running No -Slave_SQL_Running Yes -Replicate_Do_DB -Replicate_Ignore_DB -Replicate_Do_Table -Replicate_Ignore_Table -Replicate_Wild_Do_Table -Replicate_Wild_Ignore_Table -Last_Errno 0 -Last_Error -Skip_Counter 0 -Exec_Master_Log_Pos # -Relay_Log_Space # -Until_Condition None -Until_Log_File -Until_Log_Pos 0 -Master_SSL_Allowed No -Master_SSL_CA_File -Master_SSL_CA_Path -Master_SSL_Cert -Master_SSL_Cipher -Master_SSL_Key -Seconds_Behind_Master NULL -Master_SSL_Verify_Server_Cert No -Last_IO_Errno # -Last_IO_Error # -Last_SQL_Errno 0 -Last_SQL_Error +==== Verify that Slave_IO_Running = No ==== +Slave_IO_Running = No (should be No) +==== Cleanup (Note that slave IO thread is not running) ==== drop table t1; delete from mysql.user where user='rpl'; +[on master] drop table t1; diff --git a/mysql-test/suite/rpl/t/rpl_slave_status.test b/mysql-test/suite/rpl/t/rpl_slave_status.test index 10da6733c39..46836382ac4 100644 --- a/mysql-test/suite/rpl/t/rpl_slave_status.test +++ b/mysql-test/suite/rpl/t/rpl_slave_status.test @@ -1,60 +1,73 @@ ---source include/master-slave.inc - -############################################################################ -# Test case for BUG#10780 +# ==== Purpose ==== +# +# Verify that a slave without replication privileges has +# Slave_IO_Running = No +# +# ==== Method ==== +# +# We do the following steps: +# - Create a new replication user on master +# - Connect to slave and start replication as this user. +# - Verify that slave can replicate well, by creating a table and +# inserting a row into it. +# - Delete the user from the master. +# - Stop and start the slave (this should fail). +# - Check the Slave_IO_Running column of SHOW SLAVE STATUS. +# +# ==== Related bugs ==== # -# REQUIREMENT -# A slave without replication privileges should have Slave_IO_Running = No +# BUG#10780: slave can't connect to master - IO and SQL threads running -# 1. Create new replication user +--source include/master-slave.inc + +--echo ==== Create new replication user ==== +--echo [on master] connection master; grant replication slave on *.* to rpl@127.0.0.1 identified by 'rpl'; -connection slave; +--echo [on slave] +sync_slave_with_master; stop slave; +source include/wait_for_slave_to_stop.inc; change master to master_user='rpl',master_password='rpl'; start slave; +source include/wait_for_slave_to_start.inc; -# 2. Do replication as new user +--echo ==== Do replication as new user ==== +--echo [on master] connection master; ---disable_warnings -drop table if exists t1; ---enable_warnings create table t1 (n int); insert into t1 values (1); -save_master_pos; -connection slave; -sync_with_master; +--echo [on slave] +sync_slave_with_master; select * from t1; -# 3. Delete new replication user +--echo ==== Delete new replication user ==== +--echo [on master] connection master; -delete from mysql.user where user='rpl'; +drop user rpl@127.0.0.1; flush privileges; -connection slave; -# 4. Restart slave without privileges +--echo [on slave] +sync_slave_with_master; + +--echo ==== Restart slave without privileges ===== # (slave.err will contain access denied error for this START SLAVE command) stop slave; source include/wait_for_slave_to_stop.inc; start slave; source include/wait_for_slave_sql_to_start.inc; -# 5. Make sure Slave_IO_Running = No ---replace_result $MASTER_MYPORT MASTER_MYPORT -# Column 1 is replaced, since the output can be either -# "Connecting to master" or "Waiting for master update" ---replace_column 1 # 7 # 8 # 9 # 22 # 23 # 35 # 36 # -query_vertical show slave status; +--echo ==== Verify that Slave_IO_Running = No ==== +let $result= query_get_value("SHOW SLAVE STATUS", Slave_IO_Running, 1); +--echo Slave_IO_Running = $result (should be No) -# Cleanup (Note that slave IO thread is not running) -connection slave; +--echo ==== Cleanup (Note that slave IO thread is not running) ==== drop table t1; delete from mysql.user where user='rpl'; # cleanup: slave io thread has been stopped "irrecoverably" # so we clean up mess manually +--echo [on master] connection master; drop table t1; - -# end of 4.1 tests -- 2.30.9