polardbxengine/mysql-test/suite/group_replication/t/gr_server_version.test

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