| Bug #39296 | LOAD DATA LOCAL INFILE leads to crash in Bdb::mark() | ||
|---|---|---|---|
| Submitted: | 7 Sep 2008 20:04 | Modified: | 9 Jan 2009 14:13 |
| Reporter: | Hakan Küçükyılmaz | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Falcon storage engine | Severity: | S1 (Critical) |
| Version: | 6.0-falcon-team bzr | OS: | Any |
| Assigned to: | Kelly Long | CPU Architecture: | Any |
| Tags: | falcon, LOAD DATA INFILE | ||
[7 Sep 2008 20:41]
Hakan Küçükyılmaz
Crash is at
void Bdb::mark(TransId transId)
{
ASSERT(useCount > 0);
ASSERT(lockType == Exclusive);
ASSERT(!dbb->isReadOnly);
dbb is null
[9 Sep 2008 21:38]
Kelly Long
Using hashTable array value without acquiring hashTableLock first in Cache.cpp code.
[9 Sep 2008 22:41]
Kevin Lewis
Kelly committed and pushed this change; revno: 2812 revision-id: klong@mysql.com-20080909205757-4muonehvc87iajya parent: vvaintroub@mysql.com-20080906051438-pw74r0tusp0oyimy committer: Kelly Long <klong@mysql.com> branch nick: mysql-6.0-falcon-team-bug39296 timestamp: Tue 2008-09-09 14:57:57 -0600 message: Fix bug 39296. some code cleanup: don't do explicit unlock if just before return(). fix white space - indenting Moved some code that was duplicated to be inside getFreeBuffer(). One copy.
[9 Sep 2008 22:43]
Kevin Lewis
bzr diff -p1 -r2811..2812
Attachment: 39296.patch.txt (text/plain), 5.37 KiB.
[9 Sep 2008 22:44]
Kevin Lewis
The code changes look good to me.
[9 Jan 2009 14:13]
MC Brown
A note has been added to the 6.0.7 changelog: Running LOAD DATA INFILE on a large source data into a Falcon table with millions of rows, a crash could occur.

Description: Running a LOAD DATA INFILE ends in a crash in Bdb::mark(). I tried with latest mysql-6.0-falcon-team from bzr and compiled with: BUILD/compile-amd64-debug-max-no-ndb and BUILD/compile-amd64-max-no-ndb How to repeat: Generate 100 million rows: #!/usr/bin/perl use strict; my $i; my $maxi = 100000000; for ($i = 0; $i < $maxi ; $i++) { print "$i,xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx xxxxxxxxxxxxxxxxx\n"; } This generate around 11GB of data. CREATE TABLE bug ( id int(11) NOT NULL, val text NOT NULL, UNIQUE KEY bug_id (id) ) ENGINE=Falcon; load data local infile '/home/hakan/100_mio_rows.txt' into table bug fields terminated by ','; When falcon_user.fts gets around 3.8GB we see a crash: sql/mysqld(my_print_stacktrace+0x35)[0xac6475] sql/mysqld(handle_segfault+0x336)[0x674596] /lib/libpthread.so.0[0x7fd2c8589a90] sql/mysqld(Bdb::mark(unsigned int)+0x71)[0x92bec1] sql/mysqld(Cache::fakePage(Dbb*, int, PageType, unsigned int)+0x6e)[0x88d45e] sql/mysqld(Dbb::allocPage(PageType, unsigned int)+0x11)[0x8a5be1] sql/mysqld(Section::storeRecord(RecordLocatorPage*, int, RecordIndex*, Stream*, unsigned int, bool)+0x11c)[0x8f06dc] sql/mysqld(Section::updateRecord(int, Stream*, unsigned int, bool)+0x1a4)[0x8f17f4] sql/mysqld(Dbb::updateBlob(Section*, int, Stream*, Transaction*)+0xcd)[0x8a8f0d] sql/mysqld(Table::storeBlob(Transaction*, unsigned int, unsigned char const*)+0x89)[0x868f99] sql/mysqld(StorageInterface::encodeRecord(unsigned char*, bool)+0x736)[0x8545a6] sql/mysqld(StorageInterface::write_row(unsigned char*)+0x5b)[0x856c5b] sql/mysqld(handler::ha_write_row(unsigned char*)+0x80)[0x768030] sql/mysqld(write_record(THD*, st_table*, st_copy_info*)+0x5d)[0x6f4a4d] sql/mysqld(mysql_load(THD*, sql_exchange*, TABLE_LIST*, List<Item>&, List<Item>&, List<Item>&, enum_duplicates, bool, bool)+0x18d7)[0x788d37] sql/mysqld(mysql_execute_command(THD*)+0x33e7)[0x687037] sql/mysqld(mysql_parse(THD*, char const*, unsigned int, char const**)+0x3af)[0x689acf] sql/mysqld(dispatch_command(enum_server_command, THD*, char*, unsigned int)+0xbbb)[0x68a69b] sql/mysqld(handle_one_connection+0x1dd)[0x67d8ad] /lib/libpthread.so.0[0x7fd2c8581fc7] /lib/libc.so.6(clone+0x6d)[0x7fd2c70dd7cd]