~ubuntu-branches/ubuntu/trusty/mariadb-5.5/trusty-proposed

« back to all changes in this revision

Viewing changes to mysql-test/t/xa.test

  • Committer: Package Import Robot
  • Author(s): Otto Kekäläinen
  • Date: 2013-12-22 10:27:05 UTC
  • Revision ID: package-import@ubuntu.com-20131222102705-mndw7s12mz0szrcn
Tags: upstream-5.5.32
Import upstream version 5.5.32

Show diffs side-by-side

added added

removed removed

Lines of Context:
 
1
#
 
2
# WL#1756
 
3
#
 
4
-- source include/have_innodb.inc
 
5
 
 
6
--source include/not_embedded.inc
 
7
 
 
8
# Save the initial number of concurrent sessions
 
9
--source include/count_sessions.inc
 
10
 
 
11
--disable_warnings
 
12
drop table if exists t1, t2;
 
13
--enable_warnings
 
14
create table t1 (a int) engine=innodb;
 
15
xa start 'test1';
 
16
insert t1 values (10);
 
17
xa end 'test1';
 
18
xa prepare 'test1';
 
19
xa rollback 'test1';
 
20
select * from t1;
 
21
 
 
22
xa start 'test2';
 
23
--error ER_XAER_RMFAIL
 
24
xa start 'test-bad';
 
25
insert t1 values (20);
 
26
--error ER_XAER_RMFAIL
 
27
xa prepare 'test2';
 
28
xa end 'test2';
 
29
xa prepare 'test2';
 
30
xa commit 'test2';
 
31
select * from t1;
 
32
 
 
33
xa start 'testa','testb';
 
34
insert t1 values (30);
 
35
 
 
36
--error ER_XAER_RMFAIL
 
37
commit;
 
38
 
 
39
xa end 'testa','testb';
 
40
 
 
41
--error ER_XAER_RMFAIL
 
42
begin;
 
43
--error ER_XAER_RMFAIL
 
44
create table t2 (a int);
 
45
 
 
46
connect (con1,localhost,root,,);
 
47
connection con1;
 
48
 
 
49
--error ER_XAER_DUPID
 
50
xa start 'testa','testb';
 
51
--error ER_XAER_DUPID
 
52
xa start 'testa','testb', 123;
 
53
 
 
54
#        gtrid [ , bqual [ , formatID ] ]
 
55
xa start 0x7465737462, 0x2030405060, 0xb;
 
56
insert t1 values (40);
 
57
xa end 'testb',' 0@P`',11;
 
58
xa prepare 'testb',0x2030405060,11;
 
59
 
 
60
--error ER_XAER_RMFAIL
 
61
start transaction;
 
62
 
 
63
xa recover;
 
64
 
 
65
# uncomment the line below when binlog will be able to prepare
 
66
#disconnect con1;
 
67
connection default;
 
68
 
 
69
xa prepare 'testa','testb';
 
70
 
 
71
xa recover;
 
72
 
 
73
--error ER_XAER_NOTA
 
74
xa commit 'testb',0x2030405060,11;
 
75
xa rollback 'testa','testb';
 
76
 
 
77
--error ER_PARSE_ERROR
 
78
xa start 'zzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzzz';
 
79
 
 
80
select * from t1;
 
81
 
 
82
disconnect con1;
 
83
connection default;
 
84
drop table t1;
 
85
 
 
86
#
 
87
# Bug#28323: Server crashed in xid cache operations
 
88
#
 
89
 
 
90
--disable_warnings
 
91
drop table if exists t1;
 
92
--enable_warnings
 
93
 
 
94
create table t1(a int, b int, c varchar(20), primary key(a)) engine = innodb;
 
95
insert into t1 values(1, 1, 'a');
 
96
insert into t1 values(2, 2, 'b');
 
97
 
 
98
connect (con1,localhost,root,,);
 
99
connect (con2,localhost,root,,);
 
100
 
 
101
--connection con1
 
102
xa start 'a','b';
 
103
update t1 set c = 'aa' where a = 1;
 
104
--connection con2
 
105
xa start 'a','c';
 
106
update t1 set c = 'bb' where a = 2;
 
107
--connection con1
 
108
--send update t1 set c = 'bb' where a = 2
 
109
--connection con2
 
110
--sleep 1
 
111
--error ER_LOCK_DEADLOCK
 
112
update t1 set c = 'aa' where a = 1;
 
113
select count(*) from t1;
 
114
--error ER_XA_RBDEADLOCK
 
115
xa end 'a','c';
 
116
xa rollback 'a','c';
 
117
--disconnect con2
 
118
 
 
119
connect (con3,localhost,root,,);
 
120
--connection con3
 
121
xa start 'a','c';
 
122
 
 
123
--disconnect con1
 
124
--disconnect con3
 
125
--connection default
 
126
drop table t1;
 
127
 
 
128
--echo #
 
129
--echo # BUG#51342 - more xid crashing
 
130
--echo #
 
131
CREATE TABLE t1(a INT) ENGINE=InnoDB;
 
132
XA START 'x';
 
133
SET SESSION autocommit=0;
 
