Bug #41499 DBUG_ASSERT when full disk on partitioned MyISAM tables.
Submitted: 16 Dec 2008 12:53 Modified: 22 Feb 2009 6:34
Reporter: Mattias Jonsson Email Updates:
Status: No Feedback Impact on me:
None 
Category:MySQL Server: Partitions Severity:S3 (Non-critical)
Version: OS:Any (Mac OS X 10.5.5.)
Assigned to: Assigned Account CPU Architecture:Any

[16 Dec 2008 12:53] Mattias Jonsson
Description:
Running two concurrent tests runs using the same RAM disk failed, due to full disk, causing the server to abort on the DEBUG build.

Trace in 5.1:
#0  0x92cd3dbe in clock_get_attributes ()
#1  0x92cc5c87 in usleep$NOCANCEL$UNIX2003 ()
#2  0x92ce7434 in f_prealloc ()
#3  0x92ce7490 in abort ()
#4  0x92cd9063 in __assert_rtn ()
#5  0x000d8c04 in Diagnostics_area::set_error_status (this=0x101e770, thd=0x101da18, sql_errno_arg=20, message_arg=0xb02683a0 "Disk is full writing '/private/tmp/ramdisk/var2/master-data/test/t2#P#p7.MYI' (Errcode: 28). Waiting for someone to free space... Retry in 60 secs") at sql_class.cc:502
#6  0x000f425f in my_message_sql (error=20, str=0xb02683a0 "Disk is full writing '/private/tmp/ramdisk/var2/master-data/test/t2#P#p7.MYI' (Errcode: 28). Waiting for someone to free space... Retry in 60 secs", MyFlags=68) at mysqld.cc:2849
#7  0x005309e4 in my_error (nr=20, MyFlags=68) at my_error.c:97
#8  0x0051ef6c in my_pwrite (Filedes=49, Buffer=0xe52418 "\002?F\016_", Count=1024, offset=32768, MyFlags=36) at my_pread.c:165
#9  0x00525f43 in flush_cached_blocks (keycache=0x1006418, file=49, cache=0xb02685f4, end=0xb02685f8, type=FLUSH_KEEP) at mf_keycache.c:3464
#10 0x00526600 in flush_key_blocks_int (keycache=0x1006418, file=49, type=FLUSH_KEEP) at mf_keycache.c:3758
#11 0x00526b87 in flush_key_blocks (keycache=0x1006418, file=49, type=FLUSH_KEEP) at mf_keycache.c:4015
#12 0x00421b00 in mi_lock_database (info=0x1093a18, lock_type=2) at mi_locking.c:63
#13 0x004610b6 in ha_myisam::external_lock (this=0x1086028, thd=0x101da18, lock_type=2) at ha_myisam.cc:1824
#14 0x0023b72f in handler::ha_external_lock (this=0x1086028, thd=0x101da18, lock_type=2) at handler.cc:4533
#15 0x00240177 in ha_partition::external_lock (this=0x1085428, thd=0x101da18, lock_type=2) at ha_partition.cc:2657
#16 0x0023b72f in handler::ha_external_lock (this=0x1085428, thd=0x101da18, lock_type=2) at handler.cc:4533
#17 0x000ec53e in unlock_external (thd=0x101da18, table=0x1e6a0d8, count=1) at lock.cc:786
#18 0x000ec881 in mysql_unlock_tables (thd=0x101da18, sql_lock=0x1e6a078) at lock.cc:391
#19 0x00155258 in close_thread_tables (thd=0x101da18) at sql_base.cc:1315
#20 0x00117bce in dispatch_command (command=COM_QUERY, thd=0x101da18, packet=0x1901019 "", packet_length=28) at sql_parse.cc:1571
#21 0x00117fb8 in do_command (thd=0x101da18) at sql_parse.cc:857
#22 0x0010318d in handle_one_connection (arg=0x101da18) at sql_connect.cc:1115
#23 0x92c236f5 in _pthread_start ()
#24 0x92c235b2 in thread_start ()

