|
|
|
@@ -30,9 +30,7 @@ SET DEBUG_SYNC = 'write_row_noreplace SIGNAL have_handle WAIT_FOR go_ahead';
|
|
|
|
|
--send
|
|
|
|
|
INSERT INTO t1 VALUES(1,2,3);
|
|
|
|
|
|
|
|
|
|
--echo # Establish session con1 (user=root)
|
|
|
|
|
connect (con1,localhost,root,,);
|
|
|
|
|
connection con1;
|
|
|
|
|
|
|
|
|
|
# This should block at the end because of the INSERT in connection default
|
|
|
|
|
# is holding a metadata lock.
|
|
|
|
@@ -42,13 +40,11 @@ SET lock_wait_timeout = 1;
|
|
|
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
|
|
|
SET DEBUG_SYNC = 'now SIGNAL go_ahead';
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
--error ER_DUP_ENTRY
|
|
|
|
|
reap;
|
|
|
|
|
eval $innodb_metrics_select;
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
SET @saved_debug_dbug = @@SESSION.debug_dbug;
|
|
|
|
|
SET DEBUG_DBUG = '+d,innodb_OOM_prepare_inplace_alter';
|
|
|
|
@@ -61,14 +57,12 @@ ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE;
|
|
|
|
|
SET SESSION DEBUG = @saved_debug_dbug;
|
|
|
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT, ALGORITHM=INPLACE, LOCK=NONE;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
SHOW CREATE TABLE t1;
|
|
|
|
|
# Insert a duplicate entry (4) for the upcoming UNIQUE INDEX(c2).
|
|
|
|
|
BEGIN;
|
|
|
|
|
INSERT INTO t1 VALUES(7,4,2);
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
# This DEBUG_SYNC should not kick in yet, because the duplicate key will be
|
|
|
|
|
# detected before we get a chance to apply the online log.
|
|
|
|
@@ -78,20 +72,16 @@ SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL scanned WAIT_FOR insert_don
|
|
|
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
|
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2);
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
COMMIT;
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
--error ER_DUP_ENTRY
|
|
|
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2);
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
DELETE FROM t1 WHERE c1 = 7;
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2), ROW_FORMAT=COMPACT,
|
|
|
|
|
LOCK = SHARED, ALGORITHM = INPLACE;
|
|
|
|
@@ -106,7 +96,6 @@ SHOW CREATE TABLE t1;
|
|
|
|
|
--send
|
|
|
|
|
ALTER TABLE t1 DROP INDEX c2, ADD PRIMARY KEY(c1);
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
SET DEBUG_SYNC = 'now WAIT_FOR scanned';
|
|
|
|
|
eval $innodb_metrics_select;
|
|
|
|
@@ -116,7 +105,6 @@ BEGIN;
|
|
|
|
|
INSERT INTO t1 VALUES(4,7,2);
|
|
|
|
|
SET DEBUG_SYNC = 'now SIGNAL insert_done';
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
# Because the modification log will be applied in order and we did
|
|
|
|
|
# not roll back before the log apply, there will be a duplicate key
|
|
|
|
@@ -124,11 +112,9 @@ connection con1;
|
|
|
|
|
--error ER_DUP_ENTRY
|
|
|
|
|
reap;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
ROLLBACK;
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
SHOW CREATE TABLE t1;
|
|
|
|
|
# Now, rebuild the table without any concurrent DML, while no duplicate exists.
|
|
|
|
@@ -137,7 +123,6 @@ ALTER TABLE t1 DROP PRIMARY KEY, ADD UNIQUE INDEX(c2), ALGORITHM = INPLACE;
|
|
|
|
|
ALTER TABLE t1 DROP INDEX c2, ADD PRIMARY KEY(c1), ALGORITHM = INPLACE;
|
|
|
|
|
eval $innodb_metrics_select;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
--error ER_DUP_ENTRY
|
|
|
|
|
INSERT INTO t1 VALUES(6,3,1);
|
|
|
|
@@ -148,7 +133,6 @@ BEGIN;
|
|
|
|
|
INSERT INTO t1 VALUES(7,4,2);
|
|
|
|
|
ROLLBACK;
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
let $ID= `SELECT @id := CONNECTION_ID()`;
|
|
|
|
|
--error ER_QUERY_INTERRUPTED
|
|
|
|
@@ -159,7 +143,6 @@ SET DEBUG_SYNC = 'row_log_table_apply2_before SIGNAL applied WAIT_FOR kill_done'
|
|
|
|
|
--send
|
|
|
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
SET DEBUG_SYNC = 'now WAIT_FOR rebuilt';
|
|
|
|
|
eval $innodb_metrics_select;
|
|
|
|
@@ -171,13 +154,11 @@ let $ignore= `SELECT @id := $ID`;
|
|
|
|
|
KILL QUERY @id;
|
|
|
|
|
SET DEBUG_SYNC = 'now SIGNAL kill_done';
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
--error ER_QUERY_INTERRUPTED
|
|
|
|
|
reap;
|
|
|
|
|
eval $innodb_metrics_select;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
CHECK TABLE t1;
|
|
|
|
|
INSERT INTO t1 SELECT 5 + c1, c2, c3 FROM t1;
|
|
|
|
@@ -199,7 +180,6 @@ SET @rowlog_encrypt_0=
|
|
|
|
|
(SELECT variable_value FROM information_schema.global_status
|
|
|
|
|
WHERE variable_name = 'innodb_encryption_n_rowlog_blocks_encrypted');
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
SHOW CREATE TABLE t1;
|
|
|
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
|
|
@@ -217,7 +197,6 @@ PAGE_COMPRESSED = YES PAGE_COMPRESSION_LEVEL = 1, ALGORITHM = INPLACE;
|
|
|
|
|
# Generate some log (delete-mark, delete-unmark, insert etc.)
|
|
|
|
|
# while the index creation is blocked. Some of this may run
|
|
|
|
|
# in parallel with the clustered index scan.
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
INSERT INTO t1 SELECT 80 + c1, c2, c3 FROM t1;
|
|
|
|
|
INSERT INTO t1 SELECT 160 + c1, c2, c3 FROM t1;
|
|
|
|
@@ -261,7 +240,6 @@ SELECT
|
|
|
|
|
# Release con1.
|
|
|
|
|
SET DEBUG_SYNC = 'now SIGNAL dml2_done';
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
# If the following fails with the wrong error, it probably means that
|
|
|
|
|
# you should rerun with a larger mtr --debug-sync-timeout.
|
|
|
|
@@ -295,7 +273,6 @@ ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(c22f,c1,c4(5)),
|
|
|
|
|
CHANGE c2 c22f INT, CHANGE c3 c3 CHAR(255) NULL, CHANGE c1 c1 INT AFTER c22f,
|
|
|
|
|
ADD COLUMN c4 VARCHAR(6) DEFAULT 'Online', LOCK=NONE;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
SET DEBUG_SYNC = 'now WAIT_FOR rebuilt3';
|
|
|
|
|
# Generate some log (delete-mark, delete-unmark, insert etc.)
|
|
|
|
@@ -312,7 +289,6 @@ eval $innodb_metrics_select;
|
|
|
|
|
# Release con1.
|
|
|
|
|
SET DEBUG_SYNC = 'now SIGNAL dml3_done';
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
reap;
|
|
|
|
|
eval $innodb_metrics_select;
|
|
|
|
@@ -365,7 +341,6 @@ ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL, DROP COLUMN c22f,
|
|
|
|
|
DROP PRIMARY KEY, ADD PRIMARY KEY(c1,c4(5)),
|
|
|
|
|
ADD COLUMN c5 CHAR(5) DEFAULT 'tired' FIRST;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
|
|
|
|
|
SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created0';
|
|
|
|
@@ -374,16 +349,13 @@ INSERT INTO t1 VALUES(347,33101,'Pikku kakkosen posti','YLETV2');
|
|
|
|
|
INSERT INTO t1 VALUES(33101,347,NULL,'');
|
|
|
|
|
SET DEBUG_SYNC = 'now SIGNAL ins_done0';
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
--error WARN_DATA_TRUNCATED
|
|
|
|
|
reap;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
ROLLBACK;
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
ALTER TABLE t1 MODIFY c3 CHAR(255) NOT NULL;
|
|
|
|
|
|
|
|
|
@@ -394,7 +366,6 @@ ADD COLUMN c6 VARCHAR(1000) DEFAULT
|
|
|
|
|
'I love tracking down hard-to-reproduce bugs.',
|
|
|
|
|
ADD PRIMARY KEY c3p5(c3(5), c6(2));
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
SET DEBUG_SYNC = 'now WAIT_FOR c3p5_created';
|
|
|
|
|
SET DEBUG_SYNC = 'ib_after_row_insert SIGNAL ins_done WAIT_FOR ddl_timed_out';
|
|
|
|
@@ -403,33 +374,51 @@ INSERT INTO t1 VALUES(347,33101,NULL,'');
|
|
|
|
|
--send
|
|
|
|
|
INSERT INTO t1 VALUES(347,33101,'Pikku kakkosen posti','');
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
--error ER_LOCK_WAIT_TIMEOUT
|
|
|
|
|
reap;
|
|
|
|
|
SET DEBUG_SYNC = 'now SIGNAL ddl_timed_out';
|
|
|
|
|
eval $innodb_metrics_select;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
reap;
|
|
|
|
|
SELECT COUNT(*) FROM t1;
|
|
|
|
|
ALTER TABLE t1 ROW_FORMAT=REDUNDANT;
|
|
|
|
|
SELECT * FROM t1 LIMIT 10;
|
|
|
|
|
|
|
|
|
|
--echo # session con1
|
|
|
|
|
connection con1;
|
|
|
|
|
ALTER TABLE t1 DISCARD TABLESPACE;
|
|
|
|
|
--echo # Disconnect session con1
|
|
|
|
|
disconnect con1;
|
|
|
|
|
|
|
|
|
|
--echo # session default
|
|
|
|
|
connection default;
|
|
|
|
|
SHOW CREATE TABLE t1;
|
|
|
|
|
SET DEBUG_SYNC = 'RESET';
|
|
|
|
|
SET GLOBAL innodb_monitor_disable = module_ddl;
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
|
|
|
|
|
--echo #
|
|
|
|
|
--echo # MDEV-29600 Memory leak in row_log_table_apply_update()
|
|
|
|
|
--echo #
|
|
|
|
|
|
|
|
|
|
CREATE TABLE t1 (pk INT PRIMARY KEY, f TEXT) ENGINE=InnoDB;
|
|
|
|
|
INSERT INTO t1 SET pk=1;
|
|
|
|
|
|
|
|
|
|
connection con1;
|
|
|
|
|
SET DEBUG_SYNC = 'row_log_table_apply1_before SIGNAL created WAIT_FOR updated';
|
|
|
|
|
send ALTER TABLE t1 FORCE;
|
|
|
|
|
|
|
|
|
|
connection default;
|
|
|
|
|
SET DEBUG_SYNC = 'now WAIT_FOR created';
|
|
|
|
|
UPDATE t1 SET f = REPEAT('a', 20000);
|
|
|
|
|
SET DEBUG_SYNC = 'now SIGNAL updated';
|
|
|
|
|
|
|
|
|
|
connection con1;
|
|
|
|
|
reap;
|
|
|
|
|
disconnect con1;
|
|
|
|
|
|
|
|
|
|
connection default;
|
|
|
|
|
DROP TABLE t1;
|
|
|
|
|
SET DEBUG_SYNC = 'RESET';
|
|
|
|
|
|
|
|
|
|
# Check that all connections opened by test cases in this file are really
|
|
|
|
|
# gone so execution of other tests won't be affected by their presence.
|
|
|
|
|
--source include/wait_until_count_sessions.inc
|
|
|
|
|