Bug #23220 Falcon: Setting falcon_page_size to non-default size crashes Falcon
Submitted: 12 Oct 2006 15:59 Modified: 19 Nov 2007 22:19
Reporter: Hakan Küçükyılmaz Email Updates:
Status: Closed Impact on me:
None 
Category:MySQL Server: Falcon storage engine Severity:S2 (Serious)
Version:5.2,5.2.4-falcon-alpha-debug OS:Linux (Linux)
Assigned to: Hakan Küçükyılmaz CPU Architecture:Any

[12 Oct 2006 15:59] Hakan Küçükyılmaz
Description:
Setting falcon_page_size to 32k leads to crash.

How to repeat:
gdb /usr/local/mysql/libexec/mysqld
(gdb) run --gdb --user=mysql --falcon_page_size=32768

[17:51] root@(none)>show variables like '%page%';
+----------------------------+----------+
| Variable_name              | Value    |
+----------------------------+----------+
| falcon_page_cache_size     | 33554432 |
| falcon_page_size           | 32768    |
| innodb_max_dirty_pages_pct | 90       |
| large_page_size            | 0        |
| large_pages                | OFF      |
+----------------------------+----------+
5 rows in set (0.00 sec)

[17:51] root@(none)>create schema test; use test;
Query OK, 1 row affected (0.00 sec)

[17:55] root@test>create table t1 (a int);
ERROR 2013 (HY000): Lost connection to MySQL server during query

Backtrace:
Program received signal SIGILL, Illegal instruction.
[Switching to Thread 1263528880 (LWP 9240)]
0xffffe410 in __kernel_vsyscall ()
(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0x40181541 in raise () from /lib/tls/libc.so.6
#2  0x08426a9a in Error::debugBreak () at Error.cpp:93
#3  0x08426af7 in Error::error (string=0x87285f4 "page %d wrong page type, expected %d got %d\n")
    at Error.cpp:70
#4  0x08498bce in Cache::fetchPage (this=0x402f8c80, dbb=0x402f8720, pageNumber=31, pageType=PAGE_inventory,
    lockType=Exclusive) at Cache.cpp:183
#5  0x0841ded2 in Dbb::fetchPage (this=0x402f8720, pageNumber=31, pageType=PAGE_inventory,
    lockType=Exclusive) at Dbb.cpp:196
#6  0x0844e820 in PageInventoryPage::allocPage (dbb=0x402f8720, pageType=PAGE_sections, transId=1)
    at PageInventoryPage.cpp:77
#7  0x0841deef in Dbb::allocPage (this=0x402f8720, pageType=PAGE_sections, transId=1) at Dbb.cpp:201
#8  0x0846667e in Section::createSection (dbb=0x402f8720, transId=1) at Section.cpp:98
#9  0x0841dfa8 in Dbb::createSection (this=0x402f8720, transId=1) at Dbb.cpp:225
#10 0x08414938 in Database::createSection (this=0x4c6f8028, transaction=0x402fddd0) at Database.cpp:886
#11 0x083ed353 in Table::create (this=0x4030855c, tableType=0x8726c54 "SYSTEM TABLE", transaction=0x402fddd0)
    at Table.cpp:200
#12 0x0848a3d9 in Nfs::Statement::createTable (this=0x40306628, syntax=0x403084fc) at Statement.cpp:218
#13 0x0848a4f5 in Nfs::Statement::upgradeTable (this=0x40306628, syntax=0x403084fc) at Statement.cpp:1130
#14 0x0848b49d in Nfs::Statement::executeDDL (this=0x40306628) at Statement.cpp:689
#15 0x0848c580 in Nfs::Statement::execute (this=0x40306628,
    sqlString=0x8722f50 "upgrade table system.privileges (holderType tinyint not null,holderSchema varchar (128) not null,holderName varchar (128) not null,objectType tinyint not null,objectSchema varchar (128) not null,objec"..., isQuery=false) at Statement.cpp:2608
#16 0x0848c5fc in Nfs::Statement::execute (this=0x40306628,
    sqlString=0x8722f50 "upgrade table system.privileges (holderType tinyint not null,holderSchema varchar (128) not null,holderName varchar (128) not null,objectType tinyint not null,objectSchema varchar (128) not null,objec"...) at Statement.cpp:160
