File: online_table_rebuild.test

package info (click to toggle)
mariadb 1%3A11.8.3-1
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 772,520 kB
  • sloc: ansic: 2,414,714; cpp: 1,791,394; asm: 381,336; perl: 62,905; sh: 49,647; pascal: 40,897; java: 39,363; python: 20,791; yacc: 20,432; sql: 17,907; xml: 12,344; ruby: 8,544; cs: 6,542; makefile: 6,145; ada: 1,879; lex: 1,193; javascript: 996; objc: 80; tcl: 73; awk: 46; php: 22
file content (92 lines) | stat: -rw-r--r-- 2,874 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
--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;
--echo # The below error displays a wrong (too long) key value.
--echo # The problem is reported as:
--echo #   MDEV-34387 Too long value in the Duplicate entry message with online alter and utf8
--echo # Please make sure to remove this comment when MDEV-34387 is fixed.

--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;