Hi Andrei,
The comment "Singed interger format" should be "Signed interger format"? :)
Otherwise, the patch is approved.
Thanks,
/Guangbao
Andrei Elkin Wrote:
> #At file:///home/andrei/MySQL/BZR/FIXES/bug37313-server_id_binlog/ based on
> revid:davi.arnaut@stripped
>
> 2744 Andrei Elkin 2009-02-13
> Bug #37313 BINLOG Contains Incorrect server id
>
> Singed integer format specifier forced to print the binlog header with
> server_id
> negative if the unsigned value set the sign bit ON.
>
> Fixed with correcting the specifier to correspond to typeof(server_id) ==
> ulong.
> modified:
> mysql-test/r/mysqlbinlog.result
> mysql-test/t/mysqlbinlog.test
> sql/log_event.cc
>
> per-file messages:
> mysql-test/r/mysqlbinlog.result
> results changed, bug#37313.
> mysql-test/t/mysqlbinlog.test
> regression test for bug #37313 is added.
> sql/log_event.cc
> Format specifier is corrected to correspond to typeof(server_id).
> === modified file 'mysql-test/r/mysqlbinlog.result'
> --- a/mysql-test/r/mysqlbinlog.result 2008-05-15 23:13:24 +0000
> +++ b/mysql-test/r/mysqlbinlog.result 2009-02-13 21:39:12 +0000
> @@ -362,4 +362,14 @@ drop table t1;
> 1
> drop table t1;
> shell> mysqlbinlog std_data/corrupt-relay-bin.000624 > var/tmp/bug31793.sql
> +set @@global.server_id= 4294967295;
> +reset master;
> +select
> +(@a:=load_file("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
> +is not null;
> +(@a:=load_file("MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
> +is not null
> +1
> +*** Unsigned server_id 4294967295 is found: 1 ***
> +set @@global.server_id= 1;
> End of 5.0 tests
>
> === modified file 'mysql-test/t/mysqlbinlog.test'
> --- a/mysql-test/t/mysqlbinlog.test 2008-02-01 16:26:28 +0000
> +++ b/mysql-test/t/mysqlbinlog.test 2009-02-13 21:39:12 +0000
> @@ -253,4 +253,24 @@ echo shell> mysqlbinlog std_data/corrupt
> error 1;
> exec $MYSQL_BINLOG $MYSQL_TEST_DIR/std_data/corrupt-relay-bin.000624 >
> $MYSQLTEST_VARDIR/tmp/bug31793.sql;
>
> +#
> +# Bug #37313 BINLOG Contains Incorrect server id
> +#
> +
> +let $save_server_id= `select @@global.server_id`;
> +let $s_id_max=`select (1 << 32) - 1`;
> +eval set @@global.server_id= $s_id_max;
> +
> +reset master;
> +--exec $MYSQL_BINLOG $MYSQLTEST_VARDIR/log/master-bin.000001 >
> $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog
> +--replace_result $MYSQLTEST_VARDIR MYSQLTEST_VARDIR
> +eval select
> +(@a:=load_file("$MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog"))
> +is not null;
> +let $s_id_unsigned= `select @a like "%server id $s_id_max%" /* must return 1 */`;
> +echo *** Unsigned server_id $s_id_max is found: $s_id_unsigned ***;
> +
> +eval set @@global.server_id= $save_server_id;
> +--remove_file $MYSQLTEST_VARDIR/tmp/mysqlbinlog_bug37313.binlog
> +
> --echo End of 5.0 tests
>
> === modified file 'sql/log_event.cc'
> --- a/sql/log_event.cc 2008-07-07 07:58:27 +0000
> +++ b/sql/log_event.cc 2009-02-13 21:39:12 +0000
> @@ -976,7 +976,7 @@ void Log_event::print_header(FILE* file,
>
> fputc('#', file);
> print_timestamp(file);
> - fprintf(file, " server id %d end_log_pos %s ", server_id,
> + fprintf(file, " server id %lu end_log_pos %s ", server_id,
> llstr(log_pos,llbuff));
>
> /* mysqlbinlog --hexdump */
>
>
>