| Bug #44657 | Got error 124 from storage engine when load concurrent data infile working | ||
|---|---|---|---|
| Submitted: | 5 May 2009 7:14 | Modified: | 21 Aug 2009 14:46 |
| Reporter: | Igor Simonov | Email Updates: | |
| Status: | Duplicate | Impact on me: | |
| Category: | MySQL Server: Partitions | Severity: | S1 (Critical) |
| Version: | 5.1.30, 5.1.34, 5.1.36 | OS: | Any (linux, windows) |
| Assigned to: | Assigned Account | CPU Architecture: | Any |
| Tags: | corruption | ||
[5 May 2009 7:14]
Igor Simonov
[5 May 2009 8:13]
Igor Simonov
query must be like select * from TABLE where describe='something'; error will be returned at the "load concurrent" starts creating indexes if query like select * from table limit 10; all ok.
[5 May 2009 8:36]
Sveta Smirnova
Thank you for the report. I can not repeat described behavior with test data. Please provide your error log file.
[5 May 2009 8:38]
Sveta Smirnova
Please also specify your operating system.
[6 May 2009 12:41]
Igor Simonov
create table and load data
Attachment: create.sql (application/octet-stream, text), 706 bytes.
[6 May 2009 12:42]
Igor Simonov
error file
Attachment: mysql.local.err (application/octet-stream, text), 1.44 KiB.
[6 May 2009 12:43]
Igor Simonov
mysqladmin variables
Attachment: mysqladmin.vari (application/octet-stream, text), 19.73 KiB.
[6 May 2009 12:43]
Igor Simonov
configuration file
Attachment: my.cnf (application/octet-stream, text), 632 bytes.
[6 May 2009 12:44]
Igor Simonov
mysql console
Attachment: screen.txt (text/plain), 4.65 KiB.
[6 May 2009 13:02]
Igor Simonov
tested OS Linux RHEL AS 4.6 x64, CentOS 5.3 x64
i am can not upload data file because it over 5M size.
it file is a log of tcpdump converted by perl script.
#!/usr/bin/perl
while (<STDIN>) {
$stri=$_;
$stri=~m/^(\d{2}):(\d{2}):\d{2}\.(\d{6}) IP (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\.?(\d{1,5})? \> (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})\.?(\d{1,5})?:.*/;
print "$1$2#$4#$5#$6#$7#$3\n";
};
#tcpdump -ieth0 -n |./tcpconv >rez.txt
total data must be minimum 2M records, according a server productivity.
[9 Jun 2009 11:55]
MySQL Verification Team
i can repeat this quite easily: 090609 13:54:34 [ERROR] Got error 124 when reading table '.\test\ip20090101' 090609 13:54:34 [ERROR] Got error 124 when reading table '.\test\ip20090101' 090609 13:54:35 [ERROR] Got error 124 when reading table '.\test\ip20090101' 090609 13:54:35 [ERROR] Got error 124 when reading table '.\test\ip20090101' 090609 13:54:36 [ERROR] Got error 124 when reading table '.\test\ip20090101' 090609 13:54:36 [ERROR] Got error 124 when reading table '.\test\ip20090101' I can make a testcase shortly.
[9 Jun 2009 13:14]
MySQL Verification Team
.c testcase. user/host/password at top of .c test. first place the file "t1.txt" into the <datadir>/data/test directory
Attachment: bug44657.c (text/x-csrc), 6.79 KiB.
[9 Jun 2009 13:15]
MySQL Verification Team
t1.txt for load data infile to use.
Attachment: t1.zip (application/x-zip-compressed, text), 243.49 KiB.
[10 Jun 2009 6:24]
MySQL Verification Team
Mattias, can you tell if this bug is also affecting normal concurrent inserts (current_insert=1 or 2) ? I couldn't repeat it yet, but just want to know if it's limited only to load data infile ...
[10 Aug 2009 22:56]
Roel Van de Paar
Also see bug #46639
[18 Aug 2009 7:54]
Mattias Jonsson
May be a duplicate of bug#46639, which has a simpler testcase.
[19 Aug 2009 3:57]
Roel Van de Paar
Customer indicates that they see both these bugs (bug #44657 and bug #46639) in very different scenarios. Hence, this bug should not be marked as duplicate, or, if there is indeed one fix for both bugs, both should be verified as now working correctly.
[21 Aug 2009 14:46]
Mattias Jonsson
Was finally able to verify this by:
prepare a file by this perl-script:
while (true)
{
printf("%2d%02d\t%d.%d.%d.%d\t%d\n", rand(24), rand(60), rand(255) + 1, rand(256), rand(256), rand(256), rand(65000));
}
about 1-2 million rows into file 't1.txt' in the data/test directory.
running on client 1:
create table t1 (time int(4) unsigned not null, addr varchar(18) not null, addit char(12) default null, key ix_addr(addr), key ix_addit(addit)) engine=MyISAM partition by range (time) (partition p0 values less than (600) engine = MyISAM, partition p1 values less than (1200) engine = MyISAM, partition p2 values less than (1800) engine = MyISAM, partition p3 values less than (2400) engine = MyISAM);
load data concurrent infile 't1.txt' into table t1;
When the load data statement is running repeat the following query in another client:
select * from t1 where addr = '127.0.0.1' limit 10;
and it will fail as described.
This was done in the latest mysql-5.1-bugteam tree.
The patch for bug#46639 solves this too.
=== modified file 'storage/myisam/mi_search.c'
--- storage/myisam/mi_search.c 2009-02-13 16:41:47 +0000
+++ storage/myisam/mi_search.c 2009-08-21 14:39:33 +0000
@@ -28,11 +28,18 @@
{
if (inx == -1) /* Use last index */
inx=info->lastinx;
- if (inx < 0 || ! mi_is_key_active(info->s->state.key_map, inx))
+ if (inx < 0)
{
my_errno=HA_ERR_WRONG_INDEX;
return -1;
}
+ if (!mi_is_key_active(info->s->state.key_map, inx))
+ {
+ my_errno= info->s->state.state.records ? HA_ERR_WRONG_INDEX :
+ HA_ERR_END_OF_FILE;
+ return -1;
+ }
+
if (info->lastinx != inx) /* Index changed */
{
info->lastinx = inx;
closing as a duplicate of bug#46639.
