File: gr_primary_mode_group_operations_35.test

package info (click to toggle)
mysql-8.0 8.0.43-3
  • links: PTS, VCS
  • area: main
  • in suites: sid
  • size: 1,273,924 kB
  • sloc: cpp: 4,684,605; ansic: 412,450; pascal: 108,398; java: 83,641; perl: 30,221; cs: 27,067; sql: 26,594; sh: 24,181; python: 21,816; yacc: 17,169; php: 11,522; xml: 7,388; javascript: 7,076; makefile: 2,194; lex: 1,075; awk: 670; asm: 520; objc: 183; ruby: 97; lisp: 86
file content (156 lines) | stat: -rw-r--r-- 6,027 bytes parent folder | download
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
###############################################################################
#
# If the action thread is killed but the configuration process
# still has major tasks to complete the member will execute them and stay on
# the group.
#
# Test:
#  0. Group start in Multi Primary mode with 3 servers
#  1. Get a transaction stuck on server 2 (the new primary)
#  2. Do a change to single primary mode with server 2 as the new primary
#     Get the connection ID
#     See that it is stuck on Primary election
#  3. Kill the query
#  4. Resume transactions, it shall succeed and check the action
#     completed in the other members
#  5. Cleanup
#
###############################################################################

--source include/have_debug_sync.inc
--source include/big_test.inc
--source include/have_group_replication_plugin.inc
--let $rpl_server_count= 3
--source include/group_replication.inc

set session sql_log_bin=0;
call mtr.add_suppression("The server was automatically set into read only mode after an error was detected.");
call mtr.add_suppression("A configuration change was killed in this member. The member will now leave the group as its configuration may have diverged.");
call mtr.add_suppression("Skipping leave operation: concurrent attempt to leave the group is on-going.");
call mtr.add_suppression("The function 'group_replication_switch_to_single_primary_mode' failed. This operation was locally killed and for that reason terminated*");
set session sql_log_bin=1;

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

--let $server2_uuid= query_get_value(SELECT @@SERVER_UUID, @@SERVER_UUID, 1)

CREATE TABLE test.t1 (a INT PRIMARY KEY);
--source include/rpl_sync.inc

--echo
--echo # 1. Get a transaction stuck on server 2 (the new primary)

--let $rpl_connection_name= server_2
--source include/rpl_connection.inc

--let $debug_point= group_replication_wait_on_observer_trans
--source include/add_debug_point.inc

--let $rpl_connection_name= server_1
--source include/rpl_connection.inc

INSERT INTO t1 VALUES (1);

--let $rpl_connection_name= server_2
--source include/rpl_connection.inc
SET DEBUG_SYNC= "now WAIT_FOR signal.group_replication_wait_on_observer_trans_waiting";

--echo
--echo # 2. Do a change to single primary mode with server 2 as the new primary
--echo # Get the connection ID
--echo # See that it is stuck on Primary election

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--let $conn_id=`SELECT CONNECTION_ID()`

--replace_result $server2_uuid MEMBER2_UUID
--send_eval SELECT group_replication_switch_to_single_primary_mode("$server2_uuid")

--let $rpl_connection_name= server_1
--source include/rpl_connection.inc

--let $wait_condition=SELECT COUNT(*)=1 FROM performance_schema.events_stages_current WHERE event_name LIKE "%Single-primary Switch: executing Primary%" and work_completed=1
--source include/wait_condition.inc

--let $stage_name= `SELECT event_name FROM performance_schema.events_stages_current WHERE event_name LIKE "%Single-primary Switch:%" AND event_name NOT LIKE "%stage/group_rpl/Group Replication%";`
--let $assert_text= The stage should be "Single-primary Switch: executing Primary election"
--let $assert_cond= "$stage_name" = "stage/group_rpl/Single-primary Switch: executing Primary election"
--source include/assert.inc

--let $rpl_connection_name= server3
--source include/rpl_connection.inc

--let $wait_condition=SELECT COUNT(*)=1 FROM performance_schema.events_stages_current WHERE event_name LIKE "%Single-primary Switch: executing Primary%" and work_completed=1
--source include/wait_condition.inc

--let $stage_name= `SELECT event_name FROM performance_schema.events_stages_current WHERE event_name LIKE "%Single-primary Switch:%";`
--let $assert_text= The stage should be "Single-primary Switch: executing Primary election"
--let $assert_cond= "$stage_name" = "stage/group_rpl/Single-primary Switch: executing Primary election"
--source include/assert.inc

--echo
--echo # 3. Kill the query

--let $rpl_connection_name= server_1
--source include/rpl_connection.inc

--replace_result $conn_id CONNECTION_ID
--eval KILL QUERY $conn_id

--echo
--echo # 4. Resume transactions, it shall succeed and check the action
--echo #    completed in the other members

--let $rpl_connection_name= server_2
--source include/rpl_connection.inc

--let $debug_point= group_replication_wait_on_observer_trans
--source include/remove_debug_point.inc
SET DEBUG_SYNC= 'now SIGNAL signal.group_replication_wait_on_observer_trans_continue';

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--replace_result $server2_uuid MEMBER2_UUID
--reap

--let $rpl_connection_name= server_2
--source include/rpl_connection.inc

--let $wait_condition=SELECT COUNT(*)=0 FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%" AND event_name NOT LIKE "%stage/group_rpl/Group Replication%"
--source include/wait_condition.inc

--source include/gr_assert_primary_member.inc

SET DEBUG_SYNC='RESET';

--let $rpl_connection_name= server3
--source include/rpl_connection.inc

--let $wait_condition=SELECT COUNT(*)=0 FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%" AND event_name NOT LIKE "%stage/group_rpl/Group Replication%"
--source include/wait_condition.inc

--source include/gr_assert_secondary_member.inc

--let $rpl_connection_name= server1
--source include/rpl_connection.inc

--let $wait_condition=SELECT COUNT(*)=0 FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl%" AND event_name NOT LIKE "%stage/group_rpl/Group Replication%"
--source include/wait_condition.inc

--source include/gr_assert_secondary_member.inc

--echo
--echo # 5. Cleanup

--let $rpl_connection_name= server2
--source include/rpl_connection.inc

DROP TABLE t1;

--let $rpl_group_replication_single_primary_mode=1
--let $rpl_group_replication_reset_persistent_vars=1
--source include/group_replication_end.inc