List:Commits« Previous MessageNext Message »
From:Andrei Elkin Date:August 29 2008 4:01pm
Subject:bzr commit into mysql-5.1 branch (aelkin:2725) Bug#38798
View as plain text  
#At file:///home/andrei/MySQL/BZR/FIXES/5.1-bugteam-bug38798-assert_binlog_open/

 2725 Andrei Elkin	2008-08-29
      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/skip_log_bin.result
  mysql-test/t/skip_log_bin-master.opt
  mysql-test/t/skip_log_bin.test
modified:
  sql/sql_insert.cc

per-file messages:
  mysql-test/r/skip_log_bin.result
    new results file.
  mysql-test/t/skip_log_bin-master.opt
    the option to deactivate binlogging.
  mysql-test/t/skip_log_bin.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/skip_log_bin.result'
--- a/mysql-test/r/skip_log_bin.result	1970-01-01 00:00:00 +0000
+++ b/mysql-test/r/skip_log_bin.result	2008-08-29 14:01:16 +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/skip_log_bin-master.opt'
--- a/mysql-test/t/skip_log_bin-master.opt	1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/skip_log_bin-master.opt	2008-08-29 14:01:16 +0000
@@ -0,0 +1 @@
+--loose-skip-log-bin

=== added file 'mysql-test/t/skip_log_bin.test'
--- a/mysql-test/t/skip_log_bin.test	1970-01-01 00:00:00 +0000
+++ b/mysql-test/t/skip_log_bin.test	2008-08-29 14:01:16 +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-29 14:01:16 +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 &&
+      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 (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)

Thread
bzr commit into mysql-5.1 branch (aelkin:2725) Bug#38798Andrei Elkin29 Aug