mariadb/tests
Konstantin Osipov 0b39c189ba Backport of revno ## 2617.31.1, 2617.31.3, 2617.31.4, 2617.31.5,
2617.31.12, 2617.31.15, 2617.31.15, 2617.31.16, 2617.43.1
- initial changeset that introduced the fix for 
Bug#989 and follow up fixes for all test suite failures
introduced in the initial changeset. 
------------------------------------------------------------
revno: 2617.31.1
committer: Davi Arnaut <Davi.Arnaut@Sun.COM>
branch nick: 4284-6.0
timestamp: Fri 2009-03-06 19:17:00 -0300
message:
Bug#989: If DROP TABLE while there's an active transaction, wrong binlog order
WL#4284: Transactional DDL locking

Currently the MySQL server does not keep metadata locks on
schema objects for the duration of a transaction, thus failing
to guarantee the integrity of the schema objects being used
during the transaction and to protect then from concurrent
DDL operations. This also poses a problem for replication as
a DDL operation might be replicated even thought there are
active transactions using the object being modified.

The solution is to defer the release of metadata locks until
a active transaction is either committed or rolled back. This
prevents other statements from modifying the table for the
entire duration of the transaction. This provides commitment
ordering for guaranteeing serializability across multiple
transactions.

- Incompatible change:

If MySQL's metadata locking system encounters a lock conflict,
the usual schema is to use the try and back-off technique to
avoid deadlocks -- this schema consists in releasing all locks
and trying to acquire them all in one go.

But in a transactional context this algorithm can't be utilized
as its not possible to release locks acquired during the course
of the transaction without breaking the transaction commitments.
To avoid deadlocks in this case, the ER_LOCK_DEADLOCK will be
returned if a lock conflict is encountered during a transaction.

Let's consider an example:

A transaction has two statements that modify table t1, then table
t2, and then commits. The first statement of the transaction will
acquire a shared metadata lock on table t1, and it will be kept
utill COMMIT to ensure serializability.

At the moment when the second statement attempts to acquire a
shared metadata lock on t2, a concurrent ALTER or DROP statement
might have locked t2 exclusively. The prescription of the current
locking protocol is that the acquirer of the shared lock backs off
-- gives up all his current locks and retries. This implies that
the entire multi-statement transaction has to be rolled back.

- Incompatible change:

FLUSH commands such as FLUSH PRIVILEGES and FLUSH TABLES WITH READ
LOCK won't cause locked tables to be implicitly unlocked anymore.
2009-12-05 02:02:48 +03:00
..
.cvsignore Import changeset 2000-07-31 21:29:14 +02:00
auto_increment.res Import changeset 2000-07-31 21:29:14 +02:00
auto_increment.tst Import changeset 2000-07-31 21:29:14 +02:00
big_record.pl Safety fix to enable RAID in max binaries 2003-05-13 10:54:07 +03:00
bug25714.c Bug#29125 Windows Server X64: so many compiler warnings 2009-02-13 11:41:47 -05:00
CMakeLists.txt Backport http://lists.mysql.com/commits/57778 2009-09-30 15:35:01 +02:00
connect_test.c Many files: 2006-12-23 20:17:15 +01:00
deadlock_test.c my_strtoll10-x86.s: 2006-12-31 01:02:27 +01:00
drop_test.pl Bug fixes for 3.23.23 2000-08-29 12:31:01 +03:00
export.pl Fixed bug in send in mysqltest 2001-03-25 01:02:26 +02:00
fork2_test.pl Don't do signal() on windows (Causes instability problems) 2001-10-17 19:39:39 +03:00
fork_big.pl This patch removes the remaining TYPE= code from MySQL. It cleans up a number of tests where it was being called still (and failing). Also I cleaned up all of the extra scripts so that they now work. 2006-02-12 13:26:30 -08:00
fork_big2.pl This patch removes the remaining TYPE= code from MySQL. It cleans up a number of tests where it was being called still (and failing). Also I cleaned up all of the extra scripts so that they now work. 2006-02-12 13:26:30 -08:00
function.res Arjens LOG functions changes with small changes and tests added to mysql-test 2002-07-17 12:11:48 +04:00
function.tst Arjens LOG functions changes with small changes and tests added to mysql-test 2002-07-17 12:11:48 +04:00
grant.pl Bug#44647 - fix file permissions. 2009-07-03 13:48:08 +02:00
grant.res Merge with 4.0.18 2004-02-11 00:06:46 +01:00
index_corrupt.pl Fixed core dump bug when hot link list in key cache was empty. Bug #10167 2005-04-27 14:31:04 +03:00
insert_and_repair.pl Don't do signal() on windows (Causes instability problems) 2001-10-17 19:39:39 +03:00
insert_test.c Many files: 2006-12-23 20:17:15 +01:00
list_test.c Many files: 2006-12-23 20:17:15 +01:00
lock_test.pl Import changeset 2000-07-31 21:29:14 +02:00
lock_test.res Import changeset 2000-07-31 21:29:14 +02:00
mail_to_db.pl This patch removes the remaining TYPE= code from MySQL. It cleans up a number of tests where it was being called still (and failing). Also I cleaned up all of the extra scripts so that they now work. 2006-02-12 13:26:30 -08:00
Makefile.am Bug #43397 mysql headers redefine pthread_mutex_init 2009-07-08 16:49:45 +02:00
myisam-big-rows.tst Fix for MyISAM records > 16M 2001-12-11 20:45:48 +02:00
mysql_client_test.c Backport of revno ## 2617.31.1, 2617.31.3, 2617.31.4, 2617.31.5, 2009-12-05 02:02:48 +03:00
pmail.pl New versions of mail_to_db.pl and pmail.pl. 2005-04-09 18:37:32 +03:00
rename_test.pl Don't do signal() on windows (Causes instability problems) 2001-10-17 19:39:39 +03:00
restore-lock.smack sql/slave.cc 2000-09-19 17:23:58 -06:00
select_test.c Many files: 2006-12-23 20:17:15 +01:00
showdb_test.c Many files: 2006-12-23 20:17:15 +01:00
ssl_test.c Bug #15327: configure: --with-tcp-port option being partially ignored 2007-09-13 16:19:46 +02:00
table_types.pl Safety fix to enable RAID in max binaries 2003-05-13 10:54:07 +03:00
test_delayed_insert.pl Don't do signal() on windows (Causes instability problems) 2001-10-17 19:39:39 +03:00
thread_test.c Backport of: 2009-11-24 16:54:59 +03:00
truncate.pl Fixed mutex problem in TRUNCATE TABLE 2002-06-04 22:59:12 +03:00