#17 0x08485241 in Nfs::Statement::executeUpdate (this=0x40306628,
    sqlString=0x8722f50 "upgrade table system.privileges (holderType tinyint not null,holderSchema varchar (128) not null,holderName varchar (128) not null,objectType tinyint not null,objectSchema varchar (128) not null,objec"...) at Statement.cpp:1017
#18 0x0845efdb in RoleModel::createTables (this=0x402f8f58) at RoleModel.cpp:157
#19 0x0841b293 in Database::createDatabase (this=0x4c6f8028, filename=0x4b4fb96c "./test.ndb")
    at Database.cpp:519
#20 0x08411076 in Connection::createDatabase (this=0x402f8a98, dbName=0x402f83d0 "test",
    fileName=0x402f83f4 "./test.ndb", account=0x8716f8f "mysql", password=0x8716f8f "mysql",
    threads=0x402f8414) at Connection.cpp:1057
#21 0x083e7700 in StorageDatabase::createDatabase (this=0x402f81d0) at StorageDatabase.cpp:192
#22 0x083e3eef in StorageConnection::create (this=0x402f8118) at StorageConnection.cpp:225
#23 0x083e490b in StorageConnection::getStorageConnection (path=0x8f0fba8 "./test", mySqlThread=0x0,
    createFlag=OpenOrCreateDatabase) at StorageConnection.cpp:202
#24 0x083e4a11 in getStorageConnection (path=0x8f0fba8 "./test", mySqlThread=0x0,
    create=OpenOrCreateDatabase) at StorageConnection.cpp:65
#25 0x083e0cde in NfsStorageTable::create (this=0x8f5e828, mySqlName=0x4b4fd294 "./test/t1",
    form=0x4b4fc508, info=0x8f6c4b8) at ha_falcon.cpp:348
#26 0x083331bc in ha_create_table (thd=0x8f44ae8, path=0x4b4fd294 "./test/t1", db=0x8f6c440 "test",
    table_name=0x8f6c270 "t1", create_info=0x8f6c4b8, update_create_info=false) at handler.cc:2541
#27 0x0830bcbc in rea_create_table (thd=0x8f44ae8, path=0x4b4fd294 "./test/t1", db=0x8f6c440 "test",
    table_name=0x8f6c270 "t1", create_info=0x8f6c4b8, create_fields=@0x8f4501c, keys=0, key_info=0x8f6c6a0,
    file=0x8f6c538) at unireg.cc:356
#28 0x0834a745 in mysql_create_table_internal (thd=0x8f44ae8, db=0x8f6c440 "test",    table_name=0x8f6c270 "t1", lex_create_info=0x8f45104, fields=@0x8f4501c, keys=@0x8f45010,
    internal_tmp_table=false, select_field_count=0, use_copy_create_info=true) at sql_table.cc:3492
#29 0x0834aa2d in mysql_create_table (thd=0x8f44ae8, db=0x8f6c440 "test", table_name=0x8f6c270 "t1",
    create_info=0x8f45104, fields=@0x8f4501c, keys=@0x8f45010, internal_tmp_table=false,
    select_field_count=0, use_copy_create_info=true) at sql_table.cc:3572
#30 0x08258fea in mysql_execute_command (thd=0x8f44ae8) at sql_parse.cc:3019
#31 0x08260022 in mysql_parse (thd=0x8f44ae8, inBuf=0x8f6c218 "create table t1 (a int)", length=23)
    at sql_parse.cc:6062
#32 0x082609cf in dispatch_command (command=COM_QUERY, thd=0x8f44ae8,
    packet=0x8f641b9 "create table t1 (a int)", packet_length=24) at sql_parse.cc:1828
#33 0x08261cff in do_command (thd=0x8f44ae8) at sql_parse.cc:1612
#34 0x08262101 in handle_one_connection (arg=0x8f44ae8) at sql_parse.cc:1227
#35 0x40283297 in start_thread () from /lib/tls/libpthread.so.0
#36 0x4021837e in clone () from /lib/tls/libc.so.6
#37 0x4b4febb0 in ?? ()
[12 Oct 2006 16:11] Hakan Küçükyılmaz
Crashes also with 8k

