He Zhenxing, hei-hei!
thanks for the prompt review!
> Hi, Andrei
>
> I think your patch is good and OK to push!
>
> Just one comment, I think maybe it's better to put the test case in
> suite/bugs and name it something like rpl_bug38798.test. But I am OK if
> you don't agree with me on this.
I'd rather to keep this new binlog_off test in the main suite. To explain why,
the current is not the first case of a failure in replication code
when binlogging is OFF. So far we have not had a test checking if the
replication/binlogging algorithems are properly shut off.
We might fill in binlog_off more cases along the time.
cheers,
Andrei
>
>
> Andrei Elkin wrote:
>> #At file:///home/andrei/MySQL/BZR/FIXES/5.1-bug38798-assert_binlog_open/
>>
>> 2719 Andrei Elkin 2008-08-26
>> Bug #38798 Assertion mysql_bin_log.is_open() failed in
> binlog_trans_log_savepos()
>>
>> The assert is about binlogging must have been activated, but it was not
> actually according
>> to the reported how-to-repeat instuctions.
>> Analysis revealed that binlog_start_trans_and_stmt() was called without
> prior testing
>> if binlogging is ON.
>>
>> Fixed with avoing entering binlog_start_trans_and_stmt() if binlog is not
> activated.
>> added:
>> mysql-test/r/binlog_off.result
>> mysql-test/t/binlog_off-master.opt
>> mysql-test/t/binlog_off.test
>> modified:
>> sql/sql_insert.cc
>>
>> per-file messages:
>> mysql-test/r/binlog_off.result
>> new results file
>> mysql-test/t/binlog_off-master.opt
>> the option to deactivate binlogging
>> mysql-test/t/binlog_off.test
>> regression test for the bug
>> sql/sql_insert.cc
>> avoing entering binlog_start_trans_and_stmt() if binlog is not activated.
>> === added file 'mysql-test/r/binlog_off.result'
>> --- a/mysql-test/r/binlog_off.result 1970-01-01 00:00:00 +0000
>> +++ b/mysql-test/r/binlog_off.result 2008-08-26 17:01:49 +0000
>> @@ -0,0 +1,6 @@
>> +DROP TABLE IF EXISTS t1, t2;
>> +set @@session.binlog_format=row;
>> +create table t1 (a int);
>> +insert into t1 values (1);
>> +create table t2 select * from t1;
>> +drop table t1, t2;
>>
>> === added file 'mysql-test/t/binlog_off-master.opt'
>> --- a/mysql-test/t/binlog_off-master.opt 1970-01-01 00:00:00 +0000
>> +++ b/mysql-test/t/binlog_off-master.opt 2008-08-26 17:01:49 +0000
>> @@ -0,0 +1 @@
>> +--loose-skip-log-bin
>>
>> === added file 'mysql-test/t/binlog_off.test'
>> --- a/mysql-test/t/binlog_off.test 1970-01-01 00:00:00 +0000
>> +++ b/mysql-test/t/binlog_off.test 2008-08-26 17:01:49 +0000
>> @@ -0,0 +1,22 @@
>> +#
>> +# binlog_off.test purpose is check that algorithms dealing with binlogging
>> +# are robbust to sustain --skip-log-bin
>> +#
>> +
>> +--disable_warnings
>> +DROP TABLE IF EXISTS t1, t2;
>> +--enable_warnings
>> +
>> +#
>> +# Bug #38798 Assertion mysql_bin_log.is_open() failed in
>> +# binlog_trans_log_savepos()
>> +# testing that there is no crash
>> +
>> +set @@session.binlog_format=row;
>> +
>> +create table t1 (a int);
>> +insert into t1 values (1);
>> +create table t2 select * from t1;
>> +
>> +# clean-up
>> +drop table t1, t2;
>>
>> === modified file 'sql/sql_insert.cc'
>> --- a/sql/sql_insert.cc 2008-07-11 18:51:10 +0000
>> +++ b/sql/sql_insert.cc 2008-08-26 17:01:49 +0000
>> @@ -3523,7 +3523,8 @@ select_create::prepare(List<Item> &value
>> temporary table, we need to start a statement transaction.
>> */
>> if ((thd->lex->create_info.options & HA_LEX_CREATE_TMP_TABLE) == 0
> &&
>> - thd->current_stmt_binlog_row_based)
>> + thd->current_stmt_binlog_row_based &&
>> + (thd->options & OPTION_BIN_LOG) &&
> mysql_bin_log.is_open())
>> {
>> thd->binlog_start_trans_and_stmt();
>> }
>> @@ -3619,10 +3620,11 @@ select_create::binlog_show_create_table(
>> result= store_create_info(thd, &tmp_table_list, &query, create_info);
>> DBUG_ASSERT(result == 0); /* store_create_info() always return 0 */
>>
>> - thd->binlog_query(THD::STMT_QUERY_TYPE,
>> - query.ptr(), query.length(),
>> - /* is_trans */ TRUE,
>> - /* suppress_use */ FALSE);
>> + if ((thd->options & OPTION_BIN_LOG) &&
> mysql_bin_log.is_open())
>> + thd->binlog_query(THD::STMT_QUERY_TYPE,
>> + query.ptr(), query.length(),
>> + /* is_trans */ TRUE,
>> + /* suppress_use */ FALSE);
>> }
>>
>> void select_create::store_values(List<Item> &values)
>>
>
>
>
> --
> MySQL Code Commits Mailing List
> For list archives: http://lists.mysql.com/commits
> To unsubscribe: http://lists.mysql.com/commits?unsub=1