Bug #57936 | Assertion `! is_set()' failed after out of disk space writing binlog | ||
---|---|---|---|
Submitted: | 2 Nov 2010 20:01 | Modified: | 14 Jan 2013 21:14 |
Reporter: | Sven Sandberg | Email Updates: | |
Status: | Can't repeat | Impact on me: | |
Category: | MySQL Server: Replication | Severity: | S1 (Critical) |
Version: | 5.1+ | OS: | Any |
Assigned to: | Matthew Lord | CPU Architecture: | Any |
Tags: | binlog, Diagnostics_area::set_ok_status, disk full |
[2 Nov 2010 20:01]
Sven Sandberg
[2 Nov 2010 20:12]
Sven Sandberg
After you have run the test script above, don't forget to unmount that file system.
[14 Jan 2013 21:07]
Matthew Lord
I couldn't repeat the crash with 5.5.29. I created the loop device of 100K on /tmp/binlogs and just altered my existing test MySQL 5.5 setup to use log-bin=/tmp/binlogs. Once I started mysqld, then I filled up that device with: dd if=/dev/zero of=/tmp/binlogs/waste.bin bs=1024 count=999999 I then ran several inserts into a test.loadtest table. After a few of them, then I got the expected SQL layer hang and the disk full messages in the MySQL error log. I then removed the /tmp/binlogs file and then the SQL query returned and the binary log was updated. I got no assert. I will now test this with 5.1.69.
[14 Jan 2013 21:14]
Matthew Lord
I was not able to repeat the crash using 5.1.65-advanced, either. I used the same 100K loop device on /tmp/binlogs. I then started my existing 5.1 test instance, modifying: log-bin=/tmp/binlogs/foo I then filled up the device with dd: dd if=/dev/zero of=/tmp/binlogs/waste.bin bs=1024 count=999999 I then created some dummy records in a test.test2 table. After several cases then I got the expected messages in the error log and query hang. I then deleted the waste.bin file and things picked up fine again. I was not able to get the failed ASSERT and crash in recent 5.5 or 5.1 Enterprise releases.
[15 Jan 2013 9:31]
Sven Sandberg
I confirm that this seems to have been fixed already. It seems that wait_for_free_space now logs a warning instead of raises an error, so that should avoid the problem.