summaryrefslogtreecommitdiffstats
path: root/mysql-test/suite/galera/t/galera_strict_require_primary_key.test
blob: dc5f9910396a356dc09c248d2f2e40b5b4e41e3a (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
#
# Write a warning to error log if Galera replicates table with no primary key
#
# For InnoDB
# * push warning to client if wsrep_mode == REQUIRED_PRIMARY_KEY
# * push warning to error log if log_warnings > 1
# For MyIsam
# * push warning to client if wsrep_mode == REQUIRED_PRIMARY_KEY,REPLICATE_MYISAM
# * push warning to error log if log_warnings > 1
# For Aria
# * push warning to client if wsrep_mode == REQUIRED_PRIMARY_KEY,REPLICATE_ARIA
# * push warning to error log if log_warnings > 1
#
# In both cases apply flood control if >= 10 same warning
#
--source include/galera_cluster.inc
--source include/have_aria.inc

call mtr.add_suppression("WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled. Table .*");

CREATE TABLE t1(a int, b varchar(50)) ENGINE=INNODB;
CREATE TABLE t2(a int, b varchar(50)) ENGINE=MYISAM;
CREATE TABLE t3(a int, b varchar(50)) ENGINE=MEMORY;
CREATE TABLE t4(a int, b varchar(50)) ENGINE=ARIA;

SET GLOBAL wsrep_mode = "REQUIRED_PRIMARY_KEY,REPLICATE_MYISAM,REPLICATE_ARIA";
SET GLOBAL log_warnings=2;

INSERT INTO t1 values (1,'test1');
INSERT INTO t2 values (1,'myisam1');
INSERT INTO t3 values (1,'memory1');
INSERT INTO t4 values (1,'aria1');

# these will not replicate
SET GLOBAL wsrep_mode = "REQUIRED_PRIMARY_KEY,REPLICATE_ARIA";
INSERT INTO t2 values (2,'myisam2');
SET GLOBAL wsrep_mode = "REQUIRED_PRIMARY_KEY,REPLICATE_MYISAM";
INSERT INTO t4 values (2,'ARIA2');

# these should not write warning to error log
SET GLOBAL wsrep_mode = "REQUIRED_PRIMARY_KEY,REPLICATE_MYISAM,REPLICATE_ARIA";
SET GLOBAL log_warnings=1;
INSERT INTO t1 values (21,'not1');
INSERT INTO t1 values (22,'not2');
INSERT INTO t2 values (21,'not1');
INSERT INTO t2 values (22,'not2');
INSERT INTO t4 values (21,'not1');
INSERT INTO t4 values (22,'not2');

--let $assert_count = 3
--let $assert_file = $MYSQLTEST_VARDIR/log/mysqld.1.err
--let $assert_text = WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled.
--let $assert_select = WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled.
--source include/assert_grep.inc

# force flood
SET GLOBAL log_warnings=2;
INSERT INTO t1 values (6,'test6');
INSERT INTO t1 values (7,'test7');
INSERT INTO t1 values (8,'test8');
INSERT INTO t1 values (9,'test9');
INSERT INTO t1 values (10,'test10');
INSERT INTO t1 values (11,'test11');
INSERT INTO t1 values (12,'test12');
INSERT INTO t1 values (13,'test13');

INSERT INTO t1 values (33,'test13');
INSERT INTO t1 values (34,'test13');
INSERT INTO t1 values (35,'test13');
INSERT INTO t1 values (36,'test13');
INSERT INTO t1 values (37,'test13');
INSERT INTO t1 values (38,'test13');
INSERT INTO t1 values (39,'test13');

INSERT INTO t2 values (6,'test6');
INSERT INTO t2 values (7,'test7');
INSERT INTO t2 values (8,'test8');
INSERT INTO t2 values (9,'test9');
INSERT INTO t2 values (10,'test10');
INSERT INTO t2 values (11,'test11');
INSERT INTO t2 values (12,'test12');
INSERT INTO t2 values (13,'test13');

INSERT INTO t2 values (33,'test13');
INSERT INTO t2 values (34,'test13');
INSERT INTO t2 values (35,'test13');
INSERT INTO t2 values (36,'test13');
INSERT INTO t2 values (37,'test13');
INSERT INTO t2 values (38,'test13');
INSERT INTO t2 values (39,'test13');

INSERT INTO t4 values (6,'test6');
INSERT INTO t4 values (7,'test7');
INSERT INTO t4 values (8,'test8');
INSERT INTO t4 values (9,'test9');
INSERT INTO t4 values (10,'test10');
INSERT INTO t4 values (11,'test11');
INSERT INTO t4 values (12,'test12');
INSERT INTO t4 values (13,'test13');

INSERT INTO t4 values (33,'test13');
INSERT INTO t4 values (34,'test13');
INSERT INTO t4 values (35,'test13');
INSERT INTO t4 values (36,'test13');
INSERT INTO t4 values (37,'test13');
INSERT INTO t4 values (38,'test13');
INSERT INTO t4 values (39,'test13');

SELECT COUNT(*) AS EXPECT_18 FROM t1;
SELECT COUNT(*) AS EXPECT_19 FROM t2;
SELECT COUNT(*) AS EXPECT_1 FROM t3;
SELECT COUNT(*) AS EXPECT_19 FROM t4;

--connection node_2
SELECT COUNT(*) AS EXPECT_18 FROM t1;
SELECT COUNT(*) AS EXPECT_18 FROM t2;
SELECT COUNT(*) AS EXPECT_0 FROM t3;
SELECT COUNT(*) AS EXPECT_18 FROM t4;

--connection node_1
DROP TABLE t1,t2,t3,t4;

#
# Verify warning is on error log and check that no flood
#
--let $assert_count = 
--let $assert_file = $MYSQLTEST_VARDIR/log/mysqld.1.err
--let $assert_text = WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled.
--let $assert_select = WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled.
--let $assert_match = WSREP: wsrep_mode = REQUIRED_PRIMARY_KEY enabled.
--source include/assert_grep.inc
--let $assert_count = 1
--let $assert_text = WSREP: Suppressing warnings of type 'WSREP_REQUIRE_PRIMARY_KEY' for up to 300 seconds because of flooding
--let $assert_select = WSREP: Suppressing warnings of type 'WSREP_REQUIRE_PRIMARY_KEY' for up to 300 seconds because of flooding
--let $assert_match = 
--source include/assert_grep.inc

# reset env
--disable_query_log
SET GLOBAL log_warnings=DEFAULT;
SET GLOBAL wsrep_mode=DEFAULT;
--disable_query_log