365 lines
14 KiB
Plaintext
365 lines
14 KiB
Plaintext
###############################################################################
|
|
#
|
|
# This test checks if the original_server_version and immediate_server_version
|
|
# are generated and replicated correctly inside a group.
|
|
#
|
|
# 0. The test uses 4 servers in a setup that includes a GR group in multi
|
|
# primary mode and asynchronous slave connections.
|
|
# 1. Start two members of the group (server2 and server3).
|
|
# 2. Execute a transaction on each of these two servers. Server3 will have a
|
|
# pre-determined server version, set by a debug point-
|
|
# 3. Synchronize the group and start a third member (server4).
|
|
# 4. Make the following assertions on the executed transactions:
|
|
# 4.1. The original_server_version is the same accross all servers and
|
|
# immediate_server_version is generated correctly.
|
|
# 4.2. Transactions consisting of view change events have their
|
|
# original_server_version set to their own server version.
|
|
# 5. Run transactions on the server outside the group (server1) and synchronize
|
|
# the group.
|
|
# 6. Assert that the original_server_version and immediate_server_version of
|
|
# these transactions generated outside the group are correctly replicated and
|
|
# generated.
|
|
# 7. Cleanup.
|
|
#
|
|
# ==== References ====
|
|
#
|
|
# WL#11879 replicate original server version
|
|
|
|
--source include/have_debug.inc
|
|
# needed so that GTIDs are deterministic
|
|
--source include/have_group_replication_gtid_assignment_block_size_1.inc
|
|
--source include/have_group_replication_plugin.inc
|
|
--let $rpl_skip_group_replication_start = 1
|
|
--let $rpl_server_count = 4
|
|
--let $rpl_multi_source = 1
|
|
--source include/group_replication.inc
|
|
|
|
# transform server version in format AA.BB.CC[-suffix] into AABBCC
|
|
--write_file $MYSQL_TMP_DIR/get_numerical_server_version.inc
|
|
--let $server_version = `SELECT @@GLOBAL.version`
|
|
--let $major_version_number = `SELECT SUBSTRING_INDEX('$server_version', '.', 1)`
|
|
--let $mid_version_number = `SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('$server_version', '.', 2), '.', -1)`
|
|
--let $minor_version_number = `SELECT SUBSTRING_INDEX(SUBSTRING_INDEX('$server_version', '-', 1), '.', -1)`
|
|
--let $numerical_server_version = `SELECT $major_version_number * 10000 + $mid_version_number * 100 + $minor_version_number`
|
|
EOF
|
|
|
|
# start first member of the group
|
|
--let $rpl_connection_name = server2
|
|
--source include/rpl_connection.inc
|
|
--source include/start_and_bootstrap_group_replication.inc
|
|
# this group member is also a slave of server1
|
|
# (server2 was implicitely set up as slave of server1 in include/group_replication.inc)
|
|
--source include/start_slave.inc
|
|
|
|
# start second member of the group
|
|
--let $rpl_connection_name = server3
|
|
--source include/rpl_connection.inc
|
|
--source include/start_group_replication.inc
|
|
|
|
# execute a transaction on server2
|
|
--let $rpl_connection_name = server2
|
|
--source include/rpl_connection.inc
|
|
CREATE TABLE t1(a INT PRIMARY KEY);
|
|
# sync group
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--let $sync_slave_connection= server3
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# execute a transaction on server3, forcing its original_server_version to be
|
|
# 777777 in order to check that the value is replicated unchanged. Also force
|
|
# immediate_server_version to be 777777 to check that it is generated correctly
|
|
--let $rpl_connection_name = server3
|
|
--source include/rpl_connection.inc
|
|
--let $debug_point = gr_fixed_server_version
|
|
--source include/add_debug_point.inc
|
|
DROP TABLE t1;
|
|
# sync group
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--let $sync_slave_connection= server3
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# start third member of the group (which will be synced with the group as it joins)
|
|
--let $rpl_connection_name = server4
|
|
--source include/rpl_connection.inc
|
|
--source include/start_group_replication.inc
|
|
|
|
# check if the original_server_version from the CREATE TABLE transaction from
|
|
# server2 was propagated correctly, immediate_server_version was generated
|
|
# correctly and that the immediate_server_version was replicated correctly to
|
|
# server3 through the GR applier channel.
|
|
--let $gtid = $group_replication_group_name:3
|
|
|
|
--let $rpl_connection_name = server2
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_2 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_2 = $immediate_server_version
|
|
--source $MYSQL_TMP_DIR/get_numerical_server_version.inc
|
|
--let $numerical_server_version_2 = $numerical_server_version
|
|
|
|
--let $rpl_connection_name = server3
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_3 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_3 = $immediate_server_version
|
|
--let $log_file = $server_3_datadir/server-relay-log-group_replication_applier.000002
|
|
--source include/get_immediate_server_version.inc
|
|
--let $relay_log_ISV_3 = $immediate_server_version
|
|
--source $MYSQL_TMP_DIR/get_numerical_server_version.inc
|
|
--let $numerical_server_version_3 = $numerical_server_version
|
|
|
|
--let $rpl_connection_name = server4
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_4 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_4 = $immediate_server_version
|
|
--source $MYSQL_TMP_DIR/get_numerical_server_version.inc
|
|
--let $numerical_server_version_4 = $numerical_server_version
|
|
|
|
--let $assert_text = server2 original_server_version must be equal to its own server version
|
|
--let $assert_cond = $numerical_server_version_2 = $OSV_2
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server3 original_server_version must be equal to server2
|
|
--let $assert_cond = $OSV_3 = $OSV_2
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server4 original_server_version must be equal to server2
|
|
--let $assert_cond = $OSV_4 = $OSV_2
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server2 immediate_server_version must be equal its own server version
|
|
--let $assert_cond = $ISV_2 = $numerical_server_version_2
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server3 immediate_server_version must be equal its own server version
|
|
--let $assert_cond = $ISV_3 = $numerical_server_version_3
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server4 immediate_server_version must be equal its own server version
|
|
--let $assert_cond = $ISV_4 = $numerical_server_version_4
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server3 immediate_server_version in the applier relay log must be equal to server2 ISV
|
|
--let $assert_cond = $relay_log_ISV_3 = $ISV_2
|
|
--source include/assert.inc
|
|
|
|
|
|
# check if the original_server_version from the DROP TABLE transaction from
|
|
# server3 was propagated correctly and if immediate_server_version was generated
|
|
# correctly
|
|
--let $gtid = $group_replication_group_name:4
|
|
|
|
--let $rpl_connection_name = server2
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_2 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_2 = $immediate_server_version
|
|
|
|
--let $rpl_connection_name = server3
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_3 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_3 = $immediate_server_version
|
|
|
|
--let $rpl_connection_name = server4
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_4 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_4 = $immediate_server_version
|
|
|
|
--let $assert_text = server3 original_server_version must be equal to 777777
|
|
--let $assert_cond = $OSV_3 = 777777
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server2 original_server_version must be equal to server3
|
|
--let $assert_cond = $OSV_2 = $OSV_3
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server4 original_server_version must be equal to server3
|
|
--let $assert_cond = $OSV_4 = $OSV_3
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server2 immediate_server_version must be equal to its own server version
|
|
--let $assert_cond = $ISV_2 = $numerical_server_version_2
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server3 immediate_server_version must be equal to 777777
|
|
--let $assert_cond = $ISV_3 = 777777
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server4 immediate_server_version must be equal to its own server version
|
|
--let $assert_cond = $ISV_4 = $numerical_server_version_4
|
|
--source include/assert.inc
|
|
|
|
|
|
# check the View_change log event generated when server 4 joined
|
|
--let $gtid = $group_replication_group_name:1
|
|
|
|
--let $rpl_connection_name = server2
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_2 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_2 = $immediate_server_version
|
|
|
|
--let $rpl_connection_name = server3
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_3 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_3 = $immediate_server_version
|
|
|
|
--let $rpl_connection_name = server4
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_4 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_4 = $immediate_server_version
|
|
|
|
--let $assert_text = server2 original_server_version must be equal to its own server_version
|
|
--let $assert_cond = $OSV_2 = $numerical_server_version_2
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server3 original_server_version must be equal to its own server_version
|
|
--let $assert_cond = $OSV_3 = $numerical_server_version_3
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server4 original_server_version must be equal to its own server_version
|
|
--let $assert_cond = $OSV_4 = $numerical_server_version_4
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server2 immediate_server_version must be equal to its own server_version
|
|
--let $assert_cond = $ISV_2 = $numerical_server_version_2
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server3 immediate_server_version must be equal to its own server_version
|
|
--let $assert_cond = $ISV_3 = $numerical_server_version_3
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server4 immediate_server_version must be equal to its own server_version
|
|
--let $assert_cond = $ISV_4 = $numerical_server_version_4
|
|
--source include/assert.inc
|
|
|
|
# run transactions on server1
|
|
--let $rpl_connection_name = server1
|
|
--source include/rpl_connection.inc
|
|
|
|
# force transactions issued by this server to have 888888 has server version
|
|
--let $debug_point = fixed_server_version
|
|
--source include/add_debug_point.inc
|
|
|
|
--let $server1_uuid = query_get_value(select @@global.server_uuid, @@global.server_uuid, 1)
|
|
|
|
CREATE TABLE t2 (a INT PRIMARY KEY);
|
|
DROP TABLE t2;
|
|
|
|
# sync server2 with its master, server1
|
|
--let $sync_slave_connection = server2
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--let $sync_slave_connection =
|
|
# sync group
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--let $sync_slave_connection= server3
|
|
--source include/sync_slave_sql_with_master.inc
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--let $sync_slave_connection= server4
|
|
--source include/sync_slave_sql_with_master.inc
|
|
|
|
# check if transactions from outside the group have the expected
|
|
# original_server_version and immediate_server_version
|
|
--let $gtid = $server1_uuid:1
|
|
|
|
--let $rpl_connection_name = server1
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_1 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_1 = $immediate_server_version
|
|
|
|
--let $rpl_connection_name = server2
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_2 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_2 = $immediate_server_version
|
|
|
|
--let $rpl_connection_name = server3
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_3 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_3 = $immediate_server_version
|
|
|
|
--let $rpl_connection_name = server4
|
|
--source include/rpl_connection.inc
|
|
--source include/get_original_server_version.inc
|
|
--let $OSV_4 = $original_server_version
|
|
--source include/get_immediate_server_version.inc
|
|
--let $ISV_4 = $immediate_server_version
|
|
|
|
--let $assert_text = server1 original_server_version must be equal to 888888
|
|
--let $assert_cond = $OSV_1 = 888888
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server2 original_server_version must be equal to server1
|
|
--let $assert_cond = $OSV_2 = $OSV_1
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server3 original_server_version must be equal to server1
|
|
--let $assert_cond = $OSV_3 = $OSV_1
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server4 original_server_version must be equal to server1
|
|
--let $assert_cond = $OSV_4 = $OSV_1
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server1 immediate_server_version must be equal to 888888
|
|
--let $assert_cond = $ISV_1 = 888888
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server2 immediate_server_version must be equal to its own server version
|
|
--let $assert_cond = $ISV_2 = $numerical_server_version_2
|
|
--source include/assert.inc
|
|
|
|
# the debug point has not been removed yet, which means that the immediate
|
|
# server version must still be 777777
|
|
--let $assert_text = server3 immediate_server_version must be equal to 777777
|
|
--let $assert_cond = $ISV_3 = 777777
|
|
--source include/assert.inc
|
|
|
|
--let $assert_text = server4 immediate_server_version must be equal to its own server version
|
|
--let $assert_cond = $ISV_4 = $numerical_server_version_4
|
|
--source include/assert.inc
|
|
|
|
# cleanup
|
|
--let $rpl_connection_name = server1
|
|
--source include/rpl_connection.inc
|
|
--let $debug_point = fixed_server_version
|
|
--source include/remove_debug_point.inc
|
|
|
|
--let $rpl_connection_name = server3
|
|
--source include/rpl_connection.inc
|
|
--let $debug_point = gr_fixed_server_version
|
|
--source include/remove_debug_point.inc
|
|
|
|
--let $rpl_connection_name= server2
|
|
--source include/rpl_connection.inc
|
|
--let $rpl_channel_name= 'channel_1'
|
|
--source include/stop_slave.inc
|
|
--source include/rpl_reset_slave_helper.inc
|
|
|
|
--let $rpl_skip_sync= 1
|
|
--source include/group_replication_end.inc
|
|
--remove_file $MYSQL_TMP_DIR/get_numerical_server_version.inc
|