summaryrefslogtreecommitdiff
path: root/mysql-test/suite/galera_sr/t/mysql-wsrep-features#148.test
blob: 5210b9ce99ef08e0559b469206694bfe5bcfd6d8 (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
# statement rollback for SR transaction causes slave crash for inconsistency

# We test the following:
# 1. Create a transaction that is blocked by an SR transaction
# 2. Force the SR transaction to have a statement rollback
#

--source include/galera_cluster.inc
--source include/have_innodb.inc
--source include/have_debug_sync.inc

--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;
CREATE TABLE t2 (f1 INTEGER) ENGINE=InnoDB;
INSERT INTO t2 VALUES (6),(7),(8),(9),(10),(1);

--connection node_2
SET GLOBAL wsrep_slave_threads = 2;
SET GLOBAL DEBUG = 'd,sync.wsrep_apply_cb';

# Begin SR transaction
--connection node_1
SET SESSION wsrep_trx_fragment_size = 1;
SET AUTOCOMMIT=OFF;
START TRANSACTION;
INSERT INTO t1 VALUES (1), (2), (3), (4), (5);

# Begin non-SR transaction that will block waiting for the SR transaction
--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1
--connection node_1a
SET AUTOCOMMIT=OFF;
START TRANSACTION;
--send INSERT INTO t1 VALUES (1), (2), (3), (4), (5);

# Cause the SR transaction to fail with a duplicate key error
--connection node_1
--send INSERT INTO t1 SELECT * FROM t2;

# Continue and commit the non-SR transaction.
--connection node_1a
--reap
INSERT INTO t1 VALUES (6), (7), (8), (9), (10);
COMMIT;

--connection node_1
--error ER_LOCK_DEADLOCK,ER_DUP_ENTRY
--reap

--connection node_2
SET GLOBAL wsrep_slave_threads = 1;
SET GLOBAL DEBUG = '';
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';
SET DEBUG_SYNC='now SIGNAL signal.wsrep_apply_cb';

SELECT COUNT(*) = 10 FROM t1;

DROP TABLE t1;
DROP TABLE t2;