mirror of
https://github.com/MariaDB/server.git
synced 2025-01-17 20:42:30 +01:00
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.
This commit is contained in:
parent
a627a47282
commit
44b82b3eca
4 changed files with 39 additions and 5 deletions
6
mysql-test/r/skip_log_bin.result
Normal file
6
mysql-test/r/skip_log_bin.result
Normal file
|
@ -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;
|
1
mysql-test/t/skip_log_bin-master.opt
Normal file
1
mysql-test/t/skip_log_bin-master.opt
Normal file
|
@ -0,0 +1 @@
|
|||
--loose-skip-log-bin
|
25
mysql-test/t/skip_log_bin.test
Normal file
25
mysql-test/t/skip_log_bin.test
Normal file
|
@ -0,0 +1,25 @@
|
|||
#
|
||||
# binlog_off.test purpose is to verify that the --skip-log-bin flag
|
||||
# works correctly
|
||||
#
|
||||
|
||||
--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.
|
||||
# Before BUG#38798, the code for CREATE...SELECT called an internal function to
|
||||
# binlog the statement, even with --skip-log-bin. This caused an assertion
|
||||
# to be thrown since the binlog was not open.
|
||||
|
||||
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;
|
|
@ -3523,7 +3523,8 @@ select_create::prepare(List<Item> &values, SELECT_LEX_UNIT *u)
|
|||
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 &&
|
||||
mysql_bin_log.is_open())
|
||||
{
|
||||
thd->binlog_start_trans_and_stmt();
|
||||
}
|
||||
|
@ -3619,10 +3620,11 @@ select_create::binlog_show_create_table(TABLE **tables, uint count)
|
|||
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 (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)
|
||||
|
|
Loading…
Reference in a new issue