Skip to content

Commit e757e02

Browse files
Galera MTR Tests: Copy over some MTR tests from PXC
Signed-off-by: Sachin Setiya <sachin.setiya@mariadb.com>
1 parent 912ca4c commit e757e02

31 files changed

+1634
-1
lines changed
Lines changed: 83 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,83 @@
1+
2+
#
3+
# Let's understand the topology.
4+
# * Independent Master with server-id = 1
5+
# * Galera cluster with 2 nodes: node#1 and node#2 with server-id = 2, 3
6+
# node#1 act as slave to Independent Master with server-id = 1
7+
# * Independent Slave with server-id = 4 replicating from galera node#2
8+
#
9+
10+
# Use default setting for mysqld processes
11+
!include include/default_mysqld.cnf
12+
13+
[mysqld]
14+
log-slave-updates
15+
log-bin=mysqld-bin
16+
binlog-format=row
17+
gtid-mode=on
18+
enforce-gtid-consistency=true
19+
20+
[mysqld.1]
21+
server-id=1
22+
23+
[mysqld.2]
24+
server-id=2
25+
26+
wsrep_provider=@ENV.WSREP_PROVIDER
27+
wsrep_cluster_address='gcomm://'
28+
wsrep_provider_options='base_port=@mysqld.2.#galera_port;evs.install_timeout = PT15S; evs.max_install_timeouts=1;'
29+
30+
# enforce read-committed characteristics across the cluster
31+
wsrep_causal_reads=ON
32+
wsrep_sync_wait = 7
33+
34+
wsrep_node_address=127.0.0.1
35+
wsrep_sst_receive_address=127.0.0.2:@mysqld.2.#sst_port
36+
wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port
37+
38+
# Required for Galera
39+
innodb_autoinc_lock_mode=2
40+
41+
innodb_flush_log_at_trx_commit=2
42+
43+
[mysqld.3]
44+
server-id=3
45+
46+
wsrep_provider=@ENV.WSREP_PROVIDER
47+
wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.2.#galera_port'
48+
wsrep_provider_options='base_port=@mysqld.3.#galera_port;evs.install_timeout = PT15S; evs.max_install_timeouts = 1;'
49+
50+
# enforce read-committed characteristics across the cluster
51+
wsrep_causal_reads=ON
52+
wsrep_sync_wait = 7
53+
54+
wsrep_node_address=127.0.0.1
55+
wsrep_sst_receive_address=127.0.0.2:@mysqld.3.#sst_port
56+
wsrep_node_incoming_address=127.0.0.1:@mysqld.3.port
57+
58+
# Required for Galera
59+
innodb_autoinc_lock_mode=2
60+
61+
innodb_flush_log_at_trx_commit=2
62+
63+
[mysqld.4]
64+
server-id=4
65+
66+
[ENV]
67+
NODE_MYPORT_1= @mysqld.1.port
68+
NODE_MYSOCK_1= @mysqld.1.socket
69+
70+
NODE_MYPORT_2= @mysqld.2.port
71+
NODE_MYSOCK_2= @mysqld.2.socket
72+
73+
NODE_MYPORT_3= @mysqld.3.port
74+
NODE_MYSOCK_3= @mysqld.3.socket
75+
76+
NODE_MYPORT_4= @mysqld.4.port
77+
NODE_MYSOCK_4= @mysqld.4.socket
78+
79+
NODE_GALERAPORT_2= @mysqld.2.#galera_port
80+
NODE_GALERAPORT_3= @mysqld.3.#galera_port
81+
82+
NODE_SSTPORT_2= @mysqld.2.#sst_port
83+
NODE_SSTPORT_3= @mysqld.3.#sst_port
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
#
2+
# This .cnf file creates a setup with a 2-node Galera cluster and one stand-alone MySQL server, to be used as a slave
3+
#
4+
5+
# Use default setting for mysqld processes
6+
!include include/default_mysqld.cnf
7+
8+
[mysqld]
9+
default-storage-engine=InnoDB
10+
11+
[mysqld.1]
12+
server-id=1
13+
binlog-format=row
14+
log-bin=mysqld-bin
15+
log_slave_updates
16+
gtid-mode=on
17+
enforce-gtid-consistency=true
18+
event-scheduler=1
19+
20+
wsrep_provider=@ENV.WSREP_PROVIDER
21+
wsrep_cluster_address='gcomm://'
22+
wsrep_provider_options='base_port=@mysqld.1.#galera_port'
23+
24+
# enforce read-committed characteristics across the cluster
25+
wsrep_causal_reads=ON
26+
wsrep_sync_wait = 7
27+
28+
wsrep_node_address=127.0.0.1
29+
wsrep_sst_receive_address=127.0.0.2:@mysqld.1.#sst_port
30+
wsrep_node_incoming_address=127.0.0.1:@mysqld.1.port
31+
32+
# Required for Galera
33+
innodb_autoinc_lock_mode=2
34+
35+
innodb_flush_log_at_trx_commit=2
36+
37+
[mysqld.2]
38+
server-id=2
39+
binlog-format=row
40+
log-bin=mysqld-bin
41+
log_slave_updates
42+
gtid-mode=on
43+
enforce-gtid-consistency=true
44+
event-scheduler=1
45+
46+
wsrep_provider=@ENV.WSREP_PROVIDER
47+
wsrep_cluster_address='gcomm://127.0.0.1:@mysqld.1.#galera_port'
48+
wsrep_provider_options='base_port=@mysqld.2.#galera_port'
49+
50+
# enforce read-committed characteristics across the cluster
51+
wsrep_causal_reads=ON
52+
wsrep_sync_wait = 7
53+
54+
wsrep_node_address=127.0.0.1
55+
wsrep_sst_receive_address=127.0.0.2:@mysqld.2.#sst_port
56+
wsrep_node_incoming_address=127.0.0.1:@mysqld.2.port
57+
58+
# Required for Galera
59+
innodb_autoinc_lock_mode=2
60+
61+
innodb_flush_log_at_trx_commit=2
62+
63+
[mysqld.3]
64+
server-id=3
65+
replicate-ignore-db=test
66+
replicate-wild-ignore-table=test.%
67+
log-bin=mysqld-bin
68+
log_slave_updates
69+
gtid-mode=on
70+
enforce-gtid-consistency=true
71+
event-scheduler=1
72+
73+
[ENV]
74+
NODE_MYPORT_1= @mysqld.1.port
75+
NODE_MYSOCK_1= @mysqld.1.socket
76+
77+
NODE_MYPORT_2= @mysqld.2.port
78+
NODE_MYSOCK_2= @mysqld.2.socket
79+
80+
NODE_MYPORT_3= @mysqld.3.port
81+
NODE_MYSOCK_3= @mysqld.3.socket
82+
83+
NODE_GALERAPORT_1= @mysqld.1.#galera_port
84+
NODE_GALERAPORT_2= @mysqld.2.#galera_port
85+
86+
NODE_SSTPORT_1= @mysqld.1.#sst_port
87+
NODE_SSTPORT_2= @mysqld.2.#sst_port
Lines changed: 162 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,162 @@
1+
SAVEPOINT in a stored function should be forbidden
2+
CREATE FUNCTION f1 () RETURNS INT BEGIN
3+
SAVEPOINT s;
4+
RETURN 1;
5+
END|
6+
SELECT f1();
7+
f1()
8+
1
9+
DROP FUNCTION f1;
10+
ROLLBACK TO SAVEPOINT in a stored function should be forbidden
11+
CREATE FUNCTION f2 () RETURNS INT BEGIN
12+
ROLLBACK TO SAVEPOINT s;
13+
RETURN 1;
14+
END|
15+
BEGIN;
16+
SAVEPOINT s;
17+
SELECT f2();
18+
ERROR 42000: SAVEPOINT s does not exist
19+
COMMIT;
20+
DROP FUNCTION f2;
21+
BEGIN;
22+
SAVEPOINT S;
23+
ROLLBACK TO SAVEPOINT S;
24+
COMMIT;
25+
CREATE TABLE t1 (a INT PRIMARY KEY) ENGINE=InnoDB;
26+
CREATE TABLE t2 (a INT PRIMARY KEY AUTO_INCREMENT) ENGINE=InnoDB;
27+
INSERT INTO t1 values (110), (111), (112), (113), (114);
28+
Direct SAVEPOINT in a trigger should be forbidden
29+
CREATE TRIGGER i1_t1 BEFORE INSERT ON t1 FOR EACH ROW SAVEPOINT s;
30+
INSERT INTO t1 VALUES (1);
31+
DROP TRIGGER i1_t1;
32+
CREATE TRIGGER i2_t1 AFTER INSERT ON t1 FOR EACH ROW SAVEPOINT s;
33+
INSERT INTO t1 VALUES (2);
34+
DROP TRIGGER i2_t1;
35+
INSERT INTO t1 VALUES (3);
36+
CREATE TRIGGER u1_t1 BEFORE UPDATE ON t1 FOR EACH ROW SAVEPOINT s;
37+
UPDATE t1 SET a=4 WHERE a=3;
38+
DROP TRIGGER u1_t1;
39+
CREATE TRIGGER u2_t1 AFTER UPDATE ON t1 FOR EACH ROW SAVEPOINT s;
40+
UPDATE t1 SET a=4 WHERE a=3;
41+
DROP TRIGGER u2_t1;
42+
CREATE TRIGGER d1_t1 BEFORE DELETE ON t1 FOR EACH ROW SAVEPOINT s;
43+
DELETE FROM t1;
44+
DROP TRIGGER d1_t1;
45+
CREATE TRIGGER d1_t1 AFTER DELETE ON t1 FOR EACH ROW SAVEPOINT s;
46+
DELETE FROM t1;
47+
DROP TRIGGER d1_t1;
48+
SAVEPOINT in a compound statement in a trigger should be forbidden
49+
CREATE TRIGGER i3_t1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN
50+
SAVEPOINT s;
51+
END|
52+
INSERT INTO t1 VALUES (5);
53+
DROP TRIGGER i3_t1;
54+
SAVEPOINT in a PS call in a trigger should be forbidden
55+
CREATE TRIGGER i4_t1 BEFORE INSERT ON t1 FOR EACH ROW BEGIN
56+
PREPARE set_savepoint FROM "SAVEPOINT s";
57+
EXECUTE set_savepoint;
58+
DEALLOCATE PREPARE set_savepoint;
59+
END|
60+
ERROR 0A000: Dynamic SQL is not allowed in stored function or trigger
61+
SAVEPOINT in SP called from a trigger should be forbidden
62+
CREATE PROCEDURE p1() BEGIN
63+
SAVEPOINT s;
64+
END|
65+
CREATE TRIGGER i5_t1 BEFORE INSERT ON t1 FOR EACH ROW CALL p1;
66+
INSERT INTO t1 VALUES (6);
67+
DROP TRIGGER i5_t1;
68+
SAVEPOINT in a SP called from a PS called from a trigger be forbidden
69+
PREPARE call_p1 FROM "CALL p1";
70+
CREATE TRIGGER i6_t1 BEFORE INSERT ON t1 FOR EACH ROW EXECUTE call_p1;
71+
ERROR 0A000: Dynamic SQL is not allowed in stored function or trigger
72+
SAVEPOINT in a function called from a trigger should be forbidden
73+
CREATE FUNCTION f1 () RETURNS INT BEGIN
74+
SAVEPOINT s;
75+
RETURN 1;
76+
END|
77+
CREATE TRIGGER i7_t1 BEFORE INSERT ON t1 FOR EACH ROW SET @foo = f1();
78+
INSERT INTO t1 VALUES (7);
79+
DROP TRIGGER i7_t1;
80+
SAVEPOINT in a SP called from a SP called from a trigger should be forbidden
81+
CREATE PROCEDURE p2() BEGIN
82+
CALL p1();
83+
END|
84+
CREATE TRIGGER i8_t1 BEFORE INSERT ON t1 FOR EACH ROW CALL p2;
85+
INSERT INTO t1 VALUES (8);
86+
DROP TRIGGER i8_t1;
87+
SAVEPOINT in a SP called from a trigger called from a SP should be forbidden
88+
CREATE TRIGGER i9_t1 BEFORE INSERT ON t1 FOR EACH ROW CALL p1;
89+
CREATE PROCEDURE p3() BEGIN
90+
INSERT INTO t1 VALUES (9);
91+
END|
92+
CALL p3();
93+
DROP TRIGGER i9_t1;
94+
ROLLBACK TO SAVEPOINT in trigger as a trivial statement should be forbidden
95+
CREATE TRIGGER i4_t1 BEFORE INSERT ON t1 FOR EACH ROW ROLLBACK TO SAVEPOINT s;
96+
BEGIN;
97+
SAVEPOINT s;
98+
INSERT INTO t1 VALUES (5);
99+
ERROR 42000: SAVEPOINT s does not exist
100+
COMMIT;
101+
DROP TRIGGER i4_t1;
102+
ROLLBACK TO SAVEPOINT in a trigger in a SP call should be forbidden
103+
CREATE PROCEDURE p4() BEGIN
104+
ROLLBACK TO SAVEPOINT s;
105+
END|
106+
CREATE TRIGGER i5_t1 BEFORE INSERT ON t1 FOR EACH ROW CALL p4;
107+
BEGIN;
108+
SAVEPOINT s;
109+
INSERT INTO t1 VALUES (6);
110+
ERROR 42000: SAVEPOINT s does not exist
111+
COMMIT;
112+
DROP TRIGGER i5_t1;
113+
SAVEPOINT in a SP next to a trigger should work
114+
CREATE TRIGGER i6_t1 BEFORE INSERT ON t1 FOR EACH ROW SET NEW.a = NEW.a + 1;
115+
CREATE PROCEDURE p5() BEGIN
116+
SAVEPOINT s;
117+
INSERT INTO t1 VALUES (10);
118+
ROLLBACK TO SAVEPOINT s;
119+
END|
120+
BEGIN;
121+
CALL p5();
122+
COMMIT;
123+
DROP TRIGGER i6_t1;
124+
create trigger t1 before insert on t1 for each row
125+
begin
126+
insert into t2 values (NULL);
127+
end|
128+
INSERT INTO t1 VALUES (201), (202), (203);
129+
SELECT * FROM t1;
130+
a
131+
5
132+
6
133+
7
134+
8
135+
9
136+
201
137+
202
138+
203
139+
SELECT COUNT(*) FROM t2;
140+
COUNT(*)
141+
3
142+
SELECT * FROM t1;
143+
a
144+
5
145+
6
146+
7
147+
8
148+
9
149+
201
150+
202
151+
203
152+
SELECT COUNT(*) FROM t2;
153+
COUNT(*)
154+
3
155+
DEALLOCATE PREPARE call_p1;
156+
DROP TABLE t1, t2;
157+
DROP PROCEDURE p1;
158+
DROP PROCEDURE p2;
159+
DROP PROCEDURE p3;
160+
DROP PROCEDURE p4;
161+
DROP PROCEDURE p5;
162+
DROP FUNCTION f1;
Lines changed: 43 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,43 @@
1+
DROP TABLE IF EXISTS t1, t2;
2+
DROP TABLE IF EXISTS x1, x2;
3+
CREATE TABLE t1 (f1 INTEGER);
4+
CREATE TABLE t2 (f1 INT PRIMARY KEY AUTO_INCREMENT, f2 INTEGER);
5+
SET GLOBAL wsrep_replicate_myisam = TRUE;
6+
CREATE TABLE x1 (f1 INTEGER) ENGINE=MyISAM;
7+
CREATE TABLE x2 (f1 INT PRIMARY KEY AUTO_INCREMENT, f2 INTEGER) ENGINE=MyISAM;
8+
INSERT INTO t1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
9+
INSERT INTO x1 VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
10+
INSERT INTO t2 (f2) SELECT 1 FROM t1 AS a1, t1 AS a2, t1 AS a3, t1 AS a4;
11+
INSERT INTO x2 (f2) VALUES (1), (2), (3), (4), (5), (6), (7), (8), (9), (10);
12+
# ANALYZE test
13+
ANALYZE TABLE t1, t2;
14+
Table Op Msg_type Msg_text
15+
test.t1 analyze status OK
16+
test.t2 analyze status OK
17+
# OPTIMIZE test
18+
OPTIMIZE TABLE t1, t2;
19+
Table Op Msg_type Msg_text
20+
test.t1 optimize note Table does not support optimize, doing recreate + analyze instead
21+
test.t1 optimize status OK
22+
test.t2 optimize note Table does not support optimize, doing recreate + analyze instead
23+
test.t2 optimize status OK
24+
# REPAIR test
25+
REPAIR TABLE x1, x2;
26+
Table Op Msg_type Msg_text
27+
test.x1 repair status OK
28+
test.x2 repair status OK
29+
SELECT COUNT(*) = 10 FROM t1;
30+
COUNT(*) = 10
31+
1
32+
SELECT COUNT(*) = 10 FROM x1;
33+
COUNT(*) = 10
34+
1
35+
SELECT COUNT(*) = 10000 FROM t2;
36+
COUNT(*) = 10000
37+
1
38+
SELECT COUNT(*) = 10 FROM x2;
39+
COUNT(*) = 10
40+
1
41+
DROP TABLE t1, t2;
42+
DROP TABLE x1, x2;
43+
SET GLOBAL wsrep_replicate_myisam = FALSE;

0 commit comments

Comments
 (0)