Hi Leonard,
Thank you for the work! Patch approved after consider the comments on
the commit messages.
Leonard Zhou wrote:
> #At file:///home/zhl/mysql/rep/5.1/bug39858/
>
> 2825 Leonard Zhou 2009-03-11
> BUG#39858 rpl.rpl_rotate (rpl.rpl_rotate_logs) failed on pushbuild: result
> mismatch
>
> The method to purge binary log files produces different results in some
> platfroms.
>
Change this to something like this:
The old method to calculate the purge time based on table modification
time does not guarantee to work on all platforms (e.g. Windows).
> Change a new way that sets the time to purge binlog file 1 second after the
> last modify time of master-bin.000002.
> That can sure that the file must be deleted in any platform.
Changed to use a new way ... the last modification time ....
That can make sure ....
> modified:
> mysql-test/suite/rpl/r/rpl_rotate_logs.result
> mysql-test/suite/rpl/t/rpl_rotate_logs.test
>
> per-file messages:
> mysql-test/suite/rpl/r/rpl_rotate_logs.result
> Test result
> mysql-test/suite/rpl/t/rpl_rotate_logs.test
> Change 'purge time' 1 sencond after the last modify time of master-bin.000002.
> === modified file 'mysql-test/suite/rpl/r/rpl_rotate_logs.result'
> --- a/mysql-test/suite/rpl/r/rpl_rotate_logs.result 2008-01-14 07:38:02 +0000
> +++ b/mysql-test/suite/rpl/r/rpl_rotate_logs.result 2009-03-11 03:26:40 +0000
> @@ -87,9 +87,7 @@ show binary logs;
> Log_name File_size
> master-bin.000002 #
> master-bin.000003 #
> -select @time_for_purge:=DATE_ADD(UPDATE_TIME, INTERVAL 1 SECOND)
> -from information_schema.tables
> -where TABLE_SCHEMA="test" and TABLE_NAME="t2";
> +SELECT @time_for_purge:=DATE_ADD('tmpval', INTERVAL 1 SECOND);
> purge master logs before (@time_for_purge);
> show binary logs;
> Log_name File_size
>
> === modified file 'mysql-test/suite/rpl/t/rpl_rotate_logs.test'
> --- a/mysql-test/suite/rpl/t/rpl_rotate_logs.test 2008-02-28 11:21:44 +0000
> +++ b/mysql-test/suite/rpl/t/rpl_rotate_logs.test 2009-03-11 03:26:40 +0000
> @@ -112,14 +112,31 @@ source include/show_master_logs.inc;
> purge binary logs to 'master-bin.000002';
> source include/show_binary_logs.inc;
>
> -# Calculate time to use in "purge master logs before" by taking
> -# last modification time of t2 and adding 1 second
> -# This is donw in order to handle the case where file system
> -# time differs from mysqld's time
> +# Set the purge time 1 second after the last modify time of master-bin.000002.
> +let $MYSQLD_DATADIR= `select @@datadir`;
> +--exec stat $MYSQLD_DATADIR/master-bin.000002
> >$MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.000002
> +--exec echo > $MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.tmp
> +perl;
> +open F, $ENV{'MYSQLTEST_VARDIR'}.'/tmp/rpl_rotate_logs.000002' or die "Tmp file
> rpl_rotate_logs.000002 not found";
> +open F2, ">>".$ENV{'MYSQLTEST_VARDIR'}.'/tmp/rpl_rotate_logs.tmp' or die "Tmp
> file rpl_rotate_logs.tmp not found";
> +while (<F>)
> +{
> + if (/Modify: ([^ ]*) ([^ ]*)\./)
> + {
> + printf F2 ("let \$tmpval = %s %s;",$1,$2);
> + }
> +}
> +close F;
> +close F2;
> +EOF
> +
> +--source $MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.tmp
> +remove_file $MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.000002;
> +remove_file $MYSQLTEST_VARDIR/tmp/rpl_rotate_logs.tmp;
> +
> --disable_result_log
> -select @time_for_purge:=DATE_ADD(UPDATE_TIME, INTERVAL 1 SECOND)
> - from information_schema.tables
> - where TABLE_SCHEMA="test" and TABLE_NAME="t2";
> +--replace_result $tmpval tmpval
> +--eval SELECT @time_for_purge:=DATE_ADD('$tmpval', INTERVAL 1 SECOND)
> --enable_result_log
>
> purge master logs before (@time_for_purge);
>
>