(gdb) run --gdb --user=mysql --falcon_page_size=8192

Program received signal SIGILL, Illegal instruction.
[Switching to Thread 1263528880 (LWP 9340)]
0xffffe410 in __kernel_vsyscall ()
(gdb) bt
#0  0xffffe410 in __kernel_vsyscall ()
#1  0x40181541 in raise () from /lib/tls/libc.so.6
#2  0x08426a9a in Error::debugBreak () at Error.cpp:93
#3  0x08426af7 in Error::error (string=0x87285f4 "page %d wrong page type, expected %d got %d\n")
    at Error.cpp:70
#4  0x08498bce in Cache::fetchPage (this=0x402f8c80, dbb=0x402f8720, pageNumber=31, pageType=PAGE_inventory,
    lockType=Exclusive) at Cache.cpp:183
#5  0x0841ded2 in Dbb::fetchPage (this=0x402f8720, pageNumber=31, pageType=PAGE_inventory,
    lockType=Exclusive) at Dbb.cpp:196
#6  0x0844e820 in PageInventoryPage::allocPage (dbb=0x402f8720, pageType=PAGE_sections, transId=1)
    at PageInventoryPage.cpp:77
#7  0x0841deef in Dbb::allocPage (this=0x402f8720, pageType=PAGE_sections, transId=1) at Dbb.cpp:201
#8  0x0846667e in Section::createSection (dbb=0x402f8720, transId=1) at Section.cpp:98
#9  0x0841dfa8 in Dbb::createSection (this=0x402f8720, transId=1) at Dbb.cpp:225
#10 0x08414938 in Database::createSection (this=0x4c6f8028, transaction=0x402fddd0) at Database.cpp:886
#11 0x083ed353 in Table::create (this=0x4030855c, tableType=0x8726c54 "SYSTEM TABLE", transaction=0x402fddd0)
    at Table.cpp:200
#12 0x0848a3d9 in Nfs::Statement::createTable (this=0x40306628, syntax=0x403084fc) at Statement.cpp:218
#13 0x0848a4f5 in Nfs::Statement::upgradeTable (this=0x40306628, syntax=0x403084fc) at Statement.cpp:1130
#14 0x0848b49d in Nfs::Statement::executeDDL (this=0x40306628) at Statement.cpp:689
[26 Jan 2007 16:48] Ann Harrison
Allowing page sizes of 1K, 2K, 4K, 8K, 16K, and 32K.  Changed the switch
handling to accept anything between 0 - 32K.  Zero and no switch default
to 4K.  Otherwise we round up to the next acceptable size.  Changed a
couple of short to unsigned short or int to allow 32K size.
[8 Feb 2007 7:09] Calvin Sun
pushed into 5.2.1, and already documented.
[8 Feb 2007 18:54] Hakan Küçükyılmaz
I could not verify the fix on Linux 64-bit, change set 1.2424.1.1, 2007-02-08.

mysql> show variables like '%page%';
+----------------------------+---------+
| Variable_name              | Value   |
+----------------------------+---------+
| falcon_page_cache_size     | 4194304 |
| falcon_page_size           | 32768   |
| innodb_max_dirty_pages_pct | 90      |
| large_page_size            | 0       |
| large_pages                | OFF     |
+----------------------------+---------+
5 rows in set (0.01 sec)

mysql> create table t1 (a int) engine falcon;
ERROR 2013 (HY000): Lost connection to MySQL server during query

Backtrace is:

#0  0x0000002a95bf0479 in raise () from /lib64/tls/libc.so.6
#1  0x0000000000863dfe in Error::debugBreak () at Error.cpp:93
#2  0x0000000000863d85 in Error::error (string=0xbbf6d8 "page %d wrong page type, expected %d got %d\n") at Error.cpp:70
#3  0x00000000008e67fd in Cache::fetchPage (this=0x2a96453350, dbb=0x2a96452ce8, pageNumber=31, pageType=PAGE_inventory, lockType=Exclusive)
    at Cache.cpp:223
