From: Davi Arnaut Date: March 23 2009 6:17pm Subject: bzr commit into mysql-6.0 branch (davi:2746) Bug#989 WL#4284 List-Archive: http://lists.mysql.com/commits/70102 X-Bug: 989 Message-Id: <20090323181717.09252EC178@skynet.ctb.virtua.com.br> MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="===============9092592831645036171==" --===============9092592831645036171== MIME-Version: 1.0 Content-Type: text/plain; charset="us-ascii" Content-Transfer-Encoding: 7bit Content-Disposition: inline # At a local mysql-6.0 repository of davi 2746 Davi Arnaut 2009-03-23 Bug#989: If DROP TABLE while there's an active transaction, wrong binlog order WL#4284: Transactional DDL locking After some discussions with stakeholders it has been decided that metadata locks acquired during a PREPARE statement must be released once the statement is prepared even if it is prepared within a multi statement transaction. @ mysql-test/r/ps.result Add test case result. @ mysql-test/t/ps.test Add test case. @ sql/sql_prepare.cc Release metdata locks acquired while the prepared statement is being checked. modified: mysql-test/r/ps.result mysql-test/t/ps.test sql/sql_prepare.cc === modified file 'mysql-test/r/ps.result' --- a/mysql-test/r/ps.result 2009-03-18 12:49:07 +0000 +++ b/mysql-test/r/ps.result 2009-03-23 18:17:10 +0000 @@ -3096,6 +3096,16 @@ EXECUTE stmt1; ERROR 42S01: Table 't1' already exists DEALLOCATE PREPARE stmt1; DROP TABLE t1; +# +# WL#4284: Transactional DDL locking +# +# Test that metadata locks taken during prepare are released. +# +DROP TABLE IF EXISTS t1; +CREATE TABLE t1 (a INT); +BEGIN; +PREPARE stmt1 FROM "SELECT * FROM t1"; +DROP TABLE t1; # End of WL#4435. === modified file 'mysql-test/t/ps.test' --- a/mysql-test/t/ps.test 2009-03-18 12:49:07 +0000 +++ b/mysql-test/t/ps.test 2009-03-23 18:17:10 +0000 @@ -3212,6 +3212,25 @@ EXECUTE stmt1; DEALLOCATE PREPARE stmt1; DROP TABLE t1; +--echo # +--echo # WL#4284: Transactional DDL locking +--echo # +--echo # Test that metadata locks taken during prepare are released. +--echo # + +connect(con1,localhost,root,,); +connection default; +--disable_warnings +DROP TABLE IF EXISTS t1; +--enable_warnings +CREATE TABLE t1 (a INT); +connection con1; +BEGIN; +PREPARE stmt1 FROM "SELECT * FROM t1"; +connection default; +DROP TABLE t1; +disconnect con1; + # # Additional cleanup. # === modified file 'sql/sql_prepare.cc' --- a/sql/sql_prepare.cc 2009-03-18 12:49:07 +0000 +++ b/sql/sql_prepare.cc 2009-03-23 18:17:10 +0000 @@ -3147,6 +3147,7 @@ bool Prepared_statement::prepare(const c bool error; Statement stmt_backup; Query_arena *old_stmt_arena; + MDL_ticket *mdl_savepoint= NULL; DBUG_ENTER("Prepared_statement::prepare"); /* If this is an SQLCOM_PREPARE, we also increase Com_prepare_sql. @@ -3205,6 +3206,13 @@ bool Prepared_statement::prepare(const c */ DBUG_ASSERT(thd->change_list.is_empty()); + /* + Marker used to release metadata locks acquired while the prepared + statement is being checked. + */ + if (thd->in_multi_stmt_transaction()) + mdl_savepoint= thd->mdl_context.mdl_savepoint(); + /* The only case where we should have items in the thd->free_list is after stmt->set_params_from_vars(), which may in some cases create @@ -3228,6 +3236,15 @@ bool Prepared_statement::prepare(const c lex_end(lex); cleanup_stmt(); + /* + If not inside a multi-statement transaction, the metadata locks have + already been released and the rollback_to_savepoint is a nop. + Otherwise, release acquired locks -- a NULL mdl_savepoint means that + all locks are going to be released or that the transaction didn't + own any locks. + */ + if (!thd->locked_tables_mode) + thd->mdl_context.rollback_to_savepoint(mdl_savepoint); thd->restore_backup_statement(this, &stmt_backup); thd->stmt_arena= old_stmt_arena; --===============9092592831645036171== MIME-Version: 1.0 Content-Type: text/bzr-bundle; charset="us-ascii"; name="bzr/davi.arnaut@stripped" Content-Transfer-Encoding: 7bit Content-Disposition: inline # Bazaar merge directive format 2 (Bazaar 0.90) # revision_id: davi.arnaut@stripped # target_branch: file:///home/davi/bzr/stage/mysql-6.0-runtime/ # testament_sha1: af051fa3437fb0f17285aa2d3ef789cf8b6e437a # timestamp: 2009-03-23 15:17:16 -0300 # base_revision_id: davi.arnaut@stripped\ # 28o62nkdatwf78c5 # # Begin bundle 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 1qgpI9SdkpYBTNKNKjko/8XckU4UJDak+eGA --===============9092592831645036171==--