Trace in 6.0:
#0  0x92cd3dbe in clock_get_attributes ()
#1  0x92cc5c87 in usleep$NOCANCEL$UNIX2003 ()
#2  0x92ce7434 in f_prealloc ()
#3  0x92ce7490 in abort ()
#4  0x92cd9063 in __assert_rtn ()
#5  0x000dc073 in Diagnostics_area::set_error_status (this=0x20487c8, thd=0x2047a18, sql_errno_arg=20, message_arg=0xb0b284a0 "Disk is full writing '/private/tmp/ramdisk/var1/master-data/test/t2#P#p3.MYI' (Errcode: 28). Waiting for someone to free space... Retry in 60 secs") at sql_class.cc:504
#6  0x000f741e in my_message_sql (error=20, str=0xb0b284a0 "Disk is full writing '/private/tmp/ramdisk/var1/master-data/test/t2#P#p3.MYI' (Errcode: 28). Waiting for someone to free space... Retry in 60 secs", MyFlags=68) at mysqld.cc:3051
#7  0x007341d6 in my_error (nr=20, MyFlags=68) at my_error.c:93
#8  0x00720836 in my_pwrite (Filedes=35, Buffer=0x1bcac18 "\002??", Count=1024, offset=348160, MyFlags=36) at my_pread.c:184
#9  0x00721fa3 in key_cache_pwrite (Filedes=35, Buffer=0x1bcac18 "\002??", Count=1024, offset=348160, MyFlags=36, callback=0x36f989 <log_key_page_flush_physical>, callback_arg=0x2070218) at mf_keycache.c:796
#10 0x00727d02 in flush_cached_blocks (keycache=0x2007618, file=35, cache=0xb0b28744, end=0xb0b28748, type=FLUSH_KEEP) at mf_keycache.c:3506
#11 0x007283e1 in flush_key_blocks_int (keycache=0x2007618, file=35, type=FLUSH_KEEP) at mf_keycache.c:3802
#12 0x00728939 in flush_key_blocks (keycache=0x2007618, file=35, type=FLUSH_KEEP) at mf_keycache.c:4059
#13 0x0037a6b4 in mi_lock_database (info=0x2070a18, lock_type=2) at mi_locking.c:72
#14 0x003ba25c in ha_myisam::external_lock (this=0x206afa0, thd=0x2047a18, lock_type=2) at ha_myisam.cc:1768
#15 0x00243d98 in handler::ha_external_lock (this=0x206afa0, thd=0x2047a18, lock_type=2) at handler.cc:5313
#16 0x0024b17a in ha_partition::external_lock (this=0x206a628, thd=0x2047a18, lock_type=2) at ha_partition.cc:2685
#17 0x00243d98 in handler::ha_external_lock (this=0x206a628, thd=0x2047a18, lock_type=2) at handler.cc:5313
#18 0x000ef69b in unlock_external (thd=0x2047a18, table=0x4b6c1b8, count=1) at lock.cc:821
#19 0x000ef760 in mysql_unlock_tables (thd=0x2047a18, sql_lock=0x4b6c158) at lock.cc:436
#20 0x0016230b in close_thread_tables (thd=0x2047a18, skip_mdl=false) at sql_base.cc:1433
#21 0x0011b4f6 in dispatch_command (command=COM_QUERY, thd=0x2047a18, packet=0x46c0019 "", packet_length=29) at sql_parse.cc:1407
#22 0x0011b99d in do_command (thd=0x2047a18) at sql_parse.cc:689
#23 0x001069f3 in handle_one_connection (arg=0x2047a18) at sql_connect.cc:1156
#24 0x92c236f5 in _pthread_start ()
#25 0x92c235b2 in thread_start ()

How to repeat:
I found this on both parts.partition_decimal_myisam and parts.partition_float_myisam (one in 5.1-bugteam and the other in 6.0-bugteam)

Should be possible to repeat using a small data directory and running the test.

Suggested fix:
Better error handling in partitioning, resulting in not hitting the DBUG_ASSERT. (Have not tested this without partitioning).
[16 Dec 2008 12:55] Mattias Jonsson
Forgot to add the platform I used: Mac OS X 10.5.5.
[22 Jan 2009 6:34] Sveta Smirnova
Thank you for the report.

You wrote "Running two concurrent tests runs using the same RAM disk failed, due to full disk" and same time "I found this on both parts.partition_decimal_myisam and parts.partition_float_myisam" How do you run these tests concurrently? (If I run them like `./mtr --suite=parts partition_decimal_myisam` I got hang if disk is full, but not DBUG_ASSERT)
[23 Feb 2009 0:00] Bugs System
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".