134
INSERT INTO t1 VALUES(1);
 
135
--error ER_XAER_RMFAIL
 
136
SET SESSION autocommit=1;
 
137
SELECT @@autocommit;
 
138
INSERT INTO t1 VALUES(1);
 
139
XA END 'x';
 
140
XA COMMIT 'x' ONE PHASE;
 
141
DROP TABLE t1;
 
142
SET SESSION autocommit=1;
 
143
 
 
144
--echo End of 5.0 tests
 
145
 
 
146
#
 
147
# Bug#44672: Assertion failed: thd->transaction.xid_state.xid.is_null()
 
148
#
 
149
 
 
150
xa start 'a';
 
151
xa end 'a';
 
152
xa rollback 'a';
 
153
xa start 'a';
 
154
xa end 'a';
 
155
xa rollback 'a';
 
156
 
 
157
#
 
158
# Bug#45548: XA transaction without access to InnoDB tables crashes the server
 
159
#
 
160
 
 
161
xa start 'a';
 
162
xa end 'a';
 
163
xa prepare 'a';
 
164
xa commit 'a';
 
165
 
 
166
xa start 'a';
 
167
xa end 'a';
 
168
xa prepare 'a';
 
169
xa commit 'a';
 
170
 
 
171
#
 
172
# BUG#43171 - Assertion failed: thd->transaction.xid_state.xid.is_null()
 
173
#
 
174
CREATE TABLE t1(a INT, KEY(a)) ENGINE=InnoDB;
 
175
INSERT INTO t1 VALUES(1),(2);
 
176
connect(con1,localhost,root,,);
 
177
 
 
178
# Part 1: Prepare to test XA START after regular transaction deadlock
 
179
BEGIN;
 
180
UPDATE t1 SET a=3 WHERE a=1;
 
181
 
 
182
connection default;
 
183
BEGIN;
 
184
UPDATE t1 SET a=4 WHERE a=2;
 
185
 
 
186
connection con1;
 
187
let $conn_id= `SELECT CONNECTION_ID()`;
 
188
SEND UPDATE t1 SET a=5 WHERE a=2;
 
189
 
 
190
connection default;
 
191
let $wait_timeout= 2;
 
192
let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
 
193
WHERE ID=$conn_id AND STATE='Searching rows for update';
 
194
--source include/wait_condition.inc
 
195
 
 
196
--error ER_LOCK_DEADLOCK
 
197
UPDATE t1 SET a=5 WHERE a=1;
 
198
ROLLBACK;
 
199
 
 
200
# Part 2: Prepare to test XA START after XA transaction deadlock
 
201
connection con1;
 
202
REAP;
 
203
ROLLBACK;
 
204
BEGIN;
 
205
UPDATE t1 SET a=3 WHERE a=1;
 
206
 
 
207
connection default;
 
208
XA START 'xid1';
 
209
UPDATE t1 SET a=4 WHERE a=2;
 
210
 
 
211
connection con1;
 
212
SEND UPDATE t1 SET a=5 WHERE a=2;
 
213
 
 
214
connection default;
 
215
let $wait_timeout= 2;
 
216
let $wait_condition= SELECT 1 FROM INFORMATION_SCHEMA.PROCESSLIST
 
217
WHERE ID=$conn_id AND STATE='Searching rows for update';
 
218
--source include/wait_condition.inc
 
219
 
 
220
--error ER_LOCK_DEADLOCK
 
221
UPDATE t1 SET a=5 WHERE a=1;
 
222
--error ER_XA_RBDEADLOCK
 
223
XA END 'xid1';
 
224
XA ROLLBACK 'xid1';
 
225
 
 
226
XA START 'xid1';
 
227
XA END 'xid1';
 
228
XA ROLLBACK 'xid1';
 
229
 
 
230
disconnect con1;
 
231
DROP TABLE t1;
 
232
 
 
233
 
 
234
--echo #
 
235
--echo # Bug#56448 Assertion failed: ! is_set() with second xa end
 
236
--echo #
 
237
 
 
238
XA START 'x';
 
239
XA END 'x';
 
240
# Second XA END caused an assertion.
 
241
--error ER_XAER_RMFAIL
 
242
XA END 'x';
 
243
XA PREPARE 'x';
 
244
# Second XA PREPARE also caused an assertion.
 
245
--error ER_XAER_RMFAIL
 
246
XA PREPARE 'x';
 
247
XA ROLLBACK 'x';
 
248
 
 
249
 
 
250
--echo #
 
251
--echo # Bug#59986 Assert in Diagnostics_area::set_ok_status() for XA COMMIT
 
252
--echo #
 
253
 
 
254
--disable_warnings
 
255
DROP TABLE IF EXISTS t1;
 
256
--enable_warnings
 
257
 
 
258
CREATE TABLE t1(a INT, b INT, PRIMARY KEY(a)) engine=InnoDB;
 
259
INSERT INTO t1 VALUES (1, 1), (2, 2);
 
260
 
 
261
--echo # Connection con1
 
262
connect (con1, localhost, root);
 
263
XA START 'a';
 
264
UPDATE t1 SET b= 3 WHERE a=1;
 
