File: gr_primary_mode_group_operations_04.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 (159 lines) | stat: -rw-r--r-- 5,725 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
157
158
159
###############################################################################
#
# When the group is in **multi-primary** mode and the user causes a
# change to **single-primary** mode the group must:
# - 1: Elect a primary. If one is selected by the user, that member must be chosen.
# - 2: The primary shall be writable after processing the current backlog
# - 3: Secondaries shall enable the server super_read_only mode.
# - 4: Update everywhere checks is set to False but only after all
#      transactions from the old primary are applied.
#
#
# Test:
#
#   0. This test needs two servers started in multi primary mode
#   1. Create table to use on test
#   2. Pause transactions on server2 to monitor
#      group_replication_enforce_update_everywhere_checks
#   3. Push data to server1. It won't be committed on server2 due to the
#      paused transactions
#   4. Execute action switch to single primary mode, with server2 as primary
#      member
#   5. Confirm stages on server2
#   6. Since server2 has paused transactions, the values aren't committed, so
#      group_replication_enforce_update_everywhere_checks is enabled
#   7. Resume transactions on server2
#   8. On primary member the super_read_only shall be disable
#   9. Confirm server2 is the group primary member.
#   10. server2 after update all queued transactions will disable
#      group_replication_enforce_update_everywhere_checks
#   11. The secondary member shall have the super_read_only enable
#   12. Cleanup
#
###############################################################################

--source include/have_debug_sync.inc
--source include/have_group_replication_plugin.inc
--source include/group_replication.inc

--echo
--echo # 1. Create table to use on test

CREATE TABLE test.t1 (a INT PRIMARY KEY);

--source include/rpl_sync.inc

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

--echo
--echo # 2. Pause transactions on server2 to monitor
--echo #    group_replication_enforce_update_everywhere_checks

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

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

--echo
--echo # 3. Push data to server1.
--echo #    It won't be committed on server2 due to paused transactions

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

--eval INSERT INTO t1 VALUES (1)

--echo
--echo # 4. Execute action switch to single primary mode,
--echo #    with server2 as primary member

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

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

--echo
--echo # 5. Confirm stages on server2

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

SET DEBUG_SYNC= "now WAIT_FOR signal.group_replication_wait_on_observer_trans_waiting";

--let $wait_condition=SELECT COUNT(*)=1 FROM performance_schema.events_stages_current WHERE event_name LIKE "%Primary Election: stabilizing transactions%"
--source include/wait_condition.inc

--let $stage_name= `SELECT event_name FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl/Single-primary%";`
--let $assert_text= stage/group_rpl/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 $stage_name= `SELECT event_name FROM performance_schema.events_stages_current WHERE event_name LIKE "%stage/group_rpl/Primary Election%";`
--let $assert_text= stage/group_rpl/Primary Election: stabilizing transactions from former primaries
--let $assert_cond= "$stage_name" = "stage/group_rpl/Primary Election: stabilizing transactions from former primaries"
--source include/assert.inc

--echo
--echo # 6. Since server2 has paused transactions, the values aren't committed, so
--echo #    group_replication_enforce_update_everywhere_checks is enabled

--let $assert_text= group_replication_enforce_update_everywhere_checks is ON
--let $assert_cond= "[SELECT @@GLOBAL.group_replication_enforce_update_everywhere_checks]" = "1"
--source include/assert.inc

--echo
--echo # 7. Resume transactions on server2

--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';

--echo
--echo # 8. On primary member the super_read_only shall be disable

--let $assert_text= The super_read_only mode should be 0 here.
--let $assert_cond= "[SELECT @@GLOBAL.super_read_only]" = 0;
--source include/assert.inc

--echo
--echo # 9. Confirm server2 is the group primary member.

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

--replace_result $server2_uuid MEMBER2_UUID
--reap

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

--echo
--echo # 10. server2 after update all queued transactions will disable
--echo #    group_replication_enforce_update_everywhere_checks

--let $group_replication_expected_uuid=$server2_uuid
--source include/gr_assert_primary_member.inc

--echo
--echo # 11. The secondary member shall have the super_read_only enable

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

--source include/gr_assert_secondary_member.inc

--echo
--echo # 12. Cleanup

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

SET DEBUG_SYNC= 'RESET';

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