Bug #43300 Falcon crash in Table::fetch when rollbacking a backlogged record
Submitted: 2 Mar 2009 8:48 Modified: 1 Jan 2011 17:32
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
Tags: F_BACKLOG

[2 Mar 2009 8:48] Philip Stoev
Description:
When executing a transactional RQG workload, the following crash happened only once out of many runs:

#4  0x0000000000993285 in Table::fetch (this=0x7fd29d43b6c0,
    recordNumber=-286331154) at Table.cpp:929
#5  0x00000000009af0a7 in BackLog::rollbackRecords (this=0x7fd29d12c9a0,
    records=0x7fd29d0ade58, transaction=0x33b4ca8) at BackLog.cpp:112
#6  0x00000000009a6db9 in Transaction::rollback (this=0x33b4ca8)
    at Transaction.cpp:420
#7  0x00000000009c73aa in Connection::rollback (this=0x7fd29d11cc58)
    at Connection.cpp:282
#8  0x0000000000977ca5 in StorageConnection::rollback (this=0x7fd29d0ca018)
    at StorageConnection.cpp:191
#9  0x000000000097032f in StorageInterface::rollback (hton=0x7fd2981b6868,
    thd=0x7fd298eb6908, all=false) at ha_falcon.cpp:1319
#10 0x000000000081c004 in ha_rollback_trans (thd=0x7fd298eb6908, all=false)
    at handler.cc:1297
#11 0x00000000008ea94b in trans_rollback_stmt (thd=0x7fd298eb6908)
    at transaction.cc:263
#12 0x00000000006dea9a in dispatch_command (command=COM_QUERY,
    thd=0x7fd298eb6908,
    packet=0x7fd298ec1209 "DELETE FROM `table10000_falcon_int_autoinc` WHERE `char_64_latin1_not_null_key` <> 'because'  LIMIT 6", packet_length=101)
    at sql_parse.cc:1383
#13 0x00000000006deff1 in do_command (thd=0x7fd298eb6908) at sql_parse.cc:691
#14 0x00000000006ccf71 in handle_one_connection (arg=0x7fd298eb6908)
    at sql_connect.cc:1146
#15 0x000000315b0073da in start_thread () from /lib64/libpthread.so.0
#16 0x000000315a4e627d in clone () from /lib64/libc.so.6

924                     if (records)
925                             {
926                             RecordSection *section = records;
927                             int id = recordNumber;
928
929                             while (section->base) <<<<<<<<< HERE
930                                     {
931                                     int slot = id / section->base;
932                                     id = id % section->base;

(gdb) print section
$1 = (class RecordSection *) 0x1c
(gdb) print section->base
Cannot access memory at address 0x1c
(gdb) print records
$2 = (class RecordSection *) 0x7fd29d0d0330
(gdb) print id
$3 = -54
(gdb) print slot
$4 = {uchar *((anonymous namespace)::Row_data_memory * const, uint)} 0x6a5adc <slot>

How to repeat:
   perl runall.pl    --engine=Falcon   --reporters=Deadlock,ErrorLog,Backtrace,Recovery   --mysqld=--loose-falcon-lock-wait-timeout=1   --mysqld=--loose-innodb-lock-wait-timeout=1   --mysqld=--log-output=none   --mysqld=--skip-safemalloc   --mysqld=--falcon-page-size=16K --mem --rows=10000 --threads=32 --mysqld=--falcon-checkpoint-schedule='1 1 1 1 1'   --basedir=/build/bzr/6.0-falcon-team   --mask=38362   --queries=100000000   --duration=900   --gendata=conf/combinations.zz  --grammar=conf/combinations.yy
[29 Mar 2009 21:25] Kevin Lewis
This bug will remain unreproduceable until backlogging is activated again.  But now that Falcon has a CycleManager to handle doomed record objects, this may not be a problem.
[1 Jan 2011 17:32] Valeriy Kravchuk
We do not work on Falcon storage engine any more.