From: Jon Olav Hauglid Date: August 12 2010 3:47pm Subject: bzr commit into mysql-5.5-bugfixing branch (jon.hauglid:3101) Bug#54105 List-Archive: http://lists.mysql.com/commits/115616 X-Bug: 54105 Message-Id: <201008121547.o7BNS6WF014224@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============7435211217045402396==" --===============7435211217045402396== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline #At file:///export/home/x/mysql-5.5-runtime-bug54105/ based on revid:kostja@stripped 3101 Jon Olav Hauglid 2010-08-12 Bug #54105 assert in MDL_context::release_locks_stored_before The problem was that SHOW CREATE EVENT released all metadata locks held by the current transaction. This made any exisiting savepoints invalid, triggering the assert when ROLLBACK TO SAVEPOINT later was executed. This patch fixes the problem by making sure SHOW CREATE EVENT only releases metadata locks acquired by the statement itself. Test case added to event_trans.test. modified: mysql-test/r/events_trans.result mysql-test/t/events_trans.test sql/event_db_repository.cc sql/events.cc === modified file 'mysql-test/r/events_trans.result' --- a/mysql-test/r/events_trans.result 2007-10-26 20:40:48 +0000 +++ b/mysql-test/r/events_trans.result 2010-08-12 15:47:00 +0000 @@ -116,3 +116,22 @@ OK: create event: database does not exis delete from t1; commit work; drop database events_test; +# +# Bug#54105 assert in MDL_context::release_locks_stored_before +# +USE test; +DROP TABLE IF EXISTS t1, t2; +DROP EVENT IF EXISTS e1; +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +CREATE TABLE t2 (a INT); +CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1; +START TRANSACTION; +INSERT INTO t1 VALUES (1); +SAVEPOINT A; +SHOW CREATE EVENT e1; +Event sql_mode time_zone Create Event character_set_client collation_connection Database Collation +e1 SYSTEM CREATE DEFINER=`root`@`localhost` EVENT `e1` ON SCHEDULE EVERY 1 DAY STARTS '#' ON COMPLETION NOT PRESERVE ENABLE DO SELECT 1 latin1 latin1_swedish_ci latin1_swedish_ci +SELECT * FROM t2; +a +ROLLBACK WORK TO SAVEPOINT A; +DROP TABLE t1, t2; === modified file 'mysql-test/t/events_trans.test' --- a/mysql-test/t/events_trans.test 2008-05-09 07:43:02 +0000 +++ b/mysql-test/t/events_trans.test 2010-08-12 15:47:00 +0000 @@ -121,3 +121,28 @@ let $wait_condition= drop database events_test; + +--echo # +--echo # Bug#54105 assert in MDL_context::release_locks_stored_before +--echo # + +USE test; + +--disable_warnings +DROP TABLE IF EXISTS t1, t2; +DROP EVENT IF EXISTS e1; +--enable_warnings + +CREATE TABLE t1 (a INT) ENGINE=InnoDB; +CREATE TABLE t2 (a INT); +CREATE EVENT e1 ON SCHEDULE EVERY 1 DAY DO SELECT 1; + +START TRANSACTION; +INSERT INTO t1 VALUES (1); +SAVEPOINT A; +--replace_regex /STARTS '[^']+'/STARTS '#'/ +SHOW CREATE EVENT e1; +SELECT * FROM t2; +ROLLBACK WORK TO SAVEPOINT A; + +DROP TABLE t1, t2; === modified file 'sql/event_db_repository.cc' --- a/sql/event_db_repository.cc 2010-07-27 10:25:53 +0000 +++ b/sql/event_db_repository.cc 2010-08-12 15:47:00 +0000 @@ -996,24 +996,27 @@ Event_db_repository::load_named_event(TH LEX_STRING name, Event_basic *etn) { bool ret; - TABLE *table= NULL; ulong saved_mode= thd->variables.sql_mode; + Open_tables_backup open_tables_backup; + TABLE_LIST event_table; DBUG_ENTER("Event_db_repository::load_named_event"); DBUG_PRINT("enter",("thd: 0x%lx name: %*s", (long) thd, (int) name.length, name.str)); + event_table.init_one_table("mysql", 5, "event", 5, "event", TL_READ); + /* Reset sql_mode during data dictionary operations. */ thd->variables.sql_mode= 0; - if (!(ret= open_event_table(thd, TL_READ, &table))) + if (!(ret= open_system_tables_for_read(thd, &event_table, &open_tables_backup))) { - if ((ret= find_named_event(dbname, name, table))) + if ((ret= find_named_event(dbname, name, event_table.table))) my_error(ER_EVENT_DOES_NOT_EXIST, MYF(0), name.str); - else if ((ret= etn->load_from_row(thd, table))) + else if ((ret= etn->load_from_row(thd, event_table.table))) my_error(ER_CANNOT_LOAD_FROM_TABLE, MYF(0), "event"); - close_mysql_tables(thd); + close_system_tables(thd, &open_tables_backup); } thd->variables.sql_mode= saved_mode; === modified file 'sql/events.cc' --- a/sql/events.cc 2010-07-27 10:25:53 +0000 +++ b/sql/events.cc 2010-08-12 15:47:00 +0000 @@ -699,7 +699,6 @@ send_show_create_event(THD *thd, Event_t bool Events::show_create_event(THD *thd, LEX_STRING dbname, LEX_STRING name) { - Open_tables_backup open_tables_backup; Event_timed et; bool ret; @@ -722,9 +721,7 @@ Events::show_create_event(THD *thd, LEX_ deadlock can occur please refer to the description of 'system table' flag. */ - thd->reset_n_backup_open_tables_state(&open_tables_backup); ret= db_repository->load_named_event(thd, dbname, name, &et); - thd->restore_backup_open_tables_state(&open_tables_backup); if (!ret) ret= send_show_create_event(thd, &et, thd->protocol); --===============7435211217045402396== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/jon.hauglid@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: jon.hauglid@stripped # target_branch: file:///export/home/x/mysql-5.5-runtime-bug54105/ # testament_sha1: 56e178c4178652f401e9db146b96ec11b6d46056 # timestamp: 2010-08-12 17:47:04 +0200 # base_revision_id: kostja@stripped # # Begin bundle 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 aUnmFp0lpjIzIolDjyi7kinChIdqbG14 --===============7435211217045402396==--