265
 
 
266
--echo # Connection default
 
267
connection default;
 
268
XA START 'b';
 
269
UPDATE t1 SET b=4 WHERE a=2;
 
270
--echo # Sending:
 
271
--send UPDATE t1 SET b=5 WHERE a=1
 
272
 
 
273
--echo # Connection con1
 
274
connection con1;
 
275
--sleep 1
 
276
--error ER_LOCK_DEADLOCK
 
277
UPDATE t1 SET b=6 WHERE a=2;
 
278
# This used to trigger the assert
 
279
--error ER_XA_RBDEADLOCK
 
280
XA COMMIT 'a';
 
281
 
 
282
--echo # Connection default
 
283
connection default;
 
284
--echo # Reaping: UPDATE t1 SET b=5 WHERE a=1
 
285
--reap
 
286
XA END 'b';
 
287
XA ROLLBACK 'b';
 
288
DROP TABLE t1;
 
289
disconnect con1;
 
290
 
 
291
 
 
292
--echo #
 
293
--echo # Bug#11766752 59936: multiple xa assertions - transactional
 
294
--echo #              statement fuzzer
 
295
--echo #
 
296
 
 
297
CREATE TABLE t1 (a INT) engine=InnoDB;
 
298
XA START 'a';
 
299
INSERT INTO t1 VALUES (1);
 
300
 
 
301
SAVEPOINT savep;
 
302
 
 
303
XA END 'a';
 
304
--error ER_XAER_RMFAIL
 
305
SELECT * FROM t1;
 
306
--error ER_XAER_RMFAIL
 
307
INSERT INTO t1 VALUES (2);
 
308
--error ER_XAER_RMFAIL
 
309
SAVEPOINT savep;
 
310
--error ER_XAER_RMFAIL
 
311
SET @a=(SELECT * FROM t1);
 
312
 
 
313
XA PREPARE 'a';
 
314
--error ER_XAER_RMFAIL
 
315
SELECT * FROM t1;          # used to cause InnoDB assert
 
316
--error ER_XAER_RMFAIL
 
317
INSERT INTO t1 VALUES (2); # used to cause InnoDB assert
 
318
--error ER_XAER_RMFAIL
 
319
SAVEPOINT savep;
 
320
--error ER_XAER_RMFAIL
 
321
SET @a=(SELECT * FROM t1); # used to cause InnoDB assert
 
322
--error ER_XAER_RMFAIL
 
323
UPDATE t1 SET a=1 WHERE a=2;
 
324
 
 
325
XA COMMIT 'a';
 
326
SELECT * FROM t1;
 
327
DROP TABLE t1;
 
328
 
 
329
 
 
330
--echo #
 
331
--echo # Bug#12352846 - TRANS_XA_START(THD*):
 
332
--echo #                ASSERTION THD->TRANSACTION.XID_STATE.XID.IS_NULL()
 
333
--echo #                FAILED 
 
334
--echo #
 
335
 
 
336
--disable_warnings
 
337
DROP TABLE IF EXISTS t1, t2;
 
338
--enable_warnings
 
339
 
 
340
CREATE TABLE t1 (a INT) ENGINE=InnoDB;
 
341
CREATE TABLE t2 (a INT) ENGINE=InnoDB;
 
342
 
 
343
START TRANSACTION;
 
344
INSERT INTO t1 VALUES (1);
 
345
 
 
346
--echo # Connection con2
 
347
--connect (con2,localhost,root)
 
348
XA START 'xid1';
 
349
--echo # Sending:
 
350
--send INSERT INTO t2 SELECT a FROM t1
 
351
 
 
352
--echo # Connection default
 
353
--connection default
 
354
let $wait_condition=
 
355
  SELECT COUNT(*) = 1 FROM information_schema.processlist
 
356
  WHERE state = "Sending data"
 
357
  AND info = "INSERT INTO t2 SELECT a FROM t1";
 
358
--echo # Waiting until INSERT ... is blocked
 
359
--source include/wait_condition.inc
 
360
--sleep 0.1
 
361
DELETE FROM t1;
 
362
 
 
363
--echo # Connection con2
 
364
--connection con2
 
365
--echo # Reaping: INSERT INTO t2 SELECT a FROM t1
 
366
--error ER_LOCK_DEADLOCK
 
367
--reap
 
368
--error ER_XA_RBDEADLOCK
 
369
XA COMMIT 'xid1';
 
370
 
 
371
--echo # Connection default
 
372
connection default;
 
373
 
 
374
COMMIT;
 
375
 
 
376
--echo # Connection con2
 
377
connection con2;
 
378
# This caused the assert to be triggered
 
379
XA START 'xid1';
 
380
 
 
381
XA END 'xid1';
 
382
XA PREPARE 'xid1';
 
383
XA ROLLBACK 'xid1';
 
384
 
 
385
--echo # Connection default
 
386
connection default;
 
387
DROP TABLE t1, t2;
 
388
disconnect con2;
 
389
 
 
390
 
 
391
# Wait till all disconnects are completed
 
392
--source include/wait_until_count_sessions.inc
 
393