Bug #26850 | Falcon: crash with random inserts of long varchar columns | ||
---|---|---|---|
Submitted: | 5 Mar 2007 21:56 | Modified: | 20 Apr 2007 14:54 |
Reporter: | Peter Gulutzan | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Falcon storage engine | Severity: | S3 (Non-critical) |
Version: | 5.2.4-falcon-alpha-debug | OS: | Linux (SUSE 10.0 / 64-bit) |
Assigned to: | CPU Architecture: | Any |
[5 Mar 2007 21:56]
Peter Gulutzan
[5 Mar 2007 22:29]
Hakan Küçükyılmaz
Reproduced as described. +------+-------------+ | v | length(vc1) | +------+-------------+ | 3518 | 51 | +------+-------------+ 1 row in set (56.41 sec) +------+-------------+ | v | length(vc1) | +------+-------------+ | 3519 | 98 | +------+-------------+ 1 row in set (56.43 sec) Backtrace is: #0 0xffffe410 in __kernel_vsyscall () #1 0x40182541 in raise () from /lib/tls/libc.so.6 #2 0x08458292 in Error::debugBreak () at Error.cpp:93 #3 0x084582ef in Error::error (string=0x8765198 "assertion failed at line %d in file %s\n") at Error.cpp:70 #4 0x0845837f in Error::assertionFailed (fileName=0x87666dc "IndexNode.h", line=134) at Error.cpp:77 #5 0x08469909 in IndexNode::expandKey (this=0x42b5f710, indexKey=0x42b5f7b4) at IndexNode.h:134 #6 0x08468816 in IndexPage::findInsertionPoint (level=1, indexKey=0x42b607f4, recordNumber=1484, expandedKey=0x42b5f7b4, nodes=0x41b9d034, bucketEnd=0x41b9da1b) at IndexPage.cpp:1135 #7 0x08468892 in IndexPage::findInsertionPoint (this=0x41b9d000, indexKey=0x42b607f4, recordNumber=1484, expandedKey=0x42b5f7b4) at IndexPage.cpp:973 #8 0x08468919 in IndexPage::addNode (this=0x41b9d000, dbb=0x404fab3c, indexKey=0x42b607f4, recordNumber=1484) at IndexPage.cpp:58 #9 0x0846a9e9 in IndexRootPage::splitIndexPage (dbb=0x404fab3c, indexId=29, bdb=0x417848d0, transId=0, addResult=SplitMiddle, indexKey=0x42b62874, recordNumber=3519) at IndexRootPage.cpp:552 #10 0x0846ade4 in IndexRootPage::addIndexEntry (dbb=0x404fab3c, indexId=29, key=0x42b62874, recordNumber=3519, transId=0) at IndexRootPage.cpp:185 #11 0x0846be31 in IndexRootPage::indexMerge (dbb=0x404fab3c, indexId=29, logRecord=0x42b632a4, transId=0) at IndexRootPage.cpp:945 #12 0x084bdbd6 in SRLUpdateIndex::execute (this=0x42b632a4) at SRLUpdateIndex.cpp:155 #13 0x084bdc53 in SRLUpdateIndex::commit (this=0x42b632a4) at SRLUpdateIndex.cpp:135 #14 0x084a7413 in SerialLogTransaction::commit (this=0x405cd708) at SerialLogTransaction.cpp:70 #15 0x084a7704 in SerialLogTransaction::doAction (this=0x405cd708) at SerialLogTransaction.cpp:127 #16 0x084a196a in SerialLog::gopherThread (this=0x41795614) at SerialLog.cpp:156 #17 0x084a1a8a in SerialLog::gopherThread (arg=0x41795614) at SerialLog.cpp:121 #18 0x08425481 in Thread::thread (this=0x40501b28) at Thread.cpp:162 #19 0x08425941 in Thread::thread (parameter=0x40501b28) at Thread.cpp:139 #20 0x40284297 in start_thread () from /lib/tls/libpthread.so.0 #21 0x4021937e in clone () from /lib/tls/libc.so.6 #22 0x42b63bb0 in ?? () Best regards, Hakan
[5 Mar 2007 22:41]
Hakan Küçükyılmaz
Added seed for rand() to get better reproducability. The following procedure hits assertion at v = 822: set @a = 8080; delimiter // create procedure pj () begin declare v int default 0; declare vc1 varchar(100); declare vc2 varchar(1000); create table tj (s1 int, s2 varchar(100), s3 varchar(10000)) engine=falcon; create index i on tj (s2(100),s3(1000)); while v < 10000 do set vc1 = repeat('a',rand(@a)*99); set vc2 = repeat('a',999); select v, length(vc1); insert into tj values (v,vc1,vc2); set v = v + 1; set @a = @a - 1; end while; end// call pj()// Best regards, Hakan
[13 Apr 2007 19:44]
Hakan Küçükyılmaz
I had to modify the test case as the index (s2(100),s3(1000) exceeded the maximum allowed key size for Falcon. With this modified procedure I cannot reproduce this bug anymore. set @a = 8080; delimiter // create procedure pj () begin declare v int default 0; declare vc1 varchar(100); declare vc2 varchar(1000); create table tj (s1 int, s2 varchar(100), s3 varchar(10000)) engine=falcon; create index i on tj (s2(100),s3(800)); while v < 10000 do set vc1 = repeat('a',rand(@a)*99); set vc2 = repeat('a',799); select v, length(vc1); insert into tj values (v,vc1,vc2); set v = v + 1; set @a = @a - 1; end while; end// call pj()//
[15 Apr 2007 20:28]
Peter Gulutzan
I confirm that I can no longer see a crash with the latest build.
[15 Apr 2007 20:43]
Hakan Küçükyılmaz
Activated the error message (not pushed yet). Now we get: [22:40] root@(none)>use test; Database changed [22:40] root@test>create table tj (s1 int, s2 varchar(100), s3 varchar(10000)); Query OK, 0 rows affected (0.28 sec) [22:40] root@test>create index i on tj (s2(100),s3(1000)); ERROR 1005 (HY000): Can't create table 'test.#sql-373b_2' (errno: 140) Please note that the 1100 bytes rule does not apply for compound indexes. The error message is as the best we could get. After Alpha we plan to have a better solution for this use case. Best regards, Hakan
[20 Apr 2007 14:54]
MC Brown
A note has been added to the 5.2.4 changelog.
[10 Jul 2007 19:08]
MC Brown
This bug report entry has been moved to the 6.0.0 Falcon changelog.