diff options
author | Andrei Elkin <andrei.elkin@mariadb.com> | 2017-11-16 21:14:59 +0200 |
---|---|---|
committer | Andrei Elkin <andrei.elkin@mariadb.com> | 2017-11-16 21:14:59 +0200 |
commit | 24bb6be9dc672f6cb1d88bd2d4cdab1ab87502fc (patch) | |
tree | 7b85a8cde1e060b0e267830b21370996d323ddfe | |
parent | 7759ad6e6ab5a29b4fb7a1b8f4d97166e288647c (diff) | |
download | mariadb-git-bb-10.2-semisync.tar.gz |
MDEV-13073. Fixed failing on BB sys_vars.rpl_semi_sync_master_enabled_basic. The issue forced to add up aan argument to THD::THD and THD::init to propagate skip of a mutex locking. The lock could not be released instead as this leads to clear deadlock; the test is received a piece for concurrent ack thread start/stop.bb-10.2-semisync
-rw-r--r-- | mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result | 606 | ||||
-rw-r--r-- | mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test | 27 | ||||
-rw-r--r-- | sql/semisync_master_ack_receiver.cc | 3 | ||||
-rw-r--r-- | sql/sql_class.cc | 13 | ||||
-rw-r--r-- | sql/sql_class.h | 15 |
5 files changed, 654 insertions, 10 deletions
diff --git a/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result index 7454f0b0089..c7a71a01686 100644 --- a/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result +++ b/mysql-test/suite/sys_vars/r/rpl_semi_sync_master_enabled_basic.result @@ -65,6 +65,612 @@ set global rpl_semi_sync_master_enabled=1e1; ERROR 42000: Incorrect argument type to variable 'rpl_semi_sync_master_enabled' set global rpl_semi_sync_master_enabled="some text"; ERROR 42000: Variable 'rpl_semi_sync_master_enabled' can't be set to the value of 'some text' +connect con1,localhost,root,,; +connect con2,localhost,root,,; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 100 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (100 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 99 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (99 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 98 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (98 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 97 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (97 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 96 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (96 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 95 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (95 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 94 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (94 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 93 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (93 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 92 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (92 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 91 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (91 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 90 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (90 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 89 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (89 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 88 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (88 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 87 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (87 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 86 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (86 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 85 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (85 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 84 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (84 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 83 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (83 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 82 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (82 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 81 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (81 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 80 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (80 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 79 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (79 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 78 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (78 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 77 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (77 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 76 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (76 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 75 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (75 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 74 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (74 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 73 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (73 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 72 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (72 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 71 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (71 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 70 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (70 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 69 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (69 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 68 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (68 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 67 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (67 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 66 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (66 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 65 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (65 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 64 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (64 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 63 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (63 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 62 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (62 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 61 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (61 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 60 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (60 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 59 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (59 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 58 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (58 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 57 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (57 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 56 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (56 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 55 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (55 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 54 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (54 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 53 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (53 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 52 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (52 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 51 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (51 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 50 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (50 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 49 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (49 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 48 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (48 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 47 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (47 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 46 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (46 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 45 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (45 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 44 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (44 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 43 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (43 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 42 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (42 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 41 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (41 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 40 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (40 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 39 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (39 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 38 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (38 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 37 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (37 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 36 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (36 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 35 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (35 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 34 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (34 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 33 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (33 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 32 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (32 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 31 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (31 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 30 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (30 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 29 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (29 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 28 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (28 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 27 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (27 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 26 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (26 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 25 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (25 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 24 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (24 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 23 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (23 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 22 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (22 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 21 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (21 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 20 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (20 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 19 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (19 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 18 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (18 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 17 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (17 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 16 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (16 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 15 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (15 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 14 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (14 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 13 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (13 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 12 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (12 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 11 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (11 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 10 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (10 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 9 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (9 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 8 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (8 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 7 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (7 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 6 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (6 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 5 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (5 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 4 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (4 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 3 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (3 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 2 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (2 + 1) % 2; +connection con1; +connection con2; +connection con1; +SET @@global.rpl_semi_sync_master_enabled = 1 % 2; +connection con2; +SET @@global.rpl_semi_sync_master_enabled = (1 + 1) % 2; +connection con1; +connection con2; +disconnect con1; +disconnect con2; +connection default; +SET @@global.rpl_semi_sync_master_enabled = 1; SET @@global.rpl_semi_sync_master_enabled = @start_global_value; select @@global.rpl_semi_sync_master_enabled; @@global.rpl_semi_sync_master_enabled diff --git a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test index da22d0535f4..25524307559 100644 --- a/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test +++ b/mysql-test/suite/sys_vars/t/rpl_semi_sync_master_enabled_basic.test @@ -51,6 +51,33 @@ set global rpl_semi_sync_master_enabled=1e1; --error ER_WRONG_VALUE_FOR_VAR set global rpl_semi_sync_master_enabled="some text"; +# +# Test conflicting concurrent setting +# +--let $val_saved= `SELECT @@global.rpl_semi_sync_master_enabled` +connect (con1,localhost,root,,); +connect (con2,localhost,root,,); +--let $iter=100 +while ($iter) +{ + --connection con1 + --send_eval SET @@global.rpl_semi_sync_master_enabled = $iter % 2 + + --connection con2 + --send_eval SET @@global.rpl_semi_sync_master_enabled = ($iter + 1) % 2 + + --connection con1 + reap; + --connection con2 + reap; + + --dec $iter +} +disconnect con1; +disconnect con2; + +--connection default +--eval SET @@global.rpl_semi_sync_master_enabled = $val_saved # # Cleanup diff --git a/sql/semisync_master_ack_receiver.cc b/sql/semisync_master_ack_receiver.cc index 7240d10b745..6cd02419e37 100644 --- a/sql/semisync_master_ack_receiver.cc +++ b/sql/semisync_master_ack_receiver.cc @@ -209,7 +209,8 @@ static void init_net(NET *net, unsigned char *buff, unsigned int buff_len) void Ack_receiver::run() { - THD *thd= new THD(next_thread_id()); + // skip LOCK_global_system_variables due to the 3rd arg + THD *thd= new THD(next_thread_id(), false, true); NET net; unsigned char net_buff[REPLY_MESSAGE_MAX_LENGTH]; diff --git a/sql/sql_class.cc b/sql/sql_class.cc index afd0c375718..a97ad06c7f6 100644 --- a/sql/sql_class.cc +++ b/sql/sql_class.cc @@ -693,7 +693,7 @@ extern "C" void thd_kill_timeout(THD* thd) } -THD::THD(my_thread_id id, bool is_wsrep_applier) +THD::THD(my_thread_id id, bool is_wsrep_applier, bool skip_global_sys_var_lock) :Statement(&main_lex, &main_mem_root, STMT_CONVENTIONAL_EXECUTION, /* statement id */ 0), rli_fake(0), rgi_fake(0), rgi_slave(NULL), @@ -880,7 +880,7 @@ THD::THD(my_thread_id id, bool is_wsrep_applier) /* Call to init() below requires fully initialized Open_tables_state. */ reset_open_tables_state(this); - init(); + init(skip_global_sys_var_lock); #if defined(ENABLED_PROFILING) profiling.set_thd(this); #endif @@ -1237,10 +1237,11 @@ extern "C" my_thread_id next_thread_id_noinline() Init common variables that has to be reset on start and on change_user */ -void THD::init(void) +void THD::init(bool skip_lock) { DBUG_ENTER("thd::init"); - mysql_mutex_lock(&LOCK_global_system_variables); + if (!skip_lock) + mysql_mutex_lock(&LOCK_global_system_variables); plugin_thdvar_init(this); /* plugin_thd_var_init() sets variables= global_system_variables, which @@ -1253,8 +1254,8 @@ void THD::init(void) ::strmake(variables.default_master_connection.str, global_system_variables.default_master_connection.str, variables.default_master_connection.length); - - mysql_mutex_unlock(&LOCK_global_system_variables); + if (!skip_lock) + mysql_mutex_unlock(&LOCK_global_system_variables); user_time.val= start_time= start_time_sec_part= 0; diff --git a/sql/sql_class.h b/sql/sql_class.h index c0a6f5b0e62..b708b96053f 100644 --- a/sql/sql_class.h +++ b/sql/sql_class.h @@ -3098,11 +3098,20 @@ public: /* Debug Sync facility. See debug_sync.cc. */ struct st_debug_sync_control *debug_sync_control; #endif /* defined(ENABLED_DEBUG_SYNC) */ - THD(my_thread_id id, bool is_wsrep_applier= false); + /** + @param id thread identifier + @param is_wsrep_applier thread type + @param skip_lock instruct whether @c LOCK_global_system_variables + is already locked, to not acquire it then. + */ + THD(my_thread_id id, bool is_wsrep_applier= false, bool skip_lock= false); ~THD(); - - void init(void); + /** + @param skip_lock instruct whether @c LOCK_global_system_variables + is already locked, to not acquire it then. + */ + void init(bool skip_lock= false); /* Initialize memory roots necessary for query processing and (!) pre-allocate memory for it. We can't do that in THD constructor because |