List:Commits« Previous MessageNext Message »
From:Sven Sandberg Date:July 23 2008 2:37pm
Subject:Re: bzr commit into mysql-5.1 branch (sven:2633) Bug#37717
View as plain text  
Hi Zhenxing,

Thank you!

/Sven

He Zhenxing wrote:
> Hi Sven
> 
> Yes, you're right, nice work!!! patch approved!
> 
> Sven Sandberg wrote:
>> Hi Zhenxing,
>>
>> Actually, START SLAVE UNTIL ... never stops the IO thread, only the SQL 
>> thread. So I think that it should be ok.
>>
>> /Sven
>>
>> He Zhenxing wrote:
>>> Hi Sven
>>>
>>> I think your fix also has race condition.
>>>
>>>   1) start slave until ...;
>>>   2) source include/wait_for_slave_io_to_start.inc;
>>>   3) source include/wait_for_slave_sql_to_stop.inc;
>>>
>>> if before running 2), the slave I/O thread has already started and
>>> finished replication to given position and stopped, then 2) will fail to
>>> wait the slave I/O start and thus the test will fail.
>>>
>>> Sven Sandberg wrote:
>>>> #At file:///home/sven/bzr/b37717-rpl_stm_until/5.1-rpl/
>>>>
>>>>  2633 Sven Sandberg	2008-07-23
>>>>       BUG#37717: rpl.rpl_stm_until 'stmt' fails sporadically on
> pushbuild
>>>>       Problem: After START SLAVE, the Slave_IO_Status column of
>>>>       SHOW SLAVE STATUS goes from No to Yes asynchronously. That
>>>>       caused sporadic failures on pushbuild in rpl_stm_until since
>>>>       the test contains SHOW SLAVE STATUS right after START SLAVE.
>>>>       Fix: Wait until Slave_IO_Status becomes Yes after each
>>>>       START SLAVE.
>>>> added:
>>>>   mysql-test/include/wait_for_slave_io_to_start.inc
>>>> modified:
>>>>   mysql-test/suite/rpl/r/rpl_stm_until.result
>>>>   mysql-test/suite/rpl/t/rpl_stm_until.test
>>>>
>>>> per-file messages:
>>>>   mysql-test/include/wait_for_slave_io_to_start.inc
>>>>     Macro that waits until the Slave_IO_Running field of
>>>>     SHOW SLAVE STATUS becomes Yes.
>>>>   mysql-test/suite/rpl/r/rpl_stm_until.result
>>>>     updated result file
>>>>   mysql-test/suite/rpl/t/rpl_stm_until.test
>>>>      - Added wait_for_slave_io_to_start after each start slave.
>>>>      - Removed unused initialization of test variable $VERSION
>>>>      - Added comments.
>>>> === added file 'mysql-test/include/wait_for_slave_io_to_start.inc'
>>>> --- a/mysql-test/include/wait_for_slave_io_to_start.inc	1970-01-01
> 00:00:00 +0000
>>>> +++ b/mysql-test/include/wait_for_slave_io_to_start.inc	2008-07-23
> 11:23:52 +0000
>>>> @@ -0,0 +1,19 @@
>>>> +# ==== Purpose ====
>>>> +#
>>>> +# Waits until the IO thread of the current connection has started and
>>>> +# connected to the master (i.e., until SHOW SLAVE STATUS returns Yes
>>>> +# in the Slave_IO_Running field), or until a timeout is reached.
>>>> +#
>>>> +# ==== Usage ====
>>>> +#
>>>> +# source include/wait_for_slave_io_to_start.inc;
>>>> +#
>>>> +# Parameters to this macro are $slave_timeout and
>>>> +# $slave_keep_connection. See wait_for_slave_param.inc for
>>>> +# descriptions.
>>>> +
>>>> +let $slave_param= Slave_IO_Running;
>>>> +let $slave_param_value= Yes;
>>>> +let $slave_error_message= Failed while waiting for slave IO thread to
> start;
>>>> +source include/wait_for_slave_param.inc;
>>>> +let $slave_error_message= ;
>>>>
>>>> === modified file 'mysql-test/suite/rpl/r/rpl_stm_until.result'
>>>> --- a/mysql-test/suite/rpl/r/rpl_stm_until.result	2008-07-10 16:09:39
> +0000
>>>> +++ b/mysql-test/suite/rpl/r/rpl_stm_until.result	2008-07-23 11:23:52
> +0000
>>>> @@ -4,7 +4,10 @@ reset master;
>>>>  reset slave;
>>>>  drop table if exists t1,t2,t3,t4,t5,t6,t7,t8,t9;
>>>>  start slave;
>>>> +[on slave]
>>>>  include/stop_slave.inc
>>>> +==== Create some events on master ====
>>>> +[on master]
>>>>  create table t1(n int not null auto_increment primary key);
>>>>  insert into t1 values (1),(2),(3),(4);
>>>>  drop table t1;
>>>> @@ -12,6 +15,8 @@ create table t2(n int not null auto_incr
>>>>  insert into t2 values (1),(2);
>>>>  insert into t2 values (3),(4);
>>>>  drop table t2;
>>>> +==== Replicate one event at a time on slave ====
>>>> +[on slave]
>>>>  start slave until master_log_file='master-bin.000001',
> master_log_pos=323;
>>>>  select * from t1;
>>>>  n
>>>> @@ -149,6 +154,8 @@ Last_IO_Error	#
>>>>  Last_SQL_Errno	0
>>>>  Last_SQL_Error	
>>>>  start slave;
>>>> +[on master]
>>>> +[on slave]
>>>>  include/stop_slave.inc
>>>>  start slave until master_log_file='master-bin.000001',
> master_log_pos=776;
>>>>  SHOW SLAVE STATUS;
>>>> @@ -190,6 +197,7 @@ Last_IO_Errno	#
>>>>  Last_IO_Error	#
>>>>  Last_SQL_Errno	0
>>>>  Last_SQL_Error	
>>>> +==== Test various error conditions ====
>>>>  start slave until master_log_file='master-bin', master_log_pos=561;
>>>>  ERROR HY000: Incorrect parameter or combination of parameters for START
> SLAVE UNTIL
>>>>  start slave until master_log_file='master-bin.000001',
> master_log_pos=561, relay_log_pos=12;
>>>>
>>>> === modified file 'mysql-test/suite/rpl/t/rpl_stm_until.test'
>>>> --- a/mysql-test/suite/rpl/t/rpl_stm_until.test	2008-07-10 16:09:39
> +0000
>>>> +++ b/mysql-test/suite/rpl/t/rpl_stm_until.test	2008-07-23 11:23:52
> +0000
>>>> @@ -1,18 +1,37 @@
>>>> +# ==== Purpose ====
>>>> +#
>>>> +# Verify that START SLAVE UNTIL replicates until the given binlog
>>>> +# position but not longer.  Verify that START SLAVE UNTIL with various
>>>> +# incorrect arguments gives an error.
>>>> +#
>>>> +# ==== Method ====
>>>> +#
>>>> +# On master, create a table and insert some rows.  On slave, START
>>>> +# SLAVE UNTIL so that it reads one event at a time, and check the
>>>> +# table and the slave status each time.
>>>> +#
>>>> +# Then, on slave, run START SLAVE UNTIL with incorrect arguments and
>>>> +# verify that it gives an error.
>>>> +#
>>>> +# ==== Related bugs ====
>>>> +#
>>>> +# Bug in this test: BUG#37717: rpl.rpl_stm_until 'stmt' fails
> sporadically on pushbuild
>>>> +
>>>>  -- source include/have_binlog_format_mixed_or_statement.inc
>>>>  -- source include/master-slave.inc
>>>>  
>>>>  # Test is dependent on binlog positions
>>>>  
>>>> -# prepare version for substitutions
>>>> -let $VERSION=`select version()`;
>>>> -
>>>> -# stop slave before he will start replication also sync with master
>>>> -# for avoiding undetermenistic behaviour
>>>> +# Stop slave before it starts replication.  Also sync with master
>>>> +# to avoid nondeterministic behaviour.
>>>> +--echo [on slave]
>>>>  sync_slave_with_master;
>>>>  --source include/stop_slave.inc
>>>>  
>>>> +--echo ==== Create some events on master ====
>>>> +
>>>> +--echo [on master]
>>>>  connection master;
>>>> -# create some events on master
>>>>  create table t1(n int not null auto_increment primary key);
>>>>  insert into t1 values (1),(2),(3),(4);
>>>>  drop table t1;
>>>> @@ -21,9 +40,13 @@ insert into t2 values (1),(2);
>>>>  insert into t2 values (3),(4);
>>>>  drop table t2;
>>>>  
>>>> +--echo ==== Replicate one event at a time on slave ====
>>>> +
>>>>  # try to replicate all queries until drop of t1
>>>> +--echo [on slave]
>>>>  connection slave;
>>>>  start slave until master_log_file='master-bin.000001',
> master_log_pos=323;
>>>> +--source include/wait_for_slave_io_to_start.inc
>>>>  --source include/wait_for_slave_sql_to_stop.inc
>>>>  # here table should be still not deleted
>>>>  select * from t1;
>>>> @@ -31,6 +54,7 @@ source include/show_slave_status2.inc;
>>>>  
>>>>  # this should fail right after start
>>>>  start slave until master_log_file='master-no-such-bin.000001',
> master_log_pos=291;
>>>> +--source include/wait_for_slave_io_to_start.inc
>>>>  --source include/wait_for_slave_sql_to_stop.inc
>>>>  # again this table should be still not deleted
>>>>  select * from t1;
>>>> @@ -38,24 +62,28 @@ source include/show_slave_status2.inc;
>>>>  
>>>>  # try replicate all up to and not including the second insert to t2;
>>>>  start slave until relay_log_file='slave-relay-bin.000004',
> relay_log_pos=746;
>>>> +--source include/wait_for_slave_io_to_start.inc
>>>>  --source include/wait_for_slave_sql_to_stop.inc
>>>>  select * from t2;
>>>>  source include/show_slave_status2.inc;
>>>>  
>>>>  # clean up
>>>>  start slave;
>>>> +--echo [on master]
>>>>  connection master;
>>>> +--echo [on slave]
>>>>  sync_slave_with_master;
>>>>  --source include/stop_slave.inc
>>>>  
>>>>  # this should stop immediately as we are already there
>>>>  start slave until master_log_file='master-bin.000001',
> master_log_pos=776;
>>>> +--source include/wait_for_slave_io_to_start.inc
>>>>  --source include/wait_for_slave_sql_to_stop.inc
>>>> -# here the sql slave thread should be stopped
>>>>  --replace_result bin.000005 bin.000004 bin.000006 bin.000004 bin.000007
> bin.000004
>>>>  source include/show_slave_status2.inc;
>>>>  
>>>> -#testing various error conditions
>>>> +--echo ==== Test various error conditions ====
>>>> +
>>>>  --error 1277
>>>>  start slave until master_log_file='master-bin', master_log_pos=561;
>>>>  --error 1277
>>>> @@ -70,4 +98,3 @@ start slave until relay_log_file='slave-
>>>>  start slave sql_thread;
>>>>  start slave until master_log_file='master-bin.000001',
> master_log_pos=776;
>>>>  
>>>> -# End of 4.1 tests
>>>>
>>>
>> -- 
>> Sven Sandberg, Software Engineer
>> MySQL AB, www.mysql.com
>>
> 

-- 
Sven Sandberg, Software Engineer
MySQL AB, www.mysql.com
Thread
bzr commit into mysql-5.1 branch (sven:2633) Bug#37717Sven Sandberg23 Jul
  • Re: bzr commit into mysql-5.1 branch (sven:2633) Bug#37717He Zhenxing23 Jul
    • Re: bzr commit into mysql-5.1 branch (sven:2633) Bug#37717Sven Sandberg23 Jul
      • Re: bzr commit into mysql-5.1 branch (sven:2633) Bug#37717He Zhenxing23 Jul
        • Re: bzr commit into mysql-5.1 branch (sven:2633) Bug#37717Sven Sandberg23 Jul