summaryrefslogtreecommitdiff
path: root/mysql-test/suite/galera/t/galera_var_retry_autocommit.test
blob: c58eba1410ed0537d5172d6aeb60e982822ed8f2 (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
159
160
161
162
#
# Test that the wsrep_retry_autocommit variable is respected.
#

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

--connect node_1a, 127.0.0.1, root, , test, $NODE_MYPORT_1

#
# With wsrep_retry_autocommit = 0, error is certain
#

--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;

SET SESSION wsrep_retry_autocommit = 0;
SET DEBUG_SYNC = 'wsrep_before_certification SIGNAL before_cert WAIT_FOR continue';
--send INSERT INTO t1 (f1) VALUES (2)

--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR before_cert';

--connection node_2
--let $wait_condition = SELECT count(*)=1 FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'
--source include/wait_condition.inc
TRUNCATE TABLE t1;

--connection node_1
--error ER_LOCK_DEADLOCK
--reap
SELECT COUNT(*) FROM t1;

SET DEBUG_SYNC = 'RESET';
DROP TABLE t1;


#
# With wsrep_retry_autocommit = 1, success against one TRUNCATE
#

--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;

SET SESSION wsrep_retry_autocommit = 1;
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
SET DEBUG_SYNC = 'wsrep_before_certification SIGNAL before_cert WAIT_FOR continue';
--send INSERT INTO t1 (f1) VALUES (3)

--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR before_cert';

--connection node_2
--let $wait_condition = SELECT count(*)=1 FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'
--source include/wait_condition.inc
TRUNCATE TABLE t1;

--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR wsrep_retry_autocommit_reached';
SELECT COUNT(*) FROM t1;
SET DEBUG_SYNC = 'now SIGNAL wsrep_retry_autocommit_continue';

--connection node_1
--reap
SELECT COUNT(*) FROM t1;

SET DEBUG_SYNC = 'RESET';
SET GLOBAL debug_dbug = NULL;
DROP TABLE t1;


#
# With wsrep_retry_autcommit = 1, failure against multiple TRUNCATEs
#

--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;

SET SESSION wsrep_retry_autocommit = 1;
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
SET DEBUG_SYNC = 'wsrep_before_certification SIGNAL before_cert WAIT_FOR continue EXECUTE 2';

--send INSERT INTO t1 VALUES (4);

--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR before_cert';

--connection node_2
--let $wait_condition = SELECT count(*)=1 FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'
--source include/wait_condition.inc
TRUNCATE TABLE t1;

--connection node_1a
SET DEBUG_SYNC = 'now WAIT_FOR wsrep_retry_autocommit_reached';
SELECT COUNT(*) FROM t1;
SET DEBUG_SYNC = 'now SIGNAL wsrep_retry_autocommit_continue WAIT_FOR before_cert';

--connection node_2
TRUNCATE TABLE t1;

--connection node_1a
SELECT COUNT(*) FROM t1;

--connection node_1
--error 0,ER_LOCK_DEADLOCK
--reap

SET DEBUG_SYNC = 'RESET';
SET GLOBAL debug_dbug = NULL;
DROP TABLE t1;


#
# With wsrep_retry_autocommit = 64, success against 64 TRUNCATEs
#

--connection node_1
CREATE TABLE t1 (f1 INTEGER PRIMARY KEY) ENGINE=InnoDB;

SET SESSION wsrep_retry_autocommit = 64;
SET GLOBAL debug_dbug = '+d,sync.wsrep_retry_autocommit';
SET DEBUG_SYNC = 'wsrep_before_certification SIGNAL before_cert WAIT_FOR continue EXECUTE 64';

--send INSERT INTO t1 VALUES (5)

--connection node_2
--let $wait_condition = SELECT count(*)=1 FROM information_schema.TABLES WHERE TABLE_SCHEMA='test' AND TABLE_NAME='t1'
--source include/wait_condition.inc

--connection node_1
--disable_query_log
--disable_result_log
--let $count = 64
while ($count)
{
  --connection node_1a
  SET DEBUG_SYNC = 'now WAIT_FOR before_cert';

  --connection node_2
  TRUNCATE TABLE t1;

  --connection node_1a
  SET DEBUG_SYNC = 'now WAIT_FOR wsrep_retry_autocommit_reached';
  SELECT COUNT(*) FROM t1;
  SET DEBUG_SYNC = 'now SIGNAL wsrep_retry_autocommit_continue';

  --dec $count
}
--enable_result_log
--enable_query_log

--connection node_1
--error 0,ER_LOCK_DEADLOCK
--reap
SELECT COUNT(*) FROM t1;

SET DEBUG_SYNC = 'RESET';
SET GLOBAL debug_dbug = NULL;
DROP TABLE t1;