Bug #39574 Falcon asserts after crash in DataPage.cpp line 87
Submitted: 22 Sep 2008 6:55 Modified: 8 Jan 2009 17:20
Reporter: Hakan Küçükyılmaz Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Falcon storage engine Severity:S3 (Non-critical)
Version: OS:Any
Assigned to: Hakan Küçükyılmaz CPU Architecture:Any
Tags: F_RECOVERY

[22 Sep 2008 6:55] Hakan Küçükyılmaz
Description:
Falcon asserts after restart in DataPage.cpp line 87.

How to repeat:
Create a w100 DBT2 database for Falcon, shutdown, and restart mysqld.
I used falcon_page_size of 32k.

080921 23:34:03 [Note] Plugin 'InnoDB' disabled by command line option
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(my_print_stacktrace+0x35)[0xa78045]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(handle_segfault+0x336)[0x64a706]
/lib64/libpthread.so.0[0x2b734ce95c00]
/lib64/libpthread.so.0(raise+0x2d)[0x2b734ce95aad]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(Error::error(char const*, ...)+0xf9)[0x87dc59]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(DataPage::updateRecord(Section*, int, Stream*, unsigned int, bool)+0xd4)[0x8f4d94]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(Section::updateRecord(int, Stream*, unsigned int, bool)+0x243)[0x8ba9d3]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(Dbb::updateRecord(int, int, Stream*, unsigned int, bool)+0x45)[0x874a85]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(SRLUpdateRecords::redo()+0x1a2)[0x8dfb02]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(SerialLog::recover()+0x4a6)[0x8c6186]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(Database::openDatabase(char const*)+0x11b)[0x8705fb]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(Connection::getDatabase(char const*, char const*, Threads*)+0xd6)[0x864c76]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(Connection::openDatabase(char const*, char const*, char const*, char const*, char const*, Threads*)+0xa4)[0x8676f4]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(StorageDatabase::getOpenConnection()+0x5a)[0x83086a]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(StorageHandler::initialize()+0x96)[0x833a66]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(StorageInterface::falcon_init(void*)+0x162)[0x82b372]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(ha_initialize_handlerton(st_plugin_int*)+0x3f)[0x73fe4f]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld[0x7c4642]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(plugin_init(int*, char**, int)+0x889)[0x7c6f49]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld[0x64e626]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(main+0x79c)[0x64f5bc]
/lib64/libc.so.6(__libc_start_main+0xf4)[0x2b734d41f184]
/data0/work/mysql/mysql-6.0-falcon/sql/mysqld(__gxx_personality_v0+0xc1)[0x577ec9]
[Falcon] Error: assertion (idx->offset == 0 || (idx->offset >= indexEnd && idx->offset + idx->length <= dbb->pageSize)) failed at line 87 in file DataPage.cpp

I can reproduce this assertion consistently from scratch yet, but I could a datadir which leads to this assertion.
[22 Sep 2008 9:12] Hakan Küçükyılmaz
How to repeat:

- Start mysqld with falcon_page_size=32k

CREATE TABLE t1 (a int) Engine Falcon;
INSERT INTO t1 VALUES (1);

- kill mysqld
- Restart mysqld --> assertion is hit

Error: assertion (offset >= OFFSET (DataPage*, lineIndex) && offset + length <= dbb->pageSize) failed at line 190 in file DataPage.cpp
[27 Sep 2008 18:38] Bugs System
A patch for this bug has been committed. After review, it may
be pushed to the relevant source trees for release in the next
version. You can access the patch from:

  http://lists.mysql.com/commits/54616

2834 Hakan Kuecuekyilmaz	2008-09-27
      Fix for Bug#39574 Falcon asserts after crash in DataPage.cpp line 87.
[27 Sep 2008 19:05] Hakan Küçükyılmaz
When using falcon_page_size of 32k Falcon's LineIndex struct could suffer from an integer overflow. Fixed by adjusting with proper integer types.
[8 Jan 2009 17:20] MC Brown
A note has been added o the 6.0.8 changelog: 

When recovering a crashed Falcon table when the page size had been set to 32K, MySQL could crash with an assertion.