blob: d537711404f37e272ba8d840536f1d2cc483216d (
plain)
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
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
|
connect con1,localhost,root,,;
SET SESSION lock_wait_timeout = 1;
#-----------------------------------------------------------------------
# Single-threaded tests
#-----------------------------------------------------------------------
# Show the fate and impact of some SELECT /HANDLER ... READ
# sliding through the sequence.
CREATE TABLE t_permanent_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
INSERT INTO t_permanent_aria SET col1 = 1;
BACKUP STAGE START;
SELECT COUNT(*) FROM t_permanent_aria;
COUNT(*)
1
HANDLER t_permanent_aria OPEN;
HANDLER t_permanent_aria READ FIRST;
col1
1
HANDLER t_permanent_aria CLOSE;
BACKUP STAGE FLUSH;
SELECT COUNT(*) FROM t_permanent_aria;
COUNT(*)
1
HANDLER t_permanent_aria OPEN;
HANDLER t_permanent_aria READ FIRST;
col1
1
HANDLER t_permanent_aria CLOSE;
BACKUP STAGE BLOCK_DDL;
SELECT COUNT(*) FROM t_permanent_aria;
COUNT(*)
1
HANDLER t_permanent_aria OPEN;
HANDLER t_permanent_aria READ FIRST;
col1
1
HANDLER t_permanent_aria CLOSE;
BACKUP STAGE BLOCK_COMMIT;
SELECT COUNT(*) FROM t_permanent_aria;
COUNT(*)
1
HANDLER t_permanent_aria OPEN;
HANDLER t_permanent_aria READ FIRST;
col1
1
HANDLER t_permanent_aria CLOSE;
BACKUP STAGE END;
# In case the backup lock is taken by the current connection than
# - DML modifying some permanent table is not allowed
BACKUP STAGE START;
SET AUTOCOMMIT = 0;
INSERT INTO t_permanent_aria SET col1 = 1;
ERROR HY000: Can't execute the command as you have a BACKUP STAGE active
SET AUTOCOMMIT = 1;
INSERT INTO t_permanent_aria SET col1 = 1;
ERROR HY000: Can't execute the command as you have a BACKUP STAGE active
# - DDL creating or renaming a permanent table or a procedure is not
# allowed.
# The latter tries to modify a permanent system table.
CREATE TABLE throw_away (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
ERROR HY000: Can't execute the command as you have a BACKUP STAGE active
RENAME TABLE t_permanent_aria To throw_away;
ERROR HY000: Can't execute the command as you have a BACKUP STAGE active
# - DDL creating a temporary table is allowed.
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
# - DML modifying that temporary table is allowed.
INSERT INTO t_temporary_aria SET col1 = 1;
SELECT COUNT(*) FROM t_temporary_aria;
COUNT(*)
1
BACKUP STAGE END;
# Show the fate and impact of some auto committed INSERT into temporary
# table sliding through the sequence.
SET AUTOCOMMIT = 1;
BACKUP STAGE START;
INSERT INTO t_temporary_aria SET col1 = 1;
BACKUP STAGE FLUSH;
INSERT INTO t_temporary_aria SET col1 = 1;
BACKUP STAGE BLOCK_DDL;
INSERT INTO t_temporary_aria SET col1 = 1;
BACKUP STAGE BLOCK_COMMIT;
INSERT INTO t_temporary_aria SET col1 = 1;
BACKUP STAGE END;
SELECT COUNT(*) FROM t_temporary_aria;
COUNT(*)
5
# Show the fate and impact of some DROP/CREATE TEMPORARY TABLE sliding
# through the sequence.
SET AUTOCOMMIT = 1;
BACKUP STAGE START;
DROP TEMPORARY TABLE t_temporary_aria;
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
BACKUP STAGE FLUSH;
DROP TEMPORARY TABLE t_temporary_aria;
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
BACKUP STAGE BLOCK_DDL;
DROP TEMPORARY TABLE t_temporary_aria;
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
BACKUP STAGE BLOCK_COMMIT;
DROP TEMPORARY TABLE t_temporary_aria;
CREATE TEMPORARY TABLE t_temporary_aria (col1 INT) ENGINE = Aria TRANSACTIONAL = 0;
BACKUP STAGE END;
# Show that even more DDL on the temporary table is allowed.
BACKUP STAGE START;
TRUNCATE t_temporary_aria;
ALTER TABLE t_temporary_aria ADD COLUMN col2 INT;
ALTER TABLE t_temporary_aria ADD KEY idx(col2);
BACKUP STAGE END;
DROP TABLE t_permanent_aria;
#-----------------------------------------------------------------------
# Show that non transactional tables locks with BACKUP STAGE FLUSH
#-----------------------------------------------------------------------
set session lock_wait_timeout=default;
create table t1 (a int) engine=aria transactional=0;
insert into t1 values (1), (2);
connection con1;
backup stage start;
backup stage flush;
connection default;
select * from t1;
a
1
2
SET STATEMENT lock_wait_timeout=0 FOR INSERT INTO t1 values (3);
ERROR HY000: Lock wait timeout exceeded; try restarting transaction
INSERT INTO t1 values (4);
connection con1;
backup stage end;
connection default;
select * from t1;
a
1
2
4
drop table t1;
#-----------------------------------------------------------------------
# Show that transactional tables doesn't lock with BACKUP STAGE FLUSH
#-----------------------------------------------------------------------
set session lock_wait_timeout=default;
create table t1 (a int) engine=aria transactional=1 page_checksum=1;
insert into t1 values (1), (2);
connection con1;
backup stage start;
backup stage flush;
connection default;
INSERT INTO t1 values (4);
connection con1;
backup stage end;
connection default;
select * from t1;
a
1
2
4
drop table t1;
#
# Cleanup
#
disconnect con1;
|