Bug #38798 Assertion mysql_bin_log.is_open() failed in binlog_trans_log_savepos()

Submitted: 14 Aug 2008 13:36 Modified: 15 Sep 2008 17:13
Reporter: Philip Stoev Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Replication Severity:S1 (Critical)
Version:5.1, 6.0 bzr OS:Any
Assigned to: Andrei Elkin CPU Architecture:Any

[14 Aug 2008 13:36] Philip Stoev
Description:
When executing a concurrent workload meant to test replication, the master asserted as follows:

#8  0x003df57e in __assert_fail () from /lib/libc.so.6
#9  0x082ff973 in binlog_trans_log_savepos (thd=0x93c0dc0, pos=0xb2b87ea8) at log.cc:1272
#10 0x082ffa13 in THD::binlog_set_stmt_begin (this=0x93c0dc0) at log.cc:3652
#11 0x082ffb19 in THD::binlog_start_trans_and_stmt (this=0x93c0dc0) at log.cc:3623
#12 0x082dc67e in select_create::prepare (this=0x93d1bc8, values=@0x93c21bc, u=0x93c1eb0) at sql_insert.cc:3528
#13 0x082d43b5 in JOIN::prepare (this=0x93d1c60, rref_pointer_array=0x93c2220, tables_init=0x93d19d0, wild_num=1, conds_init=0x0, og_num=0, order_init=0x0,
    group_init=0x0, having_init=0x0, proc_param_init=0x0, select_lex_arg=0x93c2128, unit_arg=0x93c1eb0) at sql_select.cc:629
#14 0x082d47ae in mysql_select (thd=0x93c0dc0, rref_pointer_array=0x93c2220, tables=0x93d19d0, wild_num=1, fields=@0x93c21bc, conds=0x0, og_num=0,
    order=0x0, group=0x0, having=0x0, proc_param=0x0, select_options=2416200192, result=0x93d1bc8, unit=0x93c1eb0, select_lex=0x93c2128)
    at sql_select.cc:2338
#15 0x082d9524 in handle_select (thd=0x93c0dc0, lex=0x93c1e54, result=0x93d1bc8, setup_tables_done_option=0) at sql_select.cc:269
#16 0x08257e5c in mysql_execute_command (thd=0x93c0dc0) at sql_parse.cc:2503
#17 0x0825f95c in mysql_parse (thd=0x93c0dc0, inBuf=0x93d1650 "CREATE TABLE n SELECT * FROM o ; TRUNCATE TABLE n", length=49, found_semicolon=0xb2b8925c)
    at sql_parse.cc:5650
#18 0x08260533 in dispatch_command (command=COM_QUERY, thd=0x93c0dc0, packet=0x93c55c9 "CREATE TABLE n SELECT * FROM o ; TRUNCATE TABLE n", packet_length=49)
    at sql_parse.cc:1137
#19 0x08261692 in do_command (thd=0x93c0dc0) at sql_parse.cc:794
#20 0x0824ede6 in handle_one_connection (arg=0x93c0dc0) at sql_connect.cc:1115
#21 0x0057d32f in start_thread () from /lib/libpthread.so.0
#22 0x0049a27e in clone () from /lib/libc.so.6

(gdb) list
1267      DBUG_ASSERT(pos != NULL);
1268      if (thd_get_ha_data(thd, binlog_hton) == NULL)
1269        thd->binlog_setup_trx_data();
1270      binlog_trx_data *const trx_data=
1271        (binlog_trx_data*) thd_get_ha_data(thd, binlog_hton);
1272      DBUG_ASSERT(mysql_bin_log.is_open()); <<<<<< HERE
1273      *pos= trx_data->position();
1274      DBUG_PRINT("return", ("*pos: %lu", (ulong) *pos));
1275      DBUG_VOID_RETURN;
1276    }

(gdb) print mysql_bin_log.is_open
$6 = {bool (MYSQL_LOG *)} 0x81bb18a <MYSQL_LOG::is_open()>
(gdb) print (bool) mysql_bin_log.is_open
$7 = false

How to repeat:
This bug is repeatable, a test case will be uploaded shortly.
[14 Aug 2008 14:15] Philip Stoev
SQL Grammar file for bug 38798

