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
|