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_innodb.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
|