From: Jon Olav Hauglid Date: August 13 2010 8:03am Subject: bzr push into mysql-5.5-bugfixing branch (jon.hauglid:3103 to 3104) Bug#54105 List-Archive: http://lists.mysql.com/commits/115642 X-Bug: 54105 Message-Id: <201008130804.o7CNldjI009432@acsinet15.oracle.com> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============2224847788282107893==" --===============2224847788282107893== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline 3104 Jon Olav Hauglid 2010-08-13 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 3103 Konstantin Osipov 2010-08-12 Remove dead code. @ sql/sql_base.cc Remove dead code. @ sql/sql_base.h Remove an unused parameter. @ sql/sql_servers.cc Remove an unused parameter. modified: sql/sql_base.cc sql/sql_base.h sql/sql_servers.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-13 08:02:37 +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-13 08:02:37 +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-13 08:02:37 +0000 @@ -996,24 +996,33 @@ 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))) + /* + We don't use open_event_table() here to make sure that SHOW + CREATE EVENT works properly in transactional context, and + does not release transactional metadata locks when the + event table is closed. + */ + 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-13 08:02:37 +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); --===============2224847788282107893== 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: 0f77e769677b6f4c693dea30a9117d1edd143601 # timestamp: 2010-08-13 10:03:08 +0200 # base_revision_id: kostja@stripped # # Begin bundle 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 LQbZmCLHLKV3/xdyRThQkKJ+KNQ= --===============2224847788282107893==--