mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Fix Bug#53046 dict_update_statistics_low can still be run concurrently on same table
Replace the array of mutexes that used to protect dict_index_t::stat_n_diff_key_vals[] with an array of rw locks that protects all the stats related members in dict_table_t and all of its indexes. Approved by: Jimmy (rb://503)
This commit is contained in:
48
mysql-test/suite/innodb_plugin/t/innodb_bug53046.test
Normal file
48
mysql-test/suite/innodb_plugin/t/innodb_bug53046.test
Normal file
@ -0,0 +1,48 @@
|
||||
#
|
||||
# http://bugs.mysql.com/53046
|
||||
# dict_update_statistics_low can still be run concurrently on same table
|
||||
#
|
||||
# This is a symbolic test, it would not fail if the bug is present.
|
||||
# Rather those SQL commands have been used during manual testing under
|
||||
# UNIV_DEBUG & UNIV_SYNC_DEBUG to test all changed codepaths for locking
|
||||
# correctness.
|
||||
#
|
||||
|
||||
-- source include/have_innodb_plugin.inc
|
||||
|
||||
CREATE TABLE bug53046_1 (c1 INT PRIMARY KEY) ENGINE=INNODB;
|
||||
CREATE TABLE bug53046_2 (c2 INT PRIMARY KEY,
|
||||
FOREIGN KEY (c2) REFERENCES bug53046_1(c1)
|
||||
ON UPDATE CASCADE ON DELETE CASCADE) ENGINE=INNODB;
|
||||
|
||||
INSERT INTO bug53046_1 VALUES (1);
|
||||
let $i = 5;
|
||||
while ($i) {
|
||||
eval INSERT INTO bug53046_1 SELECT c1+(SELECT MAX(c1) FROM bug53046_1)
|
||||
FROM bug53046_1;
|
||||
dec $i;
|
||||
}
|
||||
|
||||
INSERT INTO bug53046_2 VALUES (1), (2);
|
||||
|
||||
# CREATE TABLE innodb_table_monitor (a int) ENGINE=INNODB;
|
||||
# wait more than 1 minute and observe the mysqld output
|
||||
# DROP TABLE innodb_table_monitor;
|
||||
|
||||
ANALYZE TABLE bug53046_1;
|
||||
|
||||
# this prints create time and other nondeterministic data
|
||||
-- disable_result_log
|
||||
SHOW TABLE STATUS LIKE 'bug53046_1';
|
||||
-- enable_result_log
|
||||
|
||||
UPDATE bug53046_1 SET c1 = c1 - 1;
|
||||
|
||||
DELETE FROM bug53046_1;
|
||||
|
||||
INSERT INTO bug53046_1 VALUES (1);
|
||||
INSERT INTO bug53046_2 VALUES (1);
|
||||
TRUNCATE TABLE bug53046_2;
|
||||
|
||||
DROP TABLE bug53046_2;
|
||||
DROP TABLE bug53046_1;
|
Reference in New Issue
Block a user