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).