From 6165e984269286061916f50610bd6805a72456c9 Mon Sep 17 00:00:00 2001 From: unknown Date: Mon, 26 Nov 2001 02:16:38 +0200 Subject: Fix race condition in ANALYZE TABLE. Fixed bug where one got an empty set instead of a DEADLOCK error when using BDB tables. Docs/manual.texi: Cleanup configure.in: Version number change mysql-test/t/backup.test: drop used tables mysql-test/t/bdb-crash.test: cleanup mysys/thr_lock.c: cleanup sql/mysqld.cc: safety fix sql/records.cc: Fixed bug where one got an empty set instead of a DEADLOCK error when using BDB tables. sql/sql_table.cc: Fix race condition in ANALYZE TABLE. --- mysql-test/r/bdb-deadlock.result | 10 +++++++++ mysql-test/t/backup.test | 1 + mysql-test/t/bdb-crash.test | 14 ++++++------ mysql-test/t/bdb-deadlock.test | 48 ++++++++++++++++++++++++++++++++++++++++ 4 files changed, 66 insertions(+), 7 deletions(-) create mode 100644 mysql-test/r/bdb-deadlock.result create mode 100644 mysql-test/t/bdb-deadlock.test (limited to 'mysql-test') diff --git a/mysql-test/r/bdb-deadlock.result b/mysql-test/r/bdb-deadlock.result new file mode 100644 index 00000000000..89077d16980 --- /dev/null +++ b/mysql-test/r/bdb-deadlock.result @@ -0,0 +1,10 @@ +x +1 +id x +0 1 +id x +0 1 +id x +0 1 +id x +0 1 diff --git a/mysql-test/t/backup.test b/mysql-test/t/backup.test index 43ea6fd19ad..71343783d69 100644 --- a/mysql-test/t/backup.test +++ b/mysql-test/t/backup.test @@ -39,6 +39,7 @@ reap; unlock tables; connection con1; reap; +drop table t1; diff --git a/mysql-test/t/bdb-crash.test b/mysql-test/t/bdb-crash.test index 05ab7260d23..55e00ad2a5e 100644 --- a/mysql-test/t/bdb-crash.test +++ b/mysql-test/t/bdb-crash.test @@ -1,7 +1,7 @@ # test for bug reported by Mark Steele -drop table if exists tblChange; -CREATE TABLE tblCharge ( +drop table if exists t1; +CREATE TABLE t1 ( ChargeID int(10) unsigned DEFAULT '0' NOT NULL auto_increment, ServiceID int(10) unsigned DEFAULT '0' NOT NULL, ChargeDate date DEFAULT '0000-00-00' NOT NULL, @@ -19,16 +19,16 @@ DEFAULT 'New' NOT NULL, ) type=BDB; BEGIN; -INSERT INTO tblCharge +INSERT INTO t1 VALUES(NULL,1,'2001-03-01',1,1,1,'New',NULL,NULL,'now'); COMMIT; BEGIN; -UPDATE tblCharge SET ChargeAuthorizationMessage = 'blablabla' WHERE +UPDATE t1 SET ChargeAuthorizationMessage = 'blablabla' WHERE ChargeID = 1; COMMIT; -INSERT INTO tblCharge +INSERT INTO t1 VALUES(NULL,1,'2001-03-01',1,1,1,'New',NULL,NULL,'now'); -select * from tblCharge; -drop table tblCharge; +select * from t1; +drop table t1; diff --git a/mysql-test/t/bdb-deadlock.test b/mysql-test/t/bdb-deadlock.test new file mode 100644 index 00000000000..b32b50c715b --- /dev/null +++ b/mysql-test/t/bdb-deadlock.test @@ -0,0 +1,48 @@ +# This test doesn't work with the embedded version as this code +# assumes that one query is running while we are doing queries on +# a second connection. +# This would work if mysqltest run would be threaded and handle each +# connection in a separate thread. +# + +#-- source include/not_embedded.inc +-- source include/have_bdb.inc + +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); + +drop table if exists t1,t2; +connection con1; +create table t1 (id integer, x integer) type=BDB; +create table t2 (id integer, x integer) type=BDB; +insert into t1 values(0, 0); +insert into t2 values(0, 0); +set autocommit=0; +update t1 set x = 1 where id = 0; + +connection con2; +set autocommit=0; +update t2 set x = 1 where id = 0; + +# The following query should hang because con1 is locking the page +--send +select x from t1 where id = 0; + +connection con1; +# This should generate a deadlock as we are trying to access a locked row +--error 1213 +select x from t2 where id = 0; +commit; + +connection con2; +reap; +commit; +select * from t1; +select * from t2; +commit; + +connection con1; +select * from t1; +select * from t2; +commit; +drop table t1,t2; -- cgit v1.2.1