Bug #15108 mysqld crashes when innodb_log_file_size is set > 4G
| Submitted: | 21 Nov 2005 20:00 | Modified: | 17 Jun 2010 23:56 |
|---|---|---|---|
| Reporter: | Andrey Hristov | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server | Severity: | S2 (Serious) |
| Version: | 5.0.16 | OS: | Linux (Linux) |
| Assigned to: | Ramil Kalimullin | CPU Architecture: | Any |
[21 Nov 2005 20:00]
Andrey Hristov
[22 Nov 2005 0:39]
Heikki Tuuri
Osku,
please find out why mysqld is crashing.
Also note the following:
srv0start.c:
"
if (srv_n_log_files * srv_log_file_size >= 262144) {
fprintf(stderr,
"InnoDB: Error: combined size of log files must be < 4 GB\n");
return(DB_ERROR);
}
"
The COMBINED log size must be less than 4 GB.
Please correct the check and the error text in ha_innodb.cc.
To allow the combined log file size to grow over 4 GB, we should at least fix the following function to cope with differences >= 4G. Probably also ut_dulint_add(), and also some other changes to get the arithmetics in log0* to work right. Then VERY careful testing.
/***********************************************************
Subtracts a dulint from another. NOTE that the difference must be positive
and smaller that 4G. */
UNIV_INLINE
ulint
ut_dulint_minus(
/*============*/
/* out: a - b */
dulint a, /* in: dulint; NOTE a must be >= b and at most
2 to power 32 - 1 greater */
dulint b) /* in: dulint */
{
ulint diff;
if (a.high == b.high) {
ut_ad(a.low >= b.low);
return(a.low - b.low);
}
ut_ad(a.high == b.high + 1);
diff = (ulint)(0xFFFFFFFFUL - b.low);
diff += 1 + a.low;
ut_ad(diff > a.low);
return(diff);
}
Regards,
Heikki
[22 Nov 2005 0:41]
Heikki Tuuri
I suggest we leave the >= 4 GB support to a later date. Recovery time with a >= 4 GB log is probably too long for it to be used right now. Regards, Heikki
[22 Nov 2005 8:04]
Osku Salerma
Andrey, as your GDB session shows, we already print an error message about the invalid log file size. The code responsible for this is in innobase_init:
+ /* Check that values don't overflow on 32-bit systems. */
+ if (sizeof(ulint) == 4) {
+ if (innobase_buffer_pool_size > UINT_MAX32) {
+ sql_print_error(
+ "innobase_buffer_pool_size can't be over 4GB"
+ " on 32-bit systems");
+
+ DBUG_RETURN(0);
+ }
+
+ if (innobase_log_file_size > UINT_MAX32) {
+ sql_print_error(
+ "innobase_log_file_size can't be over 4GB"
+ " on 32-bit systems");
+
+ DBUG_RETURN(0);
+ }
+ }
When I originally made this patch months ago, returning 0 from the function was handled correctly on the MySQL side and it aborted everything and closed down and didn't crash. I know you changed things regarding handler initialization, but I have no idea how, so either tell me how innobase_init should signal failure or if the bug is on your side fix it.
[22 Nov 2005 11:52]
Heikki Tuuri
Changing the category, since this probably is not an InnoDB bug.
[22 Nov 2005 11:56]
Andrey Hristov
It's on MySQL side, not on InnoDB side, therefore I rated it initially not as InnoDB bug. Miguel changed it to InnoDB.
[24 Nov 2005 9: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/internals/32646
[22 Dec 2005 4:53]
Greg Lehey
Patch looks OK, assuming that this is the way we want to solve the problem.
[28 Dec 2005 9:49]
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/439
[29 Dec 2005 11:07]
Ramil Kalimullin
fixed in 5.0.19
[4 Jan 2006 21:32]
Mike Hillyer
Added entry to 5.0.19 changelog:
<listitem>
<para>
Setting <literal>innodb_log_file_size</literal> to a value
greater than 4G crashed the server. (Bug #15108)
</para>
</listitem>
[16 Jan 2006 13:07]
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/1136
[5 May 2010 15:09]
Bugs System
Pushed into 5.1.47 (revid:joro@sun.com-20100505145753-ivlt4hclbrjy8eye) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (merge vers: 5.1.46) (pib:16)
[6 May 2010 1:43]
Paul DuBois
Push resulted from incorporation of InnoDB tree. No changes pertinent to this bug. Re-closing.
[28 May 2010 5:47]
Bugs System
Pushed into mysql-next-mr (revid:alik@sun.com-20100524190136-egaq7e8zgkwb9aqi) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (pib:16)
[28 May 2010 6:17]
Bugs System
Pushed into 6.0.14-alpha (revid:alik@sun.com-20100524190941-nuudpx60if25wsvx) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (merge vers: 5.1.46) (pib:16)
[28 May 2010 6:45]
Bugs System
Pushed into 5.5.5-m3 (revid:alik@sun.com-20100524185725-c8k5q7v60i5nix3t) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (merge vers: 5.1.46) (pib:16)
[28 May 2010 19:21]
Paul DuBois
Push resulted from incorporation of InnoDB tree. No changes pertinent to this bug. Re-closing.
[17 Jun 2010 11:48]
Bugs System
Pushed into 5.1.47-ndb-7.0.16 (revid:martin.skold@mysql.com-20100617114014-bva0dy24yyd67697) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (merge vers: 5.1.46) (pib:16)
[17 Jun 2010 12:25]
Bugs System
Pushed into 5.1.47-ndb-6.2.19 (revid:martin.skold@mysql.com-20100617115448-idrbic6gbki37h1c) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (merge vers: 5.1.46) (pib:16)
[17 Jun 2010 13:13]
Bugs System
Pushed into 5.1.47-ndb-6.3.35 (revid:martin.skold@mysql.com-20100617114611-61aqbb52j752y116) (version source revid:vasil.dimov@oracle.com-20100331130613-8ja7n0vh36a80457) (merge vers: 5.1.46) (pib:16)
Portions of this website are copyright © 2001, 2002 The PHP Group
Page generated in 0.050 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.