Bug #75245 Segfault on large row purge in main thread on startup

Submitted: 17 Dec 2014 14:16 Modified: 24 Dec 2014 10:05
Reporter: Tyler Mitchell Email Updates:
Status: Duplicate Impact on me:
None 
Category:MySQL Server: InnoDB storage engine Severity:S1 (Critical)
Version:5.5.41, 5.6.22, 5.6.23 OS:Linux (x86_64)
Assigned to: CPU Architecture:Any
Tags: 139, ib_warn_row_too_big, innodb, purge

[17 Dec 2014 14:16] Tyler Mitchell
Description:
Server upgraded from 5.5.40 to 5.5.41 via yum.

Next startup segfaulted immediately (<1s) after startup. Loading the server in innodb_force_recovery = 2 was sufficient to allow MySQL to start (ifr = 1 failed).

No solution was found; reverting to 5.5.40 allowed successful startup.

How to repeat:
Unsure of exact mechanism to reproduce. Error seems to indicate that generating sql errorno 139 in the purge thread is sufficient to reproduce; however, no test case has been generated. This has occurred on 3 environments so far with all yielding an identical stack trace. See attached backtrace for reference.
[17 Dec 2014 14:16] Tyler Mitchell
Stack trace

Attachment: bt_ib_warn_row_too_big_segv.txt (text/plain), 5.90 KiB.

[17 Dec 2014 14:17] Tyler Mitchell
my.cnf

Attachment: mycnf_ib_warn_row_too_big_segv.txt (text/plain), 2.25 KiB.

[17 Dec 2014 15:12] Tyler Mitchell
We have now received an instance of this occurring on 5.6.22 with an identical call stack. Reverting to 5.6.21 resolved the behavior.
[17 Dec 2014 19:58] Tyler Mitchell
Adding steps to reproduce. Changing severity to critical as there is no known resolution except to downgrade a version.
[19 Dec 2014 19:22] Sveta Smirnova
Thank you for the  report.

Verified as described using latest test case.
[21 Dec 2014 12:54] Shane Bester
Looks like duplicate of:
https://bugs.mysql.com/bug.php?id=75095
[24 Dec 2014 10:05] Thirunarayanan Balathandayuthapani
It is a duplicate of https://bugs.mysql.com/bug.php?id=75095
[20 May 2015 14:39] Sergei Glushchenko
Please mark as fixed

commit 901ce5314b6b0d4115b0237491e2afaafe5a274e
Author: Thiru <thirunarayanan.balathandayuth@oracle.com>
Commit: Thiru <thirunarayanan.balathandayuth@oracle.com>

    Bug #20144839       AFTER UPDATING TO MYSQL 5.6.22 SERVER
                CRASHES ON EVERY START ATTEMPT

    Description:
    ------------
    push_warning_printf function is used to print the warning message
    to the client. So this function should not invoke while recovering
    the server. Moreover current_thd is NULL while starting the server.

    Solution:
    ---------
     - Avoiding the warning to be printed while recovery.
    This patch already pushed in mysql-5.6.

diff --git a/storage/innobase/handler/ha_innodb.cc b/storage/innobase/handler/ha_innodb.cc
index fab832d..676a20f 100644
--- a/storage/innobase/handler/ha_innodb.cc
+++ b/storage/innobase/handler/ha_innodb.cc
@@ -12102,6 +12102,10 @@ ib_warn_row_too_big(const dict_table_t*        table)

        THD*    thd = current_thd;

+       if (thd == NULL) {
+               return;
+       }
+
        push_warning_printf(
                thd, MYSQL_ERROR::WARN_LEVEL_WARN, HA_ERR_TO_BIG_ROW,
                "Row size too large (> %lu). Changing some columns to TEXT"

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

Page generated in 0.062 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.