| Bug #47870 | Bogus "The table mysql.proc is missing,..." | ||
|---|---|---|---|
| Submitted: | 6 Oct 2009 17:28 | Modified: | 24 Jun 2011 18:43 |
| Reporter: | Matthias Leich | Email Updates: | |
| Status: | Closed | Impact on me: | |
| Category: | MySQL Server: Stored Routines | Severity: | S3 (Non-critical) |
| Version: | 5.1,6.0.14 | OS: | Any |
| Assigned to: | CPU Architecture: | Any | |
[4 Nov 2009 15:55]
Jon Olav Hauglid
Reproduceable using MTR on 5.1-bugteam if the following sync point is added:
=== modified file 'sql/sql_db.cc'
@@ -1630,6 +1631,8 @@ bool mysql_change_db(THD *thd, const LEX
}
#endif
+ DEBUG_SYNC(thd, "before_db_dir_check");
+
if (check_db_dir_existence(new_db_file_name.str))
{
if (force_switch)
MTR test file:
==============
--source include/have_debug_sync.inc
CREATE SCHEMA s1;
CREATE PROCEDURE s1.p1() BEGIN END;
connect (con2, localhost, root);
SET DEBUG_SYNC='before_db_dir_check SIGNAL check_db WAIT_FOR dropped_schema';
--send CALL s1.p1
connection default;
SET DEBUG_SYNC='now WAIT_FOR check_db';
DROP SCHEMA s1;
SET DEBUG_SYNC='now SIGNAL dropped_schema';
connection con2;
--error ER_SP_PROC_TABLE_CORRUPT # <= This is the bogus error message
--reap;
[20 Nov 2009 9:44]
Philip Stoev
(11:40:26 AM) joh: pstoev: The only consequence of this bug is that you get a different error message than you should have gotten. mysql.proc is not corrupted or anything like that.
[24 Jun 2011 18:43]
Paul DuBois
Noted in 5.1.59, 5.5.15, 5.6.3 changelogs. A race condition between loading a stored routine using the name qualified by the database name and dropping that database resulted in a spurious error message: The table mysql.proc is missing, corrupt, or contains bad data CHANGESET - http://lists.mysql.com/commits/139789

Description: RQG test grammar: ----------------- query: CALL s1.p1 | CREATE SCHEMA s1; CREATE PROCEDURE s1.p1() BEGIN END; DROP SCHEMA s1; How to run the test: -------------------- perl runall.pl \ --basedir=<path to your MySQL release> \ --threads=2 --queries=1000 --duration=30 \ --mysqld=--log-output=file \ --grammar=<grammar from above> \ --vardir=<tmpfs recommended> --seed=1 Result on 6.0-codebase-bugfixing 2009-10-06 with slightly different configuration ------------------------------------------- ... # 19:11:06 Starting # 19:11:06 gentest.pl \ ... # 19:11:07 Starting 2 processes, 100 queries each, duration 300 seconds. # 19:11:07 Query: CALL s1.p1 failed: 1305 PROCEDURE %s does not exist. Further errors of this kind will be suppressed. <-- This is to be expected. # 19:11:07 Query: CALL s1.p1 failed: 1049 Unknown database '%s'. Further errors of this kind will be suppressed. <-- This is to be expected. # 19:11:07 Query: CALL s1.p1 failed: 1305 PROCEDURE %s does not exist. Further errors of this kind will be suppressed. <-- This is to be expected. # 19:11:07 Query: CALL s1.p1 failed: 1457 Failed to load routine s1.p1. The table mysql.proc is missing, corrupt, or contains bad data (internal code -6) <==== This must not happen and is most probably false alarm. My environment: --------------- - mysql-6.0-codebase-bugfixing 2009-10-06 mysql-5.1-bugteam 2009-09-16 ./BUILD/compile-pentium64-debug-max - Linux OpenSuSE 11.0 (64 Bit) - Intel Core2Duo How to repeat: See above