Hi Sven!
Comments below.
Just my few cents,
Mats Kindahl
Sven Sandberg wrote:
> Below is the list of changes that have just been committed into a local
> 5.1 repository of sven. When sven does a push these changes will
> be propagated to the main repository and, within 24 hours after the
> push, to the public repository.
> For information on how to access the public repository
> see http://dev.mysql.com/doc/mysql/en/installing-source-tree.html
>
> ChangeSet@stripped, 2007-10-09 17:17:55+02:00, sven@murkla.(none) +2 -0
> BUG#29046: rpl_stm_mystery22 unstable
>
> Problem: rpl_stm_mystery22 is unstable.
>
> Reason: At one place, the test case *should* wait until the SQL thread on the
> slave receives an error, but instead it waits until the SQL thread stops. The
> SQL thread may stop before the error flag is set, so that when the test case
> continues to execute, the error flag is not set.
>
> Fix: Introduce the subroutine mysql-test/include/wait_for_slave_sql_error.inc,
> which waits until there is an error in the sql thread of the slave.
>
> mysql-test/include/wait_for_slave_sql_error.inc@stripped, 2007-10-09 17:17:48+02:00,
> sven@murkla.(none) +35 -0
> New BitKeeper file ``mysql-test/include/wait_for_slave_sql_error.inc''
> This is a subroutine that waits until the sql thread on the slave receives an
> error, as indicated by Last_SQL_Errno in "SHOW SLAVE STATUS".
>
> mysql-test/include/wait_for_slave_sql_error.inc@stripped, 2007-10-09 17:17:48+02:00,
> sven@murkla.(none) +0 -0
>
> mysql-test/suite/rpl/t/rpl_stm_mystery22.test@stripped, 2007-10-09 17:17:48+02:00,
> sven@murkla.(none) +1 -1
> Use the new wait_for_slave_sql_error.inc instead of wait_for_slave_to_stop.
> There may be a delay from when the slave stops to when Last_SQL_Errno is set,
> so it is not safe to merely wait until the slave stops.
>
> diff -Nrup a/mysql-test/include/wait_for_slave_sql_error.inc
> b/mysql-test/include/wait_for_slave_sql_error.inc
> --- /dev/null Wed Dec 31 16:00:00 196900
> +++ b/mysql-test/include/wait_for_slave_sql_error.inc 2007-10-09 17:17:48 +02:00
> @@ -0,0 +1,35 @@
> +###################################################
> +#Author: Sven
> +#Date: 2007-10-09
> +#Purpose: Wait until the slave has an error in the
> +# sql thread, as indicated by
> +# "SHOW SLAVE STATUS", or at most 30
> +# seconds.
> +#Details:
> +# 1) Fill in and setup variables
> +# 2) loop, looking for sql error on slave
> +# 3) If it loops too long, die.
> +####################################################
> +connection slave;
> +let $row_number= 1;
> +let $run= 1;
> +let $counter= 300;
> +
> +while ($run)
> +{
> + let $sql_result= query_get_value("SHOW SLAVE STATUS", Last_SQL_Errno,
> $row_number);
> + if (`SELECT '$sql_result' = '0'`){
> + let $run= 0;
>
let $run = `SELECT '$sql_result' = 0` ?
> + }
> + if (!$run) {
> + sleep 0.1;
>
Use real_sleep instead, since the behaviour of this include file will
change drastically if the --sleep option is used. The engineering group
sets this to 10 seconds, meaning that the loop in that case will wait
3000 seconds (!) instead of 30.
> + if (!$counter){
> + --echo "Failed while waiting for slave to produce an error in its sql thread"
> + --replace_result $MASTER_MYPORT MASTER_PORT
> + --replace_column 1 # 7 # 8 # 9 # 22 # 23 # 33 #
> + query_vertical SHOW SLAVE STATUS;
> + exit;
> + }
> + dec $counter;
> + }
> +}
> diff -Nrup a/mysql-test/suite/rpl/t/rpl_stm_mystery22.test
> b/mysql-test/suite/rpl/t/rpl_stm_mystery22.test
> --- a/mysql-test/suite/rpl/t/rpl_stm_mystery22.test 2007-06-27 14:27:23 +02:00
> +++ b/mysql-test/suite/rpl/t/rpl_stm_mystery22.test 2007-10-09 17:17:48 +02:00
> @@ -28,7 +28,7 @@ insert into t1 values(NULL,'new');
> save_master_pos;
> connection slave;
> # wait until the slave tries to run the query, fails and aborts slave thread
> -wait_for_slave_to_stop;
> +--source include/wait_for_slave_sql_error.inc
>
Use the "source include/wait_for_slave_sql_error.inc;" form instead,
since that does syntax checking and reports an error if there are problems.
> select * from t1 order by n;
> delete from t1 where n = 2;
> --disable_warnings
>
>
--
Mats Kindahl
Lead Software Developer
Replication Team
MySQL AB, www.mysql.com