diff options
Diffstat (limited to 'mysql-test/suite/innodb/t/online_table_rebuild.test')
-rw-r--r-- | mysql-test/suite/innodb/t/online_table_rebuild.test | 87 |
1 files changed, 87 insertions, 0 deletions
diff --git a/mysql-test/suite/innodb/t/online_table_rebuild.test b/mysql-test/suite/innodb/t/online_table_rebuild.test new file mode 100644 index 00000000..02e9639e --- /dev/null +++ b/mysql-test/suite/innodb/t/online_table_rebuild.test @@ -0,0 +1,87 @@ +--source include/have_innodb.inc +--source include/have_debug.inc +--source include/have_debug_sync.inc +--source include/have_sequence.inc + +CREATE TABLE t1(f1 INT NOT NULL, f2 CHAR(200), f3 CHAR(200))ENGINE=InnoDB; +INSERT INTO t1 VALUES(3, "innodb", "alter log"); + +# InnoDB fails with DUPLICATE KEY error in commit phase + +SET DEBUG_SYNC="inplace_after_index_build SIGNAL dml_start WAIT_FOR dml_commit"; +send ALTER TABLE t1 ADD PRIMARY KEY(f3(10)), ADD UNIQUE KEY(f2(10)); +CONNECT(con1,localhost,root,,,); +SET DEBUG_SYNC="now WAIT_FOR dml_start"; +BEGIN; +INSERT INTO t1 VALUES(1, repeat('b', 100), repeat('c', 100)); +INSERT INTO t1 VALUES(2, repeat('b', 100), repeat('a', 100)); +COMMIT; +SET DEBUG_SYNC="now SIGNAL dml_commit"; + +connection default; +--error ER_DUP_ENTRY +reap; + +# ONLINE_LOG_TOO_BIG error during commit phase + +connection default; + +SET DEBUG_SYNC="inplace_after_index_build SIGNAL dml_start WAIT_FOR dml_commit"; +SEND ALTER TABLE t1 ADD PRIMARY KEY(f1); + +connection con1; +SET DEBUG_SYNC="now WAIT_FOR dml_start"; +INSERT INTO t1 SELECT 10, repeat('a', 100), repeat('b', 100) FROM seq_1_to_4800; +SET DEBUG_SYNC="now SIGNAL dml_commit"; + +connection default; +--error ER_INNODB_ONLINE_LOG_TOO_BIG +reap; +DELETE FROM t1; +INSERT INTO t1 VALUES(1, repeat('a', 100), repeat('b', 100)); +ALTER TABLE t1 ADD PRIMARY KEY(f1); + +# Update operation leads to duplicate key error + +set DEBUG_SYNC="innodb_inplace_alter_table_enter SIGNAL dml_start WAIT_FOR dml_commit"; +SEND ALTER TABLE t1 DROP PRIMARY KEY, ADD PRIMARY KEY(f3(10)); + +connection con1; +SET DEBUG_SYNC="now WAIT_FOR dml_start"; +BEGIN; +INSERT INTO t1 VALUES(2, repeat('b', 100), repeat('c', 100)); +UPDATE t1 set f3=repeat('c', 100) where f1=1; +COMMIT; +SET DEBUG_SYNC="now SIGNAL dml_commit"; + +connection default; +--error ER_DUP_ENTRY +reap; +SHOW CREATE TABLE t1; +DROP TABLE t1; + +--echo # +--echo # MDEV-30183 Assertion `!memcmp(rec_trx_id, old_pk_trx_id->data, +--echo # 6 + 7)' failed in row_log_table_apply_update +--echo # +set @old_sql_mode = @@sql_mode; +set @@sql_mode=""; +CREATE TABLE t1(col_int int, col_varchar varchar(500))ENGINE=InnoDB; +INSERT INTO t1(col_int) values(2560); +set debug_sync="row_log_table_apply1_before SIGNAL con1_begin WAIT_FOR con1_commit"; +send ALTER TABLE t1 ADD PRIMARY KEY ( col_varchar); + +connection con1; +SET DEBUG_SYNC="now WAIT_FOR con1_begin"; +UPDATE t1 SET col_int = 2178; +INSERT INTO t1(col_int) VALUES(3016); +UPDATE t1 set col_int=2802; +SET DEBUG_SYNC="now SIGNAL con1_commit"; + +connection default; +--error ER_DUP_ENTRY +reap; +DROP TABLE t1; +SET @@sql_mode = @old_sql_mode; +disconnect con1; +SET DEBUG_SYNC=reset; |