Backport of:

------------------------------------------------------------
revno: 2617.31.7
committer: Davi Arnaut <Davi.Arnaut@Sun.COM>
branch nick: mysql-6.0-runtime
timestamp: Wed 2009-03-25 19:22:00 -0300
message:
WL#4284: Transactional DDL locking

Post-merge fixes for test cases.

mysql-test/include/mix1.inc:
  Ignore deadlock errors due to the table being altered.
mysql-test/r/innodb_mysql.result:
  Update test case result (WL$4284).
mysql-test/suite/parts/r/partition_special_innodb.result:
  The INSERT and SELECT are not necessary to reproduce the
  problem as the assertion happens when the table is being
  altered.
         
  Furthermore, the INSERT and SELECT will yield a deadlock
  error as after the alter the table version is set to zero,
  which means that any metadata locks on the table must be
  relinquished, but this won't happen voluntarily in a
  multi-statement transaction (metadata locks are released
  on commit or rollback). Reported as Bug#43867.
mysql-test/suite/parts/t/partition_special_innodb.test:
  The INSERT and SELECT are not necessary to reproduce the
  problem as the assertion happens when the table is being
  altered.
         
  Furthermore, the INSERT and SELECT will yield a deadlock
  error as after the alter the table version is set to zero,
  which means that any metadata locks on the table must be
  relinquished, but this won't happen voluntarily in a
  multi-statement transaction (metadata locks are released
  on commit or rollback). Reported as Bug#43867.
This commit is contained in:
Konstantin Osipov 2009-12-08 10:39:49 +03:00
parent a14bbee5ab
commit 356597c0fa
4 changed files with 4 additions and 8 deletions

View File

@ -899,6 +899,8 @@ CREATE PROCEDURE p1 ()
BEGIN
DECLARE i INT DEFAULT 50;
DECLARE cnt INT;
# Continue even in the presence of ER_LOCK_DEADLOCK.
DECLARE CONTINUE HANDLER FOR 1213 BEGIN END;
START TRANSACTION;
ALTER TABLE t1 ENGINE=InnoDB;
COMMIT;

View File

@ -1105,6 +1105,8 @@ CREATE PROCEDURE p1 ()
BEGIN
DECLARE i INT DEFAULT 50;
DECLARE cnt INT;
# Continue even in the presence of ER_LOCK_DEADLOCK.
DECLARE CONTINUE HANDLER FOR 1213 BEGIN END;
START TRANSACTION;
ALTER TABLE t1 ENGINE=InnoDB;
COMMIT;

View File

@ -214,9 +214,4 @@ INSERT INTO t1 VALUES (NULL, 'first row t2');
SET autocommit=OFF;
ALTER TABLE t1 AUTO_INCREMENT = 10;
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 VALUES (NULL, 'second row t2');
SELECT a,b FROM t1 ORDER BY a;
a b
1 first row t2
2 second row t2
DROP TABLE t1;

View File

@ -71,9 +71,6 @@ SET autocommit=OFF;
--error ER_LOCK_WAIT_TIMEOUT
ALTER TABLE t1 AUTO_INCREMENT = 10;
--connection con1
INSERT INTO t1 VALUES (NULL, 'second row t2');
SELECT a,b FROM t1 ORDER BY a;
--disconnect con2
--disconnect con1
--connection default