mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
Bug#21628087 innodb_log_checkpoint_now not fully compatible with WL#7142
In debug builds of MySQL, there is an configuration variable that allows an InnoDB log checkpoint to be initiated: SET GLOBAL innodb_log_checkpoint_now=ON; Setting this variable while a table-rebuilding ALTER TABLE is executing may result in an infinite loop. checkpoint_now_set(): Account for log_sys->append_on_checkpoint->size(). Note that this function contains race conditions, because it is accessing fields of log_sys without holding log_sys->mutex. We think that this is acceptable, because this variable only exists for debugging purposes, in debug builds of MySQL. RB: 9947 Reviewed-by: Sunny Bains <sunny.bains@oracle.com>
This commit is contained in:
committed by
Thirunarayanan Balathandayuthapani
parent
be465cfb8c
commit
0ba299da02
17
mysql-test/suite/innodb/r/alter_rename_files.result
Normal file
17
mysql-test/suite/innodb/r/alter_rename_files.result
Normal file
@ -0,0 +1,17 @@
|
||||
CREATE TABLE t1 (x INT NOT NULL UNIQUE KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES(5);
|
||||
SET GLOBAL innodb_log_checkpoint_now=TRUE;
|
||||
SET DEBUG_SYNC='commit_cache_rebuild SIGNAL ready WAIT_FOR finish';
|
||||
ALTER TABLE t1 ADD PRIMARY KEY(x);
|
||||
SET DEBUG_SYNC='now WAIT_FOR ready';
|
||||
SET GLOBAL innodb_log_checkpoint_now=TRUE;
|
||||
SET DEBUG_SYNC='now SIGNAL finish';
|
||||
SHOW CREATE TABLE t1;
|
||||
Table Create Table
|
||||
t1 CREATE TABLE `t1` (
|
||||
`x` int(11) NOT NULL,
|
||||
PRIMARY KEY (`x`),
|
||||
UNIQUE KEY `x` (`x`)
|
||||
) ENGINE=InnoDB DEFAULT CHARSET=latin1
|
||||
DROP TABLE t1;
|
||||
SET DEBUG_SYNC='RESET';
|
31
mysql-test/suite/innodb/t/alter_rename_files.test
Normal file
31
mysql-test/suite/innodb/t/alter_rename_files.test
Normal file
@ -0,0 +1,31 @@
|
||||
--source include/have_debug.inc
|
||||
--source include/have_debug_sync.inc
|
||||
--source include/have_innodb.inc
|
||||
--source include/count_sessions.inc
|
||||
|
||||
CREATE TABLE t1 (x INT NOT NULL UNIQUE KEY) ENGINE=InnoDB;
|
||||
INSERT INTO t1 VALUES(5);
|
||||
|
||||
SET GLOBAL innodb_log_checkpoint_now=TRUE;
|
||||
|
||||
# Start an ALTER TABLE and stop it before renaming the files
|
||||
SET DEBUG_SYNC='commit_cache_rebuild SIGNAL ready WAIT_FOR finish';
|
||||
|
||||
--send ALTER TABLE t1 ADD PRIMARY KEY(x)
|
||||
|
||||
connect (con1,localhost,root,,);
|
||||
|
||||
SET DEBUG_SYNC='now WAIT_FOR ready';
|
||||
|
||||
SET GLOBAL innodb_log_checkpoint_now=TRUE;
|
||||
|
||||
SET DEBUG_SYNC='now SIGNAL finish';
|
||||
|
||||
disconnect con1;
|
||||
connection default;
|
||||
reap;
|
||||
SHOW CREATE TABLE t1;
|
||||
DROP TABLE t1;
|
||||
SET DEBUG_SYNC='RESET';
|
||||
|
||||
--source include/wait_until_count_sessions.inc
|
Reference in New Issue
Block a user