Bug #27594 | Can't find file: '.\db1\t1.frm' (errno: 13) | ||
---|---|---|---|
Submitted: | 2 Apr 2007 19:04 | Modified: | 4 Nov 2009 16:25 |
Reporter: | Shane Bester (Platinum Quality Contributor) | Email Updates: | |
Status: | Closed | Impact on me: | |
Category: | MySQL Server: Locking | Severity: | S3 (Non-critical) |
Version: | 5.0.40 | OS: | Windows (Windows only) |
Assigned to: | Konstantin Osipov | CPU Architecture: | Any |
Tags: | bfsm_2007_05_03 |
[2 Apr 2007 19:04]
Shane Bester
[2 Apr 2007 19:06]
MySQL Verification Team
testcase.
Attachment: bug27594.c (text/plain), 6.23 KiB.
[2 May 2007 14:38]
MySQL Verification Team
Debug trace showing the error. Search for "errno: 13" to see which threads failed.
Attachment: 13.log.bz2 (application/octet-stream, text), 490.15 KiB.
[22 May 2007 13:32]
Georgi Kodinov
The real problem is that the open() system call returns EACCESS on win32 when another thread is running rmdir() system call on the directory that open() runs in. This is a very narrow window time window that results simply in a wrong error message. There are some simple solutions to the problem (like using a system-wide lock), but that would create an unneeded bottleneck. To correctly rectify that problem we would need to implement per-database lock (as it's currently done for tables). But that work exceeds the volume of a bug fix. Another work-in-progress that can influence the problem at hand is the task to replace the posix file handling function calls with native ones on Win32.
[22 May 2007 22:32]
Arjen Lentz
Georgi... why would another thread run an rmdir() on the directory? Nobody is trying to drop the database. Either you meant another function call (not rmdir) or you must be mistaken here.
[23 May 2007 9:23]
MySQL Verification Team
Arjen, this testcase of mine does 'drop database if exists db1' So I'm happy with the explanation of the cause, and I think this bug report has served a useful purpose in understanding one circumstance in which errno 13 can be seen.
[27 Sep 2008 10:32]
Konstantin Osipov
This needs to be re-checked against 6.0, where we have a new table locking impl.
[2 Jul 2009 10:16]
Konstantin Osipov
Unassigning from my lead until it's re-verified (5.4 or 6.0 trees are good).
[4 Nov 2009 16:25]
MySQL Verification Team
Closing since isn't more repeatable on server 5.5.0 built from mysql-next-mr source it is still repeatable on 5.0. c:\dbs>c:\dbs\5.0\bin\mysqld --defaults-file=c:\dbs\5.0\my.ini --standalone --console 091104 14:13:00 InnoDB: Started; log sequence number 0 5696847 091104 14:13:01 [Note] c:\dbs\5.0\bin\mysqld: ready for connections. Version: '5.0.88-Win X64' socket: '' port: 3500 Source distribution 091104 14:16:16 [ERROR] c:\dbs\5.0\bin\mysqld: Can't find file: '.\db1\t1.frm' (errno: 13) 091104 14:18:53 InnoDB Plugin 1.0.5 started; log sequence number 40595737 091104 14:18:53 [Note] Event Scheduler: Loaded 0 events 091104 14:18:53 [Note] c:\dbs\5.5\bin\mysqld: ready for connections. Version: '5.5.0-beta-Win X64' socket: '' port: 3540 Source distribution
[4 Nov 2009 21:50]
Arjen Lentz
Miguel, please tell where the source code or bzr repository for 5.5 is available. Thanks
[5 Nov 2009 0:24]
MySQL Verification Team
Arjen, You can test against mysql-6.0 too: miguel@quetzalli:~/bug$ ./bug27594 running initializations.. pre-generating 16777216 bytes of random data about to spawn 10 threads .......... completed spawning new database worker threads testcase is now running, so watch for error output c:\dbs>c:\dbs\6.0\bin\mysqld --defaults-file=c:\dbs\6.0\my.ini --standalone --console 091104 22:11:01 InnoDB: Started; log sequence number 0 46409 091104 22:11:01 [Note] Event Scheduler: Loaded 0 events 091104 22:11:01 [Note] c:\dbs\6.0\bin\mysqld: ready for connections. Version: '6.0.12-alpha-Win X64-log' socket: '' port: 3600 Source distribution mysql 6.0 > show processlist\G *************************** 1. row *************************** Id: 1 User: root Host: localhost:49182 db: NULL Command: Query Time: 0 State: NULL Info: show processlist *************************** 2. row *************************** Id: 4 User: miguel Host: ::ffff:192.168.0.79:46618 db: test Command: Query Time: 0 State: freeing items Info: insert into db1.t1(c1,c2,c3) values ('fbmwbseszvwadidvowforyziwctmyxncfqdrlddppgcqwpwxleetzakahtfrfl *************************** 3. row *************************** Id: 5 User: miguel Host: ::ffff:192.168.0.79:46620 db: test Command: Query Time: 1 State: freeing items Info: insert into db1.t1(c1,c2,c3) values ('llpsizkikcwaztvhwmcbafmtokqnhagghbhmtfktgihxszudmwvxwxylrkfvwo <cut> I don't know what is the code which fixed it, I just followed the Kostja instructions to test against these servers.
[5 Nov 2009 0:45]
Arjen Lentz
Hi Miguel... since 6.0 was abandoned, what's the point of having it in 6.0 ? There are a variety of 6.0-related branches on Launchpad, some even with recent changes. So which should we be looking at? Please appreciate that outside Sun/MySQL we have no idea what the internal versioning logic is right now, and you also have branches/versions that are not public. So please be very clear, and realistically I would only regard a bug as fixed/closed if there is publically available source code for it. So, it's really important we know where on launchpad a branch is that reflects what you are using. Thanks
[5 Nov 2009 14:39]
MySQL Verification Team
I couldn't repeat against current source server mysql-5.1: *************************** 10. row *************************** Id: 11 User: miguel Host: QUETZALLI:42673 db: test Command: Query Time: 0 State: freeing items Info: insert into db1.t1(c1,c2,c3) values ('ztxxcbmtlnrxmpijspxcsvdeuuhqjhmbzaiwcosskpgexysetvt *************************** 11. row *************************** Id: 12 User: miguel Host: QUETZALLI:42674 db: test Command: Query Time: 0 State: update Info: insert into db1.t1(c1,c2,c3) values ('bwbhjuhaliomvtbiyjojofgmdlmyvyiuqtmvjijuyxajauqknxh 11 rows in set (0.00 sec) mysql 5.1 > c:\dbs>c:\dbs\5.1\bin\mysqld --defaults-file=c:\dbs\5.1\my.ini --standalone --console 091105 12:27:05 [Note] Plugin 'FEDERATED' is disabled. 091105 12:27:06 InnoDB: Started; log sequence number 0 44243 091105 12:27:06 [Note] Event Scheduler: Loaded 0 events 091105 12:27:06 [Note] c:\dbs\5.1\bin\mysqld: ready for connections. Version: '5.1.42-Win X64-log' socket: '' port: 3510 Source distribution So the version 5.0 it is the only one I was able to repeat.
[5 Nov 2009 14:49]
Valeriy Kravchuk
Arjen, https://code.launchpad.net/~mysql/mysql-server/mysql-6.0-codebase is a branch to look at, I think.
[6 Nov 2009 0:22]
Arjen Lentz
Thanks Miguel, so essentially the fix is per 5.1. Valeriy, why would I want to look at any 6.0 branch, if 6.0 has been abandoned?