File: gr_message_service_queue_messages.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 (158 lines) | stat: -rw-r--r-- 6,467 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
########################################################################
#
# The receiver service queue all messages and deliver to subscribers
# on a dedicated thread, thence not holding the Group Communication
# Service deliver thread.
#
# Test:
#   0. This test requires two servers with GR
#   1. Load plugin replication observers example on server1
#   2. Load plugin replication observers example on server2
#   3. Enable debug point that will put on hold the notification of recv
#      messages
#   4. Execute UDF that will transmit tag and message over GR send service
#   5. On server 1 execute UDF that will transmit tag and message over GR
#      send service
#   6. To decrease failure rate on assert_grep we do a transaction with
#      AFTER consistency to add some rounds on GCS communication and stop GR on
#      server1, which will make it wait for the delivery of new view, and
#      that will happen only after delivery of service message. This will
#      give some time to server to receive and write it to error log.
#   7. Assert server1 received both messages transmitted by GR delivery
#      message service
#   8. Assert server2 did not received any message transmitted by GR delivery
#      message service due being held on debug point
#   9. Assert server2 received view from server1 leaving the group
#  10. Remove debug point and release hold of messages
#  11. Assert server2 received both messages transmitted by GR message
#      delivery
#  12. Cleanup
#
########################################################################

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

--echo
--echo # 1. Load plugin replication observers example on server1

--source include/install_replication_observers_example.inc

--echo
--echo # 2. Load plugin replication observers example on server2

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

--source include/install_replication_observers_example.inc

--echo
--echo # 3. Enable debug point that will put on hold the notification of recv
--echo #    messages

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

--echo
--echo # 4. Execute UDF that will transmit tag and message over GR send service

SELECT group_replication_service_message_send("tag", "Server2 sent a message");

--echo
--echo # 5. On server 1 execute UDF that will transmit tag and message over GR
--echo #    send service

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

SELECT group_replication_service_message_send("tag", "Server1 sent a message");

--echo
--echo # 6. To decrease failure rate on assert_grep we do a transaction with
--echo #    AFTER consistency to add some rounds on GCS communication and stop GR on
--echo #    server1, which will make it wait for the delivery of new view, and
--echo #    that will happen only after delivery of service message. This will
--echo #    give some time to server to receive and write it to error log.

SET @@SESSION.group_replication_consistency= 'AFTER';
CREATE TABLE t1 (a INT NOT NULL AUTO_INCREMENT PRIMARY KEY , b INT);
DROP TABLE test.t1;
--source include/stop_group_replication.inc

--echo
--echo # 7. Assert server1 received both messages transmitted by GR delivery
--echo #    message service

--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_message_service_queue_messages.1.err
--let $assert_count = 1
--let $assert_select = Plugin replication_observers_example reported: 'Service message recv TAG: "tag", TAG_SIZE: 3, MSG: "Server2 sent a message", MSG_SIZE: 22.'
--let $assert_text = Server 1 received message from server 2.
--source include/assert_grep.inc

--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_message_service_queue_messages.1.err
--let $assert_count = 1
--let $assert_select = Plugin replication_observers_example reported: 'Service message recv TAG: "tag", TAG_SIZE: 3, MSG: "Server1 sent a message", MSG_SIZE: 22.'
--let $assert_text = Server 1 received message from itself.
--source include/assert_grep.inc

--echo
--echo # 8. Assert server2 did not received any message transmitted by GR delivery
--echo #    message service due being held on debug point

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

--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_message_service_queue_messages.2.err
--let $assert_count = 0
--let $assert_select = Plugin replication_observers_example reported: 'Service message recv *'
--let $assert_text = Server 2 did not received any message.
--source include/assert_grep.inc

--echo
--echo # 9. Assert server2 received view from server1 leaving the group

--let $raw_view_id= query_get_value(SELECT view_id FROM performance_schema.replication_group_member_stats, view_id, 1)
--let $view_id= `SELECT RIGHT('$raw_view_id', 1)`
--let $assert_text= Server2 received view from server1 leaving the group
--let $assert_cond= $view_id = 3
--source include/assert.inc

--echo
--echo # 10. Remove debug point and release hold of messages

--let $debug_point= group_replication_message_service_hold_messages
--source include/remove_debug_point.inc

SET DEBUG_SYNC= "now SIGNAL signal.notification_continue";

--echo
--echo # 11. Assert server2 received both messages transmitted by GR message
--echo #     delivery

--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_message_service_queue_messages.2.err
--let $assert_count = 1
--let $assert_select = Plugin replication_observers_example reported: 'Service message recv TAG: "tag", TAG_SIZE: 3, MSG: "Server2 sent a message", MSG_SIZE: 22.'
--let $assert_text = Server 2 received message from itself.
--source include/assert_grep.inc

--let $assert_file= $MYSQLTEST_VARDIR/tmp/gr_message_service_queue_messages.2.err
--let $assert_count = 1
--let $assert_select = Plugin replication_observers_example reported: 'Service message recv TAG: "tag", TAG_SIZE: 3, MSG: "Server1 sent a message", MSG_SIZE: 22.'
--let $assert_text = Server 2 received message from server 1.
--source include/assert_grep.inc

--echo
--echo # 12. Cleanup

--source include/uninstall_replication_observers_example.inc

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

--source include/start_group_replication.inc

--source include/uninstall_replication_observers_example.inc

--source include/group_replication_end.inc