List:Commits« Previous MessageNext Message »
From:Luís Soares Date:November 11 2010 12:37pm
Subject:Re: bzr commit into mysql-5.5-bugteam branch (Dao-Gang.Qu:3118) Bug#57666
View as plain text  
Hi Dao-Gang,

    Patch looks good, but you need to fix:
    rpl.rpl_stm_insert_delayed 'stmt'

    before pushing.

CURRENT_TEST: rpl.rpl_stm_insert_delayed
--- 
/home/lsoares/Workspace/bzr/work/reviews/b57666/mysql-5.5-bugteam/mysql-test/suite/rpl/r/rpl_stm_insert_delayed.result

2010-11-11 01:07:56.549236000 +0300
+++ 
/home/lsoares/Workspace/bzr/work/reviews/b57666/mysql-5.5-bugteam/mysql-test/suite/rpl/r/rpl_stm_insert_delayed.reject

2010-11-11 15:36:30.551453999 +0300
@@ -51,8 +51,8 @@
  INSERT DELAYED IGNORE INTO t1 VALUES(1);
  INSERT DELAYED IGNORE INTO t1 VALUES(1);
  flush table t1;
-use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1)
-use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1)
+use `test`; INSERT  IGNORE INTO t1 VALUES(1)
+use `test`; INSERT  IGNORE INTO t1 VALUES(1)
  select * from t1;
  a
  1
@@ -60,10 +60,10 @@
  show binlog events in 'slave-bin.000002' from <binlog_start> limit 1,6;
  Log_name	Pos	Event_type	Server_id	End_log_pos	Info
  slave-bin.000002	#	Query	#	#	BEGIN
-slave-bin.000002	#	Query	#	#	use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1)
+slave-bin.000002	#	Query	#	#	use `test`; INSERT  IGNORE INTO t1 VALUES(1)
  slave-bin.000002	#	Query	#	#	COMMIT
  slave-bin.000002	#	Query	#	#	BEGIN
-slave-bin.000002	#	Query	#	#	use `test`; INSERT DELAYED IGNORE INTO t1 VALUES(1)
+slave-bin.000002	#	Query	#	#	use `test`; INSERT  IGNORE INTO t1 VALUES(1)
  slave-bin.000002	#	Query	#	#	COMMIT
  select * from t1;
  a


Regards,
Luís