Attachment: bug38798.yy (application/octet-stream, text), 410 bytes.

[14 Aug 2008 14:24] Philip Stoev
To reproduce this bug, please clone the mysql-test-extra-6.0 tree and execute:

$ cd mysql-test-extra-6.0/mysql-test/gentest
$ perl runall.pl \
  --basedir=/path/to/mysql-5.1 \
  --grammar=conf/bug38798.yy \
  --threads=1

This will proceed to run a non-concurrent random test from the queries in the grammar file - START TRANSACTION, CREATE ... SELECT and INSERT. The special thing is that the INSERT is ran under BINLOG_FORMAT=ROW whereas the system default is MIXED.

Crash will happen after a few dozen queries. Since this test is not concurrent, technically it should not have required the full Random Query Generation framework, however when I tried to execute the queries with the client, no crash was observed.

Let me know if I can help with anything else.
[15 Aug 2008 8:57] Sveta Smirnova
Thank you for the report.

Verified as described.
[26 Aug 2008 16:49] Andrei Elkin
The issue looks to be of a critical character as the problem can be reproduced merely with running 4 queries (to be shown in a test that is coming with the patch).
[26 Aug 2008 17:02] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52583

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.
[29 Aug 2008 13:53] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52910

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.
[29 Aug 2008 14:02] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52911

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.
[29 Aug 2008 14:06] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52912

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.
[29 Aug 2008 14:20] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52914

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.
[29 Aug 2008 14:31] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52915

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.
[29 Aug 2008 14:40] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52916

2809 Andrei Elkin	2008-08-29 [merge]
      Bug #38798 Assertion mysql_bin_log.is_open() failed in binlog_trans_log_savepos()
      
      merging with 5.1-bugteam
[29 Aug 2008 15:16] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52917

2809 Andrei Elkin	2008-08-29 [merge]
      Bug #38798 Assertion mysql_bin_log.is_open() failed in binlog_trans_log_savepos()
      
      merging with 5.1-bugteam
[29 Aug 2008 15:17] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/52918

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.
[1 Sep 2008 8:38] Andrei Elkin
pushed to {5.1,6.0}-bugteam.
[13 Sep 2008 20:53] Bugs System
Pushed into 6.0.7-alpha  (revid:aelkin@mysql.com-20080829142008-m69x26h090nh4ibu) (version source revid:hakan@mysql.com-20080725175322-8wgujj5xuzrjz3ke) (pib:3)
[15 Sep 2008 17:13] Jon Stephens
Documented in the 5.1.29 and 6.0.7 changelogs as follows:

        Server code used in binary logging could in some cases be invoked even
        though binary logging was not actually enabled, leading to asserts and
        other server errors.
[1 Oct 2008 16:07] Bugs System
Pushed into 5.1.28  (revid:aelkin@mysql.com-20080829142008-m69x26h090nh4ibu) (version source revid:aelkin@mysql.com-20080829142008-m69x26h090nh4ibu) (pib:4)
[28 Oct 2008 21:03] Bugs System
Pushed into 5.1.29-ndb-6.2.17  (revid:aelkin@mysql.com-20080829142008-m69x26h090nh4ibu) (version source revid:tomas.ulin@sun.com-20081028140209-u4emkk1xphi5tkfb) (pib:5)
[28 Oct 2008 22:21] Bugs System
Pushed into 5.1.29-ndb-6.3.19  (revid:aelkin@mysql.com-20080829142008-m69x26h090nh4ibu) (version source revid:tomas.ulin@sun.com-20081028194045-0353yg8cvd2c7dd1) (pib:5)
[1 Nov 2008 9:46] Bugs System
Pushed into 5.1.29-ndb-6.4.0  (revid:aelkin@mysql.com-20080829142008-m69x26h090nh4ibu) (version source revid:jonas@mysql.com-20081101082305-qx5a1bj0z7i8ueys) (pib:5)

Portions of this website are copyright © 2001, 2002 The PHP Group

Page generated in 0.052 sec. using MySQL 8.4.7-u6-cloud

Timestamp references displayed by the system are UTC.
Content reproduced on this site is the property of the respective copyright holders.
It is not reviewed in advance by Oracle and does not necessarily represent the opinion of Oracle or any other party.