Bug #26324 | falcon crashes while updating a blob record | ||
---|---|---|---|
Submitted: | 13 Feb 2007 15:22 | Modified: | 3 May 2007 10:52 |
Reporter: | Shane Bester (Platinum Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Falcon storage engine | Severity: | S1 (Critical) |
Version: | 5.2.3-falcon-alpha-debug | OS: | Linux (suse9.3 x86) |
Assigned to: | Jim Starkey | CPU Architecture: | Any |
Tags: | crash, UPDATE |
[13 Feb 2007 15:22]
Shane Bester
[13 Feb 2007 15:32]
MySQL Verification Team
some further information about the test run.
Attachment: bug26324_info.txt (text/plain), 206.00 KiB.
[13 Feb 2007 18:30]
MySQL Verification Team
see header of file for compile instructions + host,user,database,port
Attachment: testcase.c (text/plain), 7.03 KiB.
[13 Feb 2007 18:32]
MySQL Verification Team
attached is the testcase.c that caused the reported stack trace. However, the last 3 times I've run it for 10 - 25 minutes each, it crashed with a different stack trace (reported in separate bugs). So, the developers should determine if there's a common cause or not.
[26 Mar 2007 22:37]
Hakan Küçükyılmaz
More predictable version of the test case
Attachment: falcon_bug_26324.c (text/x-csrc), 8.68 KiB.
[5 Apr 2007 16:00]
Hakan Küçükyılmaz
Seed value and number of threads is settable via command line option now.
Attachment: falcon_bug_26324.tar.gz (application/x-gzip, text), 3.50 KiB.
[18 Apr 2007 22:03]
Hakan Küçükyılmaz
./falcon_bug_26324 -r900 -s707 Crashes with: Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 1158465888 (LWP 3328)] 0x000000000086da8d in Transaction::getRelativeState (this=0x2aaaab0a2368, record=0x0) at Transaction.cpp:884 884 return getRelativeState(record->getTransaction(), record->getTransactionId()); (gdb) bt #0 0x000000000086da8d in Transaction::getRelativeState (this=0x2aaaab0a2368, record=0x0) at Transaction.cpp:884 #1 0x0000000000864c2f in Table::fetchForUpdate (this=0x2aaaab087a68, transaction=0x2aaaab0a2368, source=0x2aaaab0c7748) at Table.cpp:2822 #2 0x0000000000853914 in StorageDatabase::nextRow (this=0x2aaaab049fa8, storageTable=0x2aaaadc0dd88, recordNumber=345, lockForUpdate=true) at StorageDatabase.cpp:264 #3 0x0000000000858a73 in StorageTable::next (this=0x2aaaadc0dd88, recordNumber=345, lockForUpdate=true) at StorageTable.cpp:122 #4 0x000000000084d452 in NfsStorageTable::rnd_next (this=0x104c558, buf=0x104c788 "�Z�r ") at ha_falcon.cpp:466 #5 0x0000000000778ea9 in rr_sequential (info=0x450ca7b0) at records.cc:363 #6 0x0000000000712bf6 in mysql_update (thd=0x104a188, table_list=0x105c398, fields=@0x104bc18, values=@0x104bfc8, conds=0x0, order_num=0, order=0x0, limit=18446744073709551591, handle_duplicates=DUP_ERROR, ignore=false) at sql_update.cc:466 #7 0x000000000067895f in mysql_execute_command (thd=0x104a188) at sql_parse.cc:2536 #8 0x000000000067ec86 in mysql_parse (thd=0x104a188, inBuf=0x105c2e8 "UPDATE t1 SET c2 = md5(c2)", length=26) at sql_parse.cc:5274 #9 0x000000000067f94c in dispatch_command (command=COM_QUERY, thd=0x104a188, packet=0x10855a9 "UPDATE t1 SET c2 = md5(c2)", packet_length=27) at sql_parse.cc:896 #10 0x0000000000680cfa in do_command (thd=0x104a188) at sql_parse.cc:662 #11 0x000000000066ed2c in handle_one_connection (arg=0x104a188) at sql_connect.cc:1089 #12 0x00002b8e75816f1a in start_thread () from /lib/libpthread.so.0 #13 0x00002b8e75ecb602 in clone () from /lib/libc.so.6 #14 0x0000000000000000 in ?? ()
[18 Apr 2007 22:07]
Hakan Küçükyılmaz
Latest version
Attachment: falcon_bug_26324.tar.gz (application/x-gzip, text), 3.64 KiB.
[25 Apr 2007 0:12]
Hakan Küçükyılmaz
Hitting another assertion now: hakan@lu0011:~/work/workspace/MySQL_Test_Cases$ ./falcon_bug_26324 -r900 -s707 Running initializations ... Pre-generating 16777216 bytes of random data. About to spawn 2 threads 1 2 Completed spawning new database worker threads. Runtime is 900. Seed value is 707. Isolation level is READ-COMMITTED. Testcase is now running, so watch for error output. (gdb) f 4 #4 0x00000000008de191 in RecordVersion::getEncodedRecord (this=0x2aaaab0e25a0) at RecordVersion.cpp:311 311 ASSERT(encoding == shortVector); (gdb) p encoding $1 = 0 '\0' (gdb) p shortVector No symbol "shortVector" in current context. (gdb) Program received signal SIGILL, Illegal instruction. [Switching to Thread 1082665312 (LWP 20107)] 0x00002b6f0b7a32ac in raise () from /lib/libpthread.so.0 (gdb) bt #0 0x00002b6f0b7a32ac in raise () from /lib/libpthread.so.0 #1 0x00000000008a323c in Error::debugBreak () at Error.cpp:92 #2 0x00000000008a3355 in Error::error (string=0xc1c368 "assertion failed at line %d in file %s\n") at Error.cpp:69 #3 0x00000000008a33eb in Error::assertionFailed (fileName=0xc21a60 "RecordVersion.cpp", line=311) at Error.cpp:76 #4 0x00000000008de191 in RecordVersion::getEncodedRecord (this=0x2aaaab0e25a0) at RecordVersion.cpp:311 #5 0x0000000000858860 in StorageTable::setRecord (this=0x2aaaaafa7b98, newRecord=0x2aaaab0e25a0, locked=true) at StorageTable.cpp:305 #6 0x0000000000853d08 in StorageDatabase::nextRow (this=0x2aaaab04a0c0, storageTable=0x2aaaaafa7b98, recordNumber=542, lockForUpdate=true) at StorageDatabase.cpp:291 #7 0x0000000000858dd7 in StorageTable::next (this=0x2aaaaafa7b98, recordNumber=541, lockForUpdate=true) at StorageTable.cpp:121 #8 0x000000000084d5a4 in NfsStorageTable::rnd_next (this=0x103b778, buf=0x103b9b0 "�\202?� ") at ha_falcon.cpp:469 #9 0x0000000000778f19 in rr_sequential (info=0x408807b0) at records.cc:363 #10 0x0000000000712c66 in mysql_update (thd=0x10200a8, table_list=0x104f2a8, fields=@0x1021b38, values=@0x1021ee8, conds=0x0, order_num=0, order=0x0, limit=18446744073709551614, handle_duplicates=DUP_ERROR, ignore=false) at sql_update.cc:466
[25 Apr 2007 9:44]
Hakan Küçükyılmaz
Latest version
Attachment: falcon_bug_26324.tar.gz (application/x-gzip, text), 3.66 KiB.
[26 Apr 2007 20:04]
Hakan Küçükyılmaz
Seems to be fixed! hakan@lu0011:~/work/workspace/MySQL_Test_Cases$ ./falcon_bug_26324 -r500 -s707 Running initializations ... Pre-generating 16777216 bytes of random data. About to spawn 2 threads 1 2 Completed spawning new database worker threads. Runtime is 500. Seed value is 707. Isolation level is READ-COMMITTED. Testcase is now running, so watch for error output. Waiting for worker threads to finish ... hakan@lu0011:~/work/workspace/MySQL_Test_Cases$
[27 Apr 2007 17:54]
Hakan Küçükyılmaz
New failure with seed value of 4 ./falcon_bug_26324 -r600 -s4 Running initializations ... Pre-generating 16777216 bytes of random data. About to spawn 2 threads 1 2 Completed spawning new database worker threads. Runtime is 600. Seed value is 4. Isolation level is READ-COMMITTED. Testcase is now running, so watch for error output. Program received signal SIGSEGV, Segmentation fault. [Switching to Thread 1076373856 (LWP 28502)] 0x0000000000905270 in Cache::findBuffer (this=0x2a9e459d48, dbb=0x2a9e497cf0, pageNumber=1187, lockType=Exclusive, sync=0x4027ff90) at Cache.cpp:334 334 for (candidate = bdb; candidate->higher; candidate = candidate->higher->higher) (gdb) p candidate $1 = (Bdb *) 0x2a9e3e47c8 (gdb) p bdb $2 = (Bdb *) 0x2a9e3e47c8 (gdb) p candidate->higher $3 = (class PagePrecedence *) 0x0 (gdb) Full backtrace (gdb) bt #0 0x0000000000905270 in Cache::findBuffer (this=0x2a9e459d48, dbb=0x2a9e497cf0, pageNumber=1187, lockType=Exclusive, sync=0x4027ff90) at Cache.cpp:334 #1 0x0000000000904f7f in Cache::fakePage (this=0x2a9e459d48, dbb=0x2a9e497cf0, pageNumber=1187, type=PAGE_data_overflow, transId=30149) at Cache.cpp:259 #2 0x0000000000872b13 in Dbb::fakePage (this=0x2a9e497cf0, pageNumber=1187, pageType=PAGE_data_overflow, transId=30149) at Dbb.cpp:193 #3 0x00000000008ace8c in PageInventoryPage::allocPage (dbb=0x2a9e497cf0, pageType=PAGE_data_overflow, transId=30149) at PageInventoryPage.cpp:98 #4 0x0000000000872c25 in Dbb::allocPage (this=0x2a9e497cf0, pageType=PAGE_data_overflow, transId=30149) at Dbb.cpp:226 #5 0x00000000008c8546 in Section::storeTail (this=0x2a9e4d4478, stream=0x40280400, maxRecord=4084, pLength=0x402801f8, transId=30149, earlyWrite=true) at Section.cpp:658 #6 0x00000000008c8189 in Section::storeRecord (this=0x2a9e4d4478, recordLocatorPage=0x2aa057f000, indexPageNumber=104, index=0x2aa057ffc0, stream=0x40280400, transId=30149, earlyWrite=true) at Section.cpp:572 #7 0x00000000008c7eaf in Section::updateRecord (this=0x2a9e4d4478, recordNumber=502, stream=0x40280400, transId=30149, earlyWrite=true) at Section.cpp:511 #8 0x0000000000872f76 in Dbb::updateRecord (this=0x2a9e497cf0, sectionId=44, recordId=502, stream=0x40280400, transId=30149, earlyWrite=true) at Dbb.cpp:310 #9 0x0000000000872f29 in Dbb::updateBlob (this=0x2a9e497cf0, sectionId=44, recordId=502, stream=0x40280400, transId=30149) at Dbb.cpp:304
[30 Apr 2007 21:17]
Hakan Küçükyılmaz
The originally discovered crash was fixed. However, extending and tweaking the test case is revealing other bugs which will be covered in separate bug reports. Best regards, Hakan
[3 May 2007 10:52]
MC Brown
A note has been added to the 6.0.0 changelog.