#4  0x000000000085b3ad in Dbb::fetchPage (this=0x2a96452ce8, pageNumber=31, pageType=PAGE_inventory, lockType=Exclusive) at Dbb.cpp:201
#5  0x00000000008948ef in PageInventoryPage::allocPage (dbb=0x2a96452ce8, pageType=PAGE_sections, transId=1) at PageInventoryPage.cpp:80
#6  0x000000000085b46f in Dbb::allocPage (this=0x2a96452ce8, pageType=PAGE_sections, transId=1) at Dbb.cpp:227
#7  0x00000000008ae06a in Section::createSection (dbb=0x2a96452ce8, transId=1) at Section.cpp:108
#8  0x000000000085b555 in Dbb::createSection (this=0x2a96452ce8, transId=1) at Dbb.cpp:251
#9  0x000000000085410a in Database::createSection (this=0x2a962516e8, transaction=0x2a9645dcf0) at Database.cpp:909
#10 0x00000000008288c7 in Table::create (this=0x2a9646a008, tableType=0xbbc8a3 "SYSTEM TABLE", transaction=0x2a9645dcf0) at Table.cpp:189
#11 0x00000000008d04a5 in Nfs::Statement::createTable (this=0x2a964545c0, syntax=0x2a96469f20) at Statement.cpp:218
#12 0x00000000008d3183 in Nfs::Statement::upgradeTable (this=0x2a964545c0, syntax=0x2a96469f20) at Statement.cpp:1129
#13 0x00000000008d2055 in Nfs::Statement::executeDDL (this=0x2a964545c0) at Statement.cpp:688
#14 0x00000000008d75b3 in Nfs::Statement::execute (this=0x2a964545c0,
    sqlString=0xbb6820 "upgrade table system.privileges (holderType tinyint not null,holderSchema varchar (128) not null,holderName varchar (128) not null,objectType tinyint not null,objectSchema varchar (128) not null,objec"..., isQuery=false) at Statement.cpp:2607
#15 0x00000000008d01a6 in Nfs::Statement::execute (this=0x2a964545c0,
    sqlString=0xbb6820 "upgrade table system.privileges (holderType tinyint not null,holderSchema varchar (128) not null,holderName varchar (128) not null,objectType tinyint not null,objectSchema varchar (128) not null,objec"...) at Statement.cpp:160
#16 0x00000000008d2cac in Nfs::Statement::executeUpdate (this=0x2a964545c0,
    sqlString=0xbb6820 "upgrade table system.privileges (holderType tinyint not null,holderSchema varchar (128) not null,holderName varchar (128) not null,objectType tinyint not null,objectSchema varchar (128) not null,objec"...) at Statement.cpp:1016
#17 0x00000000008a64a4 in RoleModel::createTables (this=0x2a96284920) at RoleModel.cpp:157
#18 0x00000000008532ea in Database::createDatabase (this=0x2a962516e8, filename=0x4027ed40 "./test.fts") at Database.cpp:526
#19 0x000000000084baf6 in Connection::createDatabase (this=0x2a96452aa0, dbName=0x2a964527d4 "test", fileName=0x2a96452804 "./test.fts",
    account=0xba3eb7 "mysql", password=0xba3eb7 "mysql", threads=0x2a96452830) at Connection.cpp:1058
#20 0x000000000081d004 in StorageDatabase::createDatabase (this=0x2a964523f0) at StorageDatabase.cpp:165
#21 0x000000000081bda8 in StorageConnection::create (this=0x2a964522c8) at StorageConnection.cpp:118
#22 0x000000000081f844 in StorageHandler::getStorageConnection (this=0x2a96251048, path=0xf9a1b0 "./test", mySqlThread=0x0,
    createFlag=OpenOrCreateDatabase) at StorageHandler.cpp:167
#23 0x0000000000815c67 in NfsStorageTable::create (this=0xfd8b18, mySqlName=0x40280a50 "./test/t1", form=0x4027fe10, info=0xfecc60)
    at ha_falcon.cpp:538
#24 0x000000000075c08f in ha_create_table (thd=0xfc54a8, path=0x40280a50 "./test/t1", db=0xfecb90 "test", table_name=0xfec890 "t1",
    create_info=0xfecc60, update_create_info=false) at handler.cc:2596
