File: error_ddl.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (137 lines) | stat: -rw-r--r-- 3,916 bytes parent folder | download
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
# Test clone error cases with concurrent DDL
--source include/have_debug_sync.inc
--source include/count_sessions.inc

--disable_query_log
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* InnoDB redo logging is disabled. All data could be lost in case of a server crash");
call mtr.add_suppression("\\[Warning\\] .*MY-\\d+.* InnoDB redo logging is enabled. Data is now safe and can be recovered in case of a server crash.");
--enable_query_log

--let $CLONE_DATADIR = $MYSQL_TMP_DIR/data_new
--let $CLONE_DATADIR2 = $MYSQL_TMP_DIR/data_new2
--let $MYSQLD_DATADIR= `select @@datadir;`

--replace_result $CLONE_PLUGIN CLONE_PLUGIN
--eval INSTALL PLUGIN clone SONAME '$CLONE_PLUGIN'

--echo # 1. CLONE blocked by DDL at beginning
--connect (con1,localhost,root,,)
--echo # In connection CON1
SET DEBUG_SYNC = 'fil_ibd_created_space SIGNAL start_clone WAIT_FOR resume_ddl_1';
--send CREATE TABLE t1(col1 int)

--connection default
--echo # In connection DEFAULT
--let $CON_ID= `SELECT CONNECTION_ID()`

SET DEBUG_SYNC = 'now WAIT_FOR start_clone';
SET DEBUG_SYNC = 'clone_begin_wait_ddl SIGNAL start_ddl_1 WAIT_FOR resume_clone_1';
SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_ddl_2 WAIT_FOR resume_clone_2';
--source ../include/clone_command_send.inc

--connect (con2,localhost,root,,)
--echo # In connection CON2
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl_1';
SET DEBUG_SYNC = 'clone_notify_ddl_before_state_block SIGNAL resume_ddl_1';
--send CREATE TABLE t2(col1 int)

--connection con1
--echo # In connection CON1
--echo # Reap CREATE TABLE t1
--reap
SET DEBUG_SYNC= 'now SIGNAL resume_clone_1';

--connection con2
--echo # In connection CON2
--echo # Reap CREATE TABLE t2
--reap

--echo # Disconnect CON2
--disconnect con2

--connection con1
--echo # In connection CON1
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl_2';

--echo # 1A. TOO MANY CLONE IN PROGRESS
--let $CLONE_DATADIR = $CLONE_DATADIR2
--let $clone_err = ER_CLONE_TOO_MANY_CONCURRENT_CLONES
--source ../include/clone_command.inc
--let $clone_err = 0
--let $CLONE_DATADIR = $MYSQL_TMP_DIR/data_new

--echo # 2. ALTER INSTANCE while clone in progress
--error ER_CLONE_IN_PROGRESS
ALTER INSTANCE DISABLE INNODB REDO_LOG;

INSERT INTO t1 values(10), (20), (30);
SELECT * FROM t1 ORDER BY col1;

--echo # 3. ALTER DISCARD while clone in progress
--error ER_CLONE_IN_PROGRESS
ALTER TABLE t1 DISCARD TABLESPACE;

--echo # 4. ALTER IMPORT while clone in progress
--error ER_CLONE_IN_PROGRESS
ALTER TABLE t1 IMPORT TABLESPACE;

--echo # 5. KILL CLONE command while in progress
--replace_result $CON_ID CON_ID
--eval KILL QUERY $CON_ID
SET DEBUG_SYNC= 'now SIGNAL resume_clone_2';

connection default;
--echo # In connection DEFAULT
--error ER_QUERY_INTERRUPTED
--reap

--force-rmdir $CLONE_DATADIR
SET DEBUG_SYNC = 'RESET';
DROP TABLE t2;

--echo # 6. Force clone to abort by DDL
SET GLOBAL DEBUG = '+d,clone_ddl_error_abort';

SET DEBUG_SYNC = 'clone_file_copy SIGNAL start_ddl WAIT_FOR resume_clone';
--source ../include/clone_command_send.inc

--connection con1
--echo # In connection CON1
SET DEBUG_SYNC = 'now WAIT_FOR start_ddl';
SET DEBUG_SYNC = 'clone_notify_ddl_before_state_block SIGNAL resume_clone';

CREATE TABLE t2(col1 int);
INSERT INTO t2 VALUES(10), (20), (30);
SELECT * FROM t2 ORDER BY col1;

connection default;
--echo # In connection DEFAULT
--error ER_CLONE_DDL_IN_PROGRESS
--reap

SET GLOBAL DEBUG = '-d,clone_ddl_error_abort';

--force-rmdir $CLONE_DATADIR
SET DEBUG_SYNC = 'RESET';

--echo #Cleanup
DROP TABLE t1;
DROP TABLE t2;

connection default;
--echo # In connection DEFAULT

disconnect con1;
SET DEBUG_SYNC = 'RESET';

--echo # Attempt to uninstall clone if there
--error 0, ER_PLUGIN_CANNOT_BE_UNINSTALLED
UNINSTALL PLUGIN clone;

--echo # Restart server
--source include/wait_until_count_sessions.inc
--source include/restart_mysqld.inc

--echo # Uninstall clone if there
--error 0, ER_SP_DOES_NOT_EXIST
UNINSTALL PLUGIN clone;