mirror of
https://github.com/MariaDB/server.git
synced 2025-08-29 00:08:14 +03:00
Detailed revision comments: r6785 | vasil | 2010-03-10 09:04:38 +0200 (Wed, 10 Mar 2010) | 11 lines branches/5.1: Add the missing --reap statements in innodb_bug38231.test. Probably MySQL enforced the presence of those recently and the test started failing like: main.innodb_bug38231 [ fail ] Test ended at 2010-03-10 08:48:32 CURRENT_TEST: main.innodb_bug38231 mysqltest: At line 49: Cannot run query on connection between send and reap r6788 | vasil | 2010-03-10 10:53:21 +0200 (Wed, 10 Mar 2010) | 8 lines branches/5.1: In innodb_bug38231.test: replace the fragile sleep 0.2 that depends on timing with a more robust condition which waits for the TRUNCATE and LOCK commands to appear in information_schema.processlist. This could also break if there are other sessions executing the same SQL commands, but there are none during the execution of the mysql test.
98 lines
1.9 KiB
Plaintext
98 lines
1.9 KiB
Plaintext
#
|
|
# Bug#38231 Innodb crash in lock_reset_all_on_table() on TRUNCATE + LOCK / UNLOCK
|
|
# http://bugs.mysql.com/38231
|
|
#
|
|
|
|
-- source include/have_innodb.inc
|
|
|
|
SET storage_engine=InnoDB;
|
|
|
|
# we care only that the following SQL commands do not crash the server
|
|
-- disable_query_log
|
|
-- disable_result_log
|
|
|
|
DROP TABLE IF EXISTS bug38231;
|
|
CREATE TABLE bug38231 (a INT);
|
|
|
|
-- connect (con1,localhost,root,,)
|
|
-- connect (con2,localhost,root,,)
|
|
-- connect (con3,localhost,root,,)
|
|
|
|
-- connection con1
|
|
SET autocommit=0;
|
|
LOCK TABLE bug38231 WRITE;
|
|
|
|
-- connection con2
|
|
SET autocommit=0;
|
|
-- send
|
|
LOCK TABLE bug38231 WRITE;
|
|
|
|
-- connection con3
|
|
SET autocommit=0;
|
|
-- send
|
|
LOCK TABLE bug38231 WRITE;
|
|
|
|
-- connection default
|
|
-- send
|
|
TRUNCATE TABLE bug38231;
|
|
|
|
-- connection con1
|
|
# Wait for TRUNCATE and the other two LOCKs to be executed; without this,
|
|
# sometimes UNLOCK executes before them. We assume there are no other
|
|
# sessions executing at the same time with the same SQL commands.
|
|
let $wait_condition =
|
|
SELECT COUNT(*) = 1 FROM information_schema.processlist
|
|
WHERE info = 'TRUNCATE TABLE bug38231';
|
|
-- source include/wait_condition.inc
|
|
let $wait_condition =
|
|
SELECT COUNT(*) = 2 FROM information_schema.processlist
|
|
WHERE info = 'LOCK TABLE bug38231 WRITE';
|
|
-- source include/wait_condition.inc
|
|
# the above enables query log, re-disable it
|
|
-- disable_query_log
|
|
|
|
# this crashes the server if the bug is present
|
|
UNLOCK TABLES;
|
|
|
|
# clean up
|
|
|
|
-- connection con2
|
|
-- reap
|
|
UNLOCK TABLES;
|
|
|
|
-- connection con3
|
|
-- reap
|
|
UNLOCK TABLES;
|
|
|
|
-- connection default
|
|
-- reap
|
|
|
|
-- disconnect con1
|
|
-- disconnect con2
|
|
-- disconnect con3
|
|
|
|
# test that TRUNCATE works with with row-level locks
|
|
|
|
-- enable_query_log
|
|
-- enable_result_log
|
|
|
|
INSERT INTO bug38231 VALUES (1), (10), (300);
|
|
|
|
-- connect (con4,localhost,root,,)
|
|
|
|
-- connection con4
|
|
SET autocommit=0;
|
|
SELECT * FROM bug38231 FOR UPDATE;
|
|
|
|
-- connection default
|
|
TRUNCATE TABLE bug38231;
|
|
|
|
-- connection con4
|
|
COMMIT;
|
|
|
|
-- connection default
|
|
|
|
-- disconnect con4
|
|
|
|
DROP TABLE bug38231;
|