#25 0x000000000073149a in rea_create_table (thd=0xfc54a8, path=0x40280a50 "./test/t1", db=0xfecb90 "test", table_name=0xfec890 "t1",
    create_info=0xfecc60, create_fields=@0xfc5de8, keys=0, key_info=0xfecf38, file=0xfecd30) at unireg.cc:361
#26 0x00000000007751fc in mysql_create_table_internal (thd=0xfc54a8, db=0xfecb90 "test", table_name=0xfec890 "t1", lex_create_info=0xfc5fa8,
    fields=@0xfc5de8, keys=@0xfc5dd0, internal_tmp_table=false, select_field_count=0, use_copy_create_info=true) at sql_table.cc:3509
#27 0x0000000000775507 in mysql_create_table (thd=0xfc54a8, db=0xfecb90 "test", table_name=0xfec890 "t1", create_info=0xfc5fa8,
    fields=@0xfc5de8, keys=@0xfc5dd0, internal_tmp_table=false, select_field_count=0, use_copy_create_info=true) at sql_table.cc:3586
#28 0x00000000006737a3 in mysql_execute_command (thd=0xfc54a8) at sql_parse.cc:3088
#29 0x000000000067b713 in mysql_parse (thd=0xfc54a8, inBuf=0xfec808 "create table t1 (a int) engine falcon", length=37) at sql_parse.cc:6162
#30 0x0000000000670e66 in dispatch_command (command=COM_QUERY, thd=0xfc54a8, packet=0xfe4779 "create table t1 (a int) engine falcon",
    packet_length=38) at sql_parse.cc:1857
#31 0x0000000000670528 in do_command (thd=0xfc54a8) at sql_parse.cc:1626
#32 0x000000000066f658 in handle_one_connection (arg=0xfc54a8) at sql_parse.cc:1232
#33 0x0000002a95ef2aff in start_thread () from /lib64/tls/libpthread.so.0
#34 0x0000002a95c7c4b3 in clone () from /lib64/tls/libc.so.6

Regards, Hakan
[15 Feb 2007 22:08] MySQL Verification Team
still asserts on todays BK sources of 5.2.4-falcon-alpha-debug.  Ignore my previous post, i had forgotten to rm -rf my datadir first.
[18 Feb 2007 15:47] Hakan Küçükyılmaz
Setting page size to 32KB leads to failure of falcon_bug_126.

./mysql-test-run.pl --skip-ndb --mysqld="--falcon_page_size=32768" falcon_bug_126_I falcon_bug_126_II

TEST                           RESULT         TIME (ms)
-------------------------------------------------------

falcon_bug_126_I               [ pass ]            513
falcon_bug_126_II              [ fail ]

Errors are (from /home/hakan/lsmy005/mysql/mysql-5.1-falcon-lu0009/mysql-test/var/log/mysqltest-time) :
mysqltest: At line 7: query 'SELECT * FROM t1' failed: 1030: Got error 157 from storage engine
(the last lines may be the most important ones)
Result from queries before failure can be found in /home/hakan/lsmy005/mysql/mysql-5.1-falcon-lu0009/mysql-test/var/log/falcon_bug_126_II.log
[19 Feb 2007 16:29] Hakan Küçükyılmaz
32K page size works now with falcon_select test. However, page sizes of 1K and 2K are still propblematic and some tests are failing:

1024
falcon_bug_185 falcon_bug_23189 falcon_bug_23818_A falcon_bug_23818_B falcon_bug_23818_C falcon_bug_23818_I falcon_bug_23818_II falcon_bug_26420 falcon_bugs falcon_limits

2048
falcon_bug_23818_A falcon_bug_23818_B falcon_bug_23818_C falcon_bug_23818_I falcon_bug_23818_II

4096
All ok. 499.727 seconds

8192
All ok. 463.906 seconds

16384
All ok. 411.623 seconds

32768
All ok  475.328 seconds

Regards, Hakan
[19 Feb 2007 19:13] Hakan Küçükyılmaz
Page size of 1K and 2K does not work properly.

Modified falcon_page_size_1.test and falcon_page_size_2.test to reflect the crash.