On 11/11/2010 09:49 AM, Dao-Gang.Qu@stripped wrote:
> #At file:///home/daogang/bzrwork/bug57666/mysql-5.5-bugteam/ based on
> revid:vvaintroub@stripped
>
>   3118 Dao-Gang.Qu@stripped	2010-11-11
>        Bug #57666  Unclear warning with broken text in error log on INSERT DELAYED
>
>        It is not necessary to support INSERT DELAYED for a single value insert,
>        while we do not support that for multi-values insert when binlog is
>        enabled in SBR.
>
>        The lock_type is upgrade to TL_WRITE from TL_WRITE_DELAYED for
>        INSERT DELAYED for single value insert as multi-values insert
>        did when binlog is enabled. Then it's safe. And binlog it as
>        INSERT without DELAYED.
>       @ mysql-test/extra/binlog_tests/binlog_insert_delayed.test
>          Added test case for bug#57666.
>       @ mysql-test/suite/binlog/r/binlog_row_binlog.result
>          Updated for bug#57666
>       @ mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result
>          Updated for bug#57666
>       @ mysql-test/suite/binlog/r/binlog_stm_binlog.result
>          Updated for bug#57666
>       @ sql/sql_insert.cc
>          Updated code for the following things:
>          1. Upgrade the lock_type to TL_WRITE from TL_WRITE_DELAYED
>          for INSERT DELAYED for single value insert as multi-values
>          insert did when binlog is enabled.
>          2. Clear code to not binlog INSERT DELAYED STMT in SBR.
>          3. Get rid of privilege check for log_on.
>
>      modified:
>        mysql-test/extra/binlog_tests/binlog_insert_delayed.test
>        mysql-test/suite/binlog/r/binlog_row_binlog.result
>        mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result
>        mysql-test/suite/binlog/r/binlog_stm_binlog.result
>        sql/sql_insert.cc
> === modified file 'mysql-test/extra/binlog_tests/binlog_insert_delayed.test'
> --- a/mysql-test/extra/binlog_tests/binlog_insert_delayed.test	2010-08-30 06:03:28
> +0000
> +++ b/mysql-test/extra/binlog_tests/binlog_insert_delayed.test	2010-11-11 09:49:28
> +0000
> @@ -34,11 +34,11 @@ create table t1 (a int not null auto_inc
>   let $table=t1;
>   let $count=0;
>
> -insert delayed into t1 values (207);
> +insert /* before delayed */ delayed /* after delayed */ into t1 values (207);
>   inc $count;
>   --source include/wait_until_rows_count.inc
>
> -insert delayed into t1 values (null);
> +insert /*! delayed */ into t1 values (null);
>   inc $count;
>   --source include/wait_until_rows_count.inc
>
>
> === modified file 'mysql-test/suite/binlog/r/binlog_row_binlog.result'
> --- a/mysql-test/suite/binlog/r/binlog_row_binlog.result	2010-08-30 06:03:28 +0000
> +++ b/mysql-test/suite/binlog/r/binlog_row_binlog.result	2010-11-11 09:49:28 +0000
> @@ -1218,8 +1218,8 @@ master-bin.000001	#	Delete_rows	#	#	tabl
>   master-bin.000001	#	Query	#	#	COMMIT
>   drop table t1,t2,t3,tt1;
>   create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
> -insert delayed into t1 values (207);
> -insert delayed into t1 values (null);
> +insert /* before delayed */ delayed /* after delayed */ into t1 values (207);
> +insert /*! delayed */ into t1 values (null);
>   insert delayed into t1 values (300);
>   FLUSH TABLES;
>   show binlog events from<binlog_start>;
>
> === modified file 'mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result'
> --- a/mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result	2010-08-30
> 06:03:28 +0000
> +++ b/mysql-test/suite/binlog/r/binlog_statement_insert_delayed.result	2010-11-11
> 09:49:28 +0000
> @@ -1,6 +1,6 @@
>   create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
> -insert delayed into t1 values (207);
> -insert delayed into t1 values (null);
> +insert /* before delayed */ delayed /* after delayed */ into t1 values (207);
> +insert /*! delayed */ into t1 values (null);
>   insert delayed into t1 values (300);
>   FLUSH TABLES;
>   show binlog events from<binlog_start>;
> @@ -10,14 +10,14 @@ master-bin.000001	#	Query	#	#	use `mtr`;
>   master-bin.000001	#	Query	#	#	COMMIT
>   master-bin.000001	#	Query	#	#	use `test`; create table t1 (a int not null
> auto_increment, primary key (a)) engine=myisam
>   master-bin.000001	#	Query	#	#	BEGIN
> -master-bin.000001	#	Query	#	#	use `test`; insert delayed into t1 values (207)
> +master-bin.000001	#	Query	#	#	use `test`; insert /* before delayed */  /* after
> delayed */ into t1 values (207)
>   master-bin.000001	#	Query	#	#	COMMIT
>   master-bin.000001	#	Query	#	#	BEGIN
>   master-bin.000001	#	Intvar	#	#	INSERT_ID=208
> -master-bin.000001	#	Query	#	#	use `test`; insert delayed into t1 values (null)
> +master-bin.000001	#	Query	#	#	use `test`; insert /*!  */ into t1 values (null)
>   master-bin.000001	#	Query	#	#	COMMIT
>   master-bin.000001	#	Query	#	#	BEGIN
> -master-bin.000001	#	Query	#	#	use `test`; insert delayed into t1 values (300)
> +master-bin.000001	#	Query	#	#	use `test`; insert  into t1 values (300)
>   master-bin.000001	#	Query	#	#	COMMIT
>   master-bin.000001	#	Query	#	#	use `test`; FLUSH TABLES
>   RESET MASTER;
>
> === modified file 'mysql-test/suite/binlog/r/binlog_stm_binlog.result'
> --- a/mysql-test/suite/binlog/r/binlog_stm_binlog.result	2010-08-30 06:03:28 +0000
> +++ b/mysql-test/suite/binlog/r/binlog_stm_binlog.result	2010-11-11 09:49:28 +0000
> @@ -717,8 +717,8 @@ master-bin.000001	#	Query	#	#	use `mysql
>   master-bin.000001	#	Query	#	#	COMMIT
>   drop table t1,t2,t3,tt1;
>   create table t1 (a int not null auto_increment, primary key (a)) engine=myisam;
> -insert delayed into t1 values (207);
> -insert delayed into t1 values (null);
> +insert /* before delayed */ delayed /* after delayed */ into t1 values (207);
> +insert /*! delayed */ into t1 values (null);
>   insert delayed into t1 values (300);
>   FLUSH TABLES;
>   show binlog events from<binlog_start>;
>
> === modified file 'sql/sql_insert.cc'
> --- a/sql/sql_insert.cc	2010-10-07 10:01:51 +0000
> +++ b/sql/sql_insert.cc	2010-11-11 09:49:28 +0000
> @@ -419,8 +419,7 @@ void prepare_triggers_for_insert_stmt(TA
>
>   static
>   void upgrade_lock_type(THD *thd, thr_lock_type *lock_type,
> -                       enum_duplicates duplic,
> -                       bool is_multi_insert)
> +                       enum_duplicates duplic)
>   {
>     if (duplic == DUP_UPDATE ||
>         (duplic == DUP_REPLACE&&  *lock_type == TL_WRITE_CONCURRENT_INSERT))
> @@ -469,10 +468,9 @@ void upgrade_lock_type(THD *thd, thr_loc
>         return;
>       }
>
> -    bool log_on= (thd->variables.option_bits&  OPTION_BIN_LOG ||
> -                  ! (thd->security_ctx->master_access&  SUPER_ACL));
> +    bool log_on= (thd->variables.option_bits&  OPTION_BIN_LOG);
>       if (global_system_variables.binlog_format == BINLOG_FORMAT_STMT&&
> -        log_on&&  mysql_bin_log.is_open()&&  is_multi_insert)
> +        log_on&&  mysql_bin_log.is_open())
>       {
>         /*
>           Statement-based binary logging does not work in this case, because:
> @@ -680,8 +678,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *t
>       By default, both logs are enabled (this won't cause problems if the server
>       runs without --log-bin).
>     */
> -  bool log_on= ((thd->variables.option_bits&  OPTION_BIN_LOG) ||
> -                (!(thd->security_ctx->master_access&  SUPER_ACL)));
> +  bool log_on= (thd->variables.option_bits&  OPTION_BIN_LOG);
>   #endif
>     thr_lock_type lock_type;
>     Item *unused_conds= 0;
> @@ -691,8 +688,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *t
>       Upgrade lock type if the requested lock is incompatible with
>       the current connection mode or table operation.
>     */
> -  upgrade_lock_type(thd,&table_list->lock_type, duplic,
> -                    values_list.elements>  1);
> +  upgrade_lock_type(thd,&table_list->lock_type, duplic);
>
>     /*
>       We can't write-delayed into a table locked with LOCK TABLES:
> @@ -1025,7 +1021,7 @@ bool mysql_insert(THD *thd,TABLE_LIST *t
>   	DBUG_ASSERT(thd->killed != THD::KILL_BAD_DATA || error>  0);
>           if (was_insert_delayed&&  table_list->lock_type ==  TL_WRITE)
>           {
> -          /* Binlog multi INSERT DELAYED as INSERT without DELAYED. */
> +          /* Binlog INSERT DELAYED as INSERT without DELAYED. */
>             String log_query;
>             if (create_insert_stmt_from_insert_delayed(thd,&log_query))
>             {
> @@ -2912,6 +2908,13 @@ bool Delayed_insert::handle_inserts(void
>       if (log_query)
>       {
>         /*
> +        Guaranteed that the INSERT DELAYED STMT will not be here
> +        in SBR when mysql binlog is enabled.
> +      */
> +      DBUG_ASSERT(!(mysql_bin_log.is_open()&&
> +                    !thd.is_current_stmt_binlog_format_row()));
> +
> +      /*
>           This is the first value of an INSERT statement.
>           It is the right place to clear a forced insert_id.
>           This is usually done after the last value of an INSERT statement,
> @@ -2978,39 +2981,6 @@ bool Delayed_insert::handle_inserts(void
>         table->file->extra(HA_EXTRA_WRITE_CANNOT_REPLACE);
>       }
>
> -    if (log_query&&  mysql_bin_log.is_open())
> -    {
> -      bool backup_time_zone_used = thd.time_zone_used;
> -      Time_zone *backup_time_zone = thd.variables.time_zone;
> -      if (row->time_zone != NULL)
> -      {
> -        thd.time_zone_used = true;
> -        thd.variables.time_zone = row->time_zone;
> -      }
> -
> -      /* if the delayed insert was killed, the killed status is
> -         ignored while binlogging */
> -      int errcode= 0;
> -      if (thd.killed == THD::NOT_KILLED)
> -        errcode= query_error_code(&thd, TRUE);
> -
> -      /*
> -        If the query has several rows to insert, only the first row will come
> -        here. In row-based binlogging, this means that the first row will be
> -        written to binlog as one Table_map event and one Rows event (due to an
> -        event flush done in binlog_query()), then all other rows of this query
> -        will be binlogged together as one single Table_map event and one
> -        single Rows event.
> -      */
> -      if (thd.binlog_query(THD::ROW_QUERY_TYPE,
> -                           row->query.str, row->query.length,
> -                           FALSE, FALSE, FALSE, errcode))
> -        goto err;
> -
> -      thd.time_zone_used = backup_time_zone_used;
> -      thd.variables.time_zone = backup_time_zone;
> -    }
> -
>       if (table->s->blob_fields)
>         free_delayed_insert_blobs(table);
>       thread_safe_decrement(delayed_rows_in_use,&LOCK_delayed_status);
>
>
>
>
>

Thread
bzr commit into mysql-5.5-bugteam branch (Dao-Gang.Qu:3118) Bug#57666Dao-Gang.Qu11 Nov
  • Re: bzr commit into mysql-5.5-bugteam branch (Dao-Gang.Qu:3118) Bug#57666Luís Soares11 Nov
    • Re: bzr commit into mysql-5.5-bugteam branch (Dao-Gang.Qu:3118)Bug#57666Daogang Qu11 Nov
  • Re: bzr commit into mysql-5.5-bugteam branch (Dao-Gang.Qu:3118) Bug#57666Sven Sandberg15 Nov
    • Re: bzr commit into mysql-5.5-bugteam branch (Dao-Gang.Qu:3118)Bug#57666Daogang Qu16 Nov
    • Re: bzr commit into mysql-5.5-bugteam branch (Dao-Gang.Qu:3118)Bug#57666Daogang Qu17 Nov
      • Re: bzr commit into mysql-5.5-bugteam branch (Dao-Gang.Qu:3118) Bug#57666Sven Sandberg17 Nov