List:Commits« Previous MessageNext Message »
From:He Zhenxing Date:June 5 2009 11:20am
Subject:Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:2917)
Bug#42851
View as plain text  
Hi Luis,

Nice work, approved!

Luis Soares wrote:
> #At file:///home/lsoares/Workspace/mysql-server/bugfix/b42851/5.1-bt/ based on
> revid:zhenxing.he@stripped
> 
>  2917 Luis Soares	2009-06-05
>       BUG#42851: Spurious "Statement is not safe to log in statement
>                  format." warnings
>       
>       Despite the fact that a statement would be filtered out from binlog, a
>       warning would still be thrown if it was issued with the LIMIT.
>       
>       This patch addresses this issue by checking the filtering rules before
>       printing out the warning.
>      @ mysql-test/suite/binlog/t/limit_warning-master.opt
>         Parameter to filter out database: "b42851".
>      @ mysql-test/suite/binlog/t/limit_warning.test
>         Added a new test case.
>      @ sql/sql_class.cc
>         Added filtering rules check to condition used to decide whether to
>         printout warning or not.
> 
>     added:
>       mysql-test/suite/binlog/r/limit_warning.result
>       mysql-test/suite/binlog/t/limit_warning-master.opt
>       mysql-test/suite/binlog/t/limit_warning.test
>     modified:
>       sql/sql_class.cc
> === added file 'mysql-test/suite/binlog/r/limit_warning.result'
> --- a/mysql-test/suite/binlog/r/limit_warning.result	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/binlog/r/limit_warning.result	2009-06-05 09:09:59 +0000
> @@ -0,0 +1,30 @@
> +### NOT filtered database => assertion: warnings ARE shown
> +DROP TABLE IF EXISTS t1;
> +CREATE TABLE t1 (a int, b int, primary key (a));
> +INSERT INTO t1 VALUES (1,2), (2,3);
> +UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
> +Warnings:
> +Note	1592	Statement may not be safe to log in statement format.
> +UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
> +Warnings:
> +Note	1592	Statement may not be safe to log in statement format.
> +DROP TABLE t1;
> +### NOT filtered database => assertion: binlog disabled and warnings ARE NOT
> shown
> +SET SQL_LOG_BIN= 0;
> +DROP TABLE IF EXISTS t1;
> +CREATE TABLE t1 (a int, b int, primary key (a));
> +INSERT INTO t1 VALUES (1,2), (2,3);
> +UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
> +UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
> +DROP TABLE t1;
> +SET SQL_LOG_BIN= 1;
> +### FILTERED database => assertion: warnings ARE NOT shown
> +CREATE DATABASE b42851;
> +USE b42851;
> +DROP TABLE IF EXISTS t1;
> +CREATE TABLE t1 (a int, b int, primary key (a));
> +INSERT INTO t1 VALUES (1,2), (2,3);
> +UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
> +UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
> +DROP TABLE t1;
> +DROP DATABASE b42851;
> 
> === added file 'mysql-test/suite/binlog/t/limit_warning-master.opt'
> --- a/mysql-test/suite/binlog/t/limit_warning-master.opt	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/binlog/t/limit_warning-master.opt	2009-06-05 09:09:59 +0000
> @@ -0,0 +1 @@
> +--binlog-ignore-db=b42851
> 
> === added file 'mysql-test/suite/binlog/t/limit_warning.test'
> --- a/mysql-test/suite/binlog/t/limit_warning.test	1970-01-01 00:00:00 +0000
> +++ b/mysql-test/suite/binlog/t/limit_warning.test	2009-06-05 09:09:59 +0000
> @@ -0,0 +1,73 @@
> +# BUG#42851: Spurious "Statement is not safe to log in statement
> +#            format." warnings
> +#
> +# WHY
> +# ===
> +#   
> +#   This test aims at checking that the fix that removes spurious
> +#   entries in the error log when the statement is filtered out from
> +#   binlog, is working.
> +#
> +# HOW
> +# ===
> +#
> +#   The test case is split into three assertions when issuing statements
> +#   containing LIMIT and ORDER BY:
> +#
> +#     i) issue statements in database that is not filtered => check
> +#        that warnings ARE shown;
> +#
> +#    ii) issue statements in database that is not filtered, but with
> +#        binlog disabled => check that warnings ARE NOT shown;
> +#
> +#   iii) issue statements in database that is filtered => check that
> +#        warnings ARE NOT shown.
> +
> +-- source include/have_log_bin.inc
> +-- source include/have_binlog_format_statement.inc
> +
> +-- echo ### NOT filtered database => assertion: warnings ARE shown
> +
> +-- disable_warnings
> +DROP TABLE IF EXISTS t1;
> +-- enable_warnings
> +
> +CREATE TABLE t1 (a int, b int, primary key (a));
> +INSERT INTO t1 VALUES (1,2), (2,3);
> +UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
> +UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
> +DROP TABLE t1;
> +
> +-- echo ### NOT filtered database => assertion: binlog disabled and warnings ARE
> NOT shown
> +
> +SET SQL_LOG_BIN= 0;
> +
> +-- disable_warnings
> +DROP TABLE IF EXISTS t1;
> +-- enable_warnings
> +
> +CREATE TABLE t1 (a int, b int, primary key (a));
> +INSERT INTO t1 VALUES (1,2), (2,3);
> +UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
> +UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
> +DROP TABLE t1;
> +
> +SET SQL_LOG_BIN= 1;
> +
> +-- echo ### FILTERED database => assertion: warnings ARE NOT shown
> +
> +CREATE DATABASE b42851;
> +USE b42851;
> +
> +-- disable_warnings
> +DROP TABLE IF EXISTS t1;
> +-- enable_warnings
> +
> +CREATE TABLE t1 (a int, b int, primary key (a));
> +INSERT INTO t1 VALUES (1,2), (2,3);
> +UPDATE t1 SET b='4' WHERE a=1 LIMIT 1;
> +UPDATE t1 SET b='5' WHERE a=2 ORDER BY a LIMIT 1;
> +DROP TABLE t1;
> +
> +# clean up
> +DROP DATABASE b42851;
> 
> === modified file 'sql/sql_class.cc'
> --- a/sql/sql_class.cc	2009-05-30 13:32:28 +0000
> +++ b/sql/sql_class.cc	2009-06-05 09:09:59 +0000
> @@ -27,6 +27,7 @@
>  
>  #include "mysql_priv.h"
>  #include "rpl_rli.h"
> +#include "rpl_filter.h"
>  #include "rpl_record.h"
>  #include "slave.h"
>  #include <my_bitmap.h>
> @@ -3683,7 +3684,8 @@ int THD::binlog_query(THD::enum_binlog_q
>      we should print a warning.
>    */
>    if (sql_log_bin_toplevel && lex->is_stmt_unsafe() &&
> -      variables.binlog_format == BINLOG_FORMAT_STMT)
> +      variables.binlog_format == BINLOG_FORMAT_STMT && 
> +      binlog_filter->db_ok(this->db))
>    {
>     /*
>       A warning can be elevated a error when STRICT sql mode.
> 

Thread
bzr commit into mysql-5.1-bugteam branch (luis.soares:2917) Bug#42851Luis Soares5 Jun
  • Re: bzr commit into mysql-5.1-bugteam branch (luis.soares:2917)Bug#42851He Zhenxing5 Jun