Regards, Hakan
[20 Feb 2007 21:26] Kevin Lewis
Provided some code to Hakan for evaluation.
[2 Aug 2007 19:12] MySQL Verification Team
Could you please reverify. I can't repeat on Windows X64:

c:\dev\6.0>bin\mysql -uroot
Welcome to the MySQL monitor.  Commands end with ; or \g.
Your MySQL connection id is 2
Server version: 6.0.2-alpha-nt Source distribution

Type 'help;' or '\h' for help. Type '\c' to clear the buffer.

mysql> create schema test; use test;
Query OK, 1 row affected (0.00 sec)

Database changed
mysql> set storage_engine=falcon;
Query OK, 0 rows affected (0.00 sec)

mysql> create table t1 (a int);
Query OK, 0 rows affected (0.18 sec)

mysql> show variables like "falcon_page_size";
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| falcon_page_size | 32768 |
+------------------+-------+
1 row in set (0.01 sec)

mysql> show variables like "%version%";
+-------------------------+---------------------+
| Variable_name           | Value               |
+-------------------------+---------------------+
| protocol_version        | 10                  |
| version                 | 6.0.2-alpha-nt      |
| version_comment         | Source distribution |
| version_compile_machine | unknown             |
| version_compile_os      | Win64               |
+-------------------------+---------------------+
5 rows in set (0.00 sec)

mysql> show create table t1;
+-------+---------------------------------------------------------------------------------------+
| Table | Create Table                                                                          |
+-------+---------------------------------------------------------------------------------------+
| t1    | CREATE TABLE `t1` (
  `a` int(11) DEFAULT NULL
) ENGINE=Falcon DEFAULT CHARSET=latin1 |
+-------+---------------------------------------------------------------------------------------+
1 row in set (0.00 sec)

mysql>

Thanks in advance.
[2 Aug 2007 23:26] Hakan Küçükyılmaz
Actually 32k does not crash anymore. 

However, page size of 1k and 2k are crashing. Can you verify with 1k and 2k, please?

Thanks,

Hakan
[2 Sep 2007 23:00] Bugs System
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
[2 Sep 2007 23:37] Hakan Küçükyılmaz
I think page size of 1k and 2k are still crashing Falcon.
[16 Oct 2007 11:57] Hakan Küçükyılmaz
Page size of 1K and 2K are still crashing Falcon.

We should disable 1K and 2K pages or fix the crash.

Best regards,

Hakan
[18 Oct 2007 19:50] Hakan Küçükyılmaz
Still fails, please use falcon_page_size_1.test and falcon_page_size_2.test

./mysql-test-run.pl --enable-disabled --skip-ndb --mem --suite=falcon falcon_page_size_1 falcon_page_size_2

TEST                           RESULT         TIME (ms)
-------------------------------------------------------

falcon.falcon_page_size_1      [ fail ]

ERROR: Bug#23220 2007-02-19 hakank Currently failing

Stopping All Servers
Restoring snapshot of databases
Resuming Tests

falcon.falcon_page_size_2      [ fail ]

ERROR: Bug#23220 2007-02-19 hakank Currently failing

Stopping All Servers
Restoring snapshot of databases
Saving core.8899
Resuming Tests

-------------------------------------------------------
Stopping All Servers
Failed 2/2 tests, 0.00% were successful.
[19 Nov 2007 0:00] Bugs System
No feedback was provided for this bug for over a month, so it is
being suspended automatically. If you are able to provide the
information that was originally requested, please do so and change
the status of the bug back to "Open".
[19 Nov 2007 22:19] Hakan Küçükyılmaz
Initial bug report about page size of 32k does not fail anymore

hakan@lu0011:~/work/mysql/mysql-6.0-falcon/mysql-test$ ./mysql-test-run.pl --force --suite=falcon falcon_page_size_32

TEST                           RESULT         TIME (ms)
-------------------------------------------------------

falcon.falcon_page_size_32     [ pass ]            468
-------------------------------------------------------
Stopping All Servers
All 1 tests were successful.
The servers were restarted 1 times
Spent 0.468 of 7 seconds executing testcases

Opening new bug about failing 1k and 2k page sizes.