Bug #41473 Falcon crash in Index::garbageCollect
Submitted: 15 Dec 2008 15:00 Modified: 1 Jan 2011 17:30
Reporter: Philip Stoev Email Updates:
Status: Unsupported Impact on me:
None 
Category:MySQL Server: Falcon storage engine Severity:S1 (Critical)
Version:6.0-falcon-team OS:Any
Assigned to: CPU Architecture:Any

[15 Dec 2008 15:00] Philip Stoev
Description:
When executing a concurrent transactional workload, Falcon crashed as follows:

#2  0x00000000006ba74c in handle_segfault (sig=11) at mysqld.cc:2658
#3  <signal handler called>
#4  0x00000000009dc71c in Index::garbageCollect (this=0x7f0231b57fe8, leaving=0x7f022af2bc48, staying=0x0, transaction=0x7f021ca7d218, quiet=true)
    at Index.cpp:619
#5  0x000000000097c304 in Table::garbageCollect (this=0x7f0231f0ca98, leaving=0x7f022af2bc48, staying=0x0, transaction=0x7f021ca7d218, quiet=true)
    at Table.cpp:2137
#6  0x000000000097c8dd in Table::rollbackRecord (this=0x7f0231f0ca98, recordToRollback=0x7f022af2bc48, transaction=0x7f021ca7d218) at Table.cpp:1024
#7  0x0000000000a0c8b8 in RecordVersion::rollback (this=0x7f022af2bc48, transaction=0x7f021ca7d218) at RecordVersion.cpp:165
#8  0x000000000098b92b in Transaction::rollback (this=0x7f021ca7d218) at Transaction.cpp:397
#9  0x00000000009ad188 in Connection::rollback (this=0x7f0231b6cf78) at Connection.cpp:282
#10 0x000000000095de15 in StorageConnection::rollback (this=0x7f0231b6cee0) at StorageConnection.cpp:191
#11 0x0000000000956dc5 in StorageInterface::rollback (hton=0x3a54038, thd=0x447ecf8, all=true) at ha_falcon.cpp:1275
#12 0x0000000000805b11 in ha_rollback_trans (thd=0x447ecf8, all=true) at handler.cc:1279
#13 0x00000000008d18ad in trans_rollback (thd=0x447ecf8) at transaction.cc:206
#14 0x00000000006d14b4 in mysql_execute_command (thd=0x447ecf8) at sql_parse.cc:4037
#15 0x00000000006d37d1 in mysql_parse (thd=0x447ecf8, inBuf=0x4492e10 "ROLLBACK", length=8, found_semicolon=0x7f0222f43f00) at sql_parse.cc:5732
#16 0x00000000006d43bc in dispatch_command (command=COM_QUERY, thd=0x447ecf8, packet=0x4488dc9 " ROLLBACK", packet_length=9) at sql_parse.cc:1007
#17 0x00000000006d58e5 in do_command (thd=0x447ecf8) at sql_parse.cc:690
#18 0x00000000006c3a69 in handle_one_connection (arg=0x447ecf8) at sql_connect.cc:1154
#19 0x000000315b0073da in start_thread () from /lib64/libpthread.so.0
#20 0x000000315a4e627d in clone () from /lib64/libc.so.6

(gdb) list
614
615     void Index::garbageCollect(Record * leaving, Record * staying, Transaction *transaction, bool quiet)
616     {
617             int n = 0;
618
619             for (Record *record = leaving; record && record != staying; record = record->getGCPriorVersion(), ++n)
620                     if (record->hasRecord() && record->recordNumber >= 0)
621                             {
622                             IndexKey key(this);
623                             makeKey (record, &key);

(gdb) print record
$2 = (class Record *) 0x7f022af2bc48
(gdb) print leaving
$3 = (class Record *) 0x7f022af2bc48
(gdb) print staying
$4 = (class Record *) 0x0
(gdb) print n
$5 = 0
(gdb) print record->recordNumber
$6 = -572662307

How to repeat:
If this is repeatable, a simplifed test case will be provided.
[1 Jan 2011 17:30] Valeriy Kravchuk
We do not work on Falcon engine any more.