List:Commits« Previous MessageNext Message »
From:He Zhenxing Date:January 7 2009 8:46am
Subject:Re: bzr commit into mysql-5.1 branch (sven:2709) Bug#37718
View as plain text  
Hi Sven,

Great work! Thanks for the improvement of the test code!

Patch approved, only one minor comment.

Sven Sandberg wrote:
> #At file:///home/sven/bzr/b37718-rpl_stm_mystery22/5.1-rpl/ based on
> revid:zhenxing.he@stripped
> 
>  2709 Sven Sandberg	2009-01-07
>       BUG#37718: rpl.rpl_stm_mystery22 fails sporadically on pushbuild
>       Problem 1: The test waits for an error in the slave sql thread,
>       then resolves the error and issues 'start slave'. However, there
>       is a gap between when the error is reported and the slave sql
>       thread stops. If this gap was long, the slave would still be
>       running when 'start slave' happened, so 'start slave' would fail
>       and cause a test failure.
>       Fix 1: Made wait_for_slave_sql_error wait for the slave to stop
>       instead of wait for error in the IO thread. After stopping, the
>       error code is verified. If the error code is wrong, debug info
>       is printed. To print debug info, the debug printing code in
>       wait_for_slave_param.inc was moved out to a new file,
>       show_rpl_debug_info.inc.
>       Problem 2: rpl_stm_mystery22 is a horrible name, the comments in
>       the file didn't explain anything useful, the test was generally
>       hard to follow, and the test was essentially duplicated between
>       rpl_stm_mystery22 and rpl_row_mystery22.
>       Fix 2: The test is about conflicts in the slave SQL thread,
>       hence I renamed the tests to rpl_{stm,row}_conflicts. Refactored
>       the test so that the work is done in
>       extra/rpl_tests/rpl_conflicts.inc, and
>       rpl.rpl_{row,stm}_conflicts merely sets some variables and then
>       sourced extra/rpl_tests/rpl_conflicts.inc.
>       The tests have been rewritten and comments added.
>       Problem 3: When calling wait_for_slave_sql_error.inc, you always
>       want to verify that the sql thread stops because of the expected
>       error and not because of some other error. Currently,
>       wait_for_slave_sql_error.inc allows the caller to omit the error
>       code, in which case all error codes are accepted.
>       Fix 3: Made wait_for_slave_sql_error.inc fail if no error code
>       is given. Updated rpl_filter_tables_not_exist accordingly.
>       Problem 4: rpl_filter_tables_not_exist had a typo, the dollar
>       sign was missing in a 'let' statement.
>       Fix 4: Added dollar sign.
>       Problem 5: When replicating from other servers than the one named
>       'master', the wait_for_slave_* macros were unable to print debug
>       info on the master.
>       Fix 5: Remove parameter $slave_keep_connection by
>       $master_connection.

[snip]

> === added file 'mysql-test/include/show_rpl_debug_info.inc'
> --- a/mysql-test/include/show_rpl_debug_info.inc	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/include/show_rpl_debug_info.inc	2009-01-07 08:07:07 +0000
> @@ -0,0 +1,75 @@
> +# ==== Purpose ====
> +#
> +# Print status information for replication, typically used to debug
> +# test failures.
> +#
> +# First, the following is printed on slave:
> +#
> +#   SHOW SLAVE STATUS
> +#   SHOW PROCESSLIST
> +#   SHOW BINLOG EVENTS IN <binlog_name>
> +#
> +# Where <binlog_name> is the currently active binlog.
> +#
> +# Then, the following is printed on master:
> +#
> +#   SHOW MASTER STATUS
> +#   SHOW PROCESSLIST
> +#   SHOW BINLOG EVENTS IN <sql_binlog_name>
> +#   SHOW BINLOG EVENTS IN <io_binlog_name>
> +#
> +# Where <sql_binlog_name> is the binlog name that the slave sql thread
> +# is currently reading from and <io_binlog_name> is the binlog that
> +# the slave IO thread is currently reading from.
> +#
> +# ==== Usage ====
> +#
> +# [let $master_connection= <connection>;]
> +# source include/show_rpl_debug_info.inc;
> +#
> +# If $master_connection is set, debug info will be retrieved from the
> +# connection named $master_connection.  Otherwise, it will be
> +# retrieved from the 'master' connection if the current connection is
> +# 'slave'.
> +
> +let $_con= $CURRENT_CONNECTION;
> +--echo [on $_con]
> +--echo **** SHOW SLAVE STATUS on $_con ****
> +query_vertical SHOW SLAVE STATUS;
> +--echo **** SHOW PROCESSLIST on $_con ****
> +SHOW PROCESSLIST;
> +--echo **** SHOW BINLOG EVENTS on $_con ****
> +let $binlog_name= query_get_value("SHOW MASTER STATUS", File, 1);
> +eval SHOW BINLOG EVENTS IN '$binlog_name';
> +
> +let $_master_con= $master_connection;
> +if (!$_master_con) {
> +  if (`SELECT '$_master_con' = 'slave') {
> +    let $_master_con= master;
> +  }
> +  if (!$_master_con) {
> +    --echo Unable to determine master connection. No debug info printed for master.
> +    --echo Please fix the test case by setting $master_connection before sourcing
> +    --echo show_rpl_debug_info.inc.

I think an 'exit' should be added here to quit the test case.


Thread
bzr commit into mysql-5.1 branch (sven:2709) Bug#37718Sven Sandberg7 Jan
  • Re: bzr commit into mysql-5.1 branch (sven:2709) Bug#37718He Zhenxing7 Jan
    • Re: bzr commit into mysql-5.1 branch (sven:2709) Bug#37718Sven Sandberg7 Jan
      • Re: bzr commit into mysql-5.1 branch (sven:2709) Bug#37718He Zhenxing8 Jan
Re: bzr commit into mysql-5.1 branch (sven:2709) Bug#37718Sven Sandberg8 Jan