Skip to content

Commit

Permalink
Merge branch '10.4' into 10.5
Browse files Browse the repository at this point in the history
  • Loading branch information
mariadb-YuchenPei committed Sep 15, 2023
2 parents 81e60f1 + 96760d3 commit e95e9a2
Show file tree
Hide file tree
Showing 21 changed files with 278 additions and 588 deletions.
34 changes: 21 additions & 13 deletions mysql-test/include/rpl_change_topology.inc
Original file line number Diff line number Diff line change
Expand Up @@ -5,15 +5,15 @@
# need to change topology after they have sourced include/rpl_init.inc
#
# This file sets up variables needed by include/rpl_sync.inc and many
# other replication scripts in the include/ directory. It also issues
# other replication scripts in the include/ directory. It also issues
# CHANGE MASTER on all servers where the configuration changes from
# what it was before. It does not issue START SLAVE (use
# what it was before. It does not issue START SLAVE (use
# include/rpl_start_slaves.inc for that).
#
# Note: it is not currently possible to change the number of servers
# after the rpl_init.inc, without first calling rpl_end.inc. So the
# test has to set $rpl_server_count to the total number of servers
# that the test uses, before it sources include/rpl_init.inc. After
# that the test uses, before it sources include/rpl_init.inc. After
# that, $rpl_server_count must not change until after next time the
# test sources include/rpl_end.inc.
#
Expand All @@ -37,25 +37,25 @@
# By default, CHANGE MASTER is executed with MASTER_LOG_FILE set
# to the name of the last binlog file on the master (retrieved by
# executing SHOW MASTER STATUS). This variable can be set to
# specify another filename. This variable should be a
# specify another filename. This variable should be a
# comma-separated list of the following form:
#
# SERVER_NUMBER_1:FILE_NAME_1,SERVER_NUMBER_2:FILE_NAME_2,...
#
# Before CHANGE MASTER is executed on server N, this script checks
# if $rpl_master_log_file contains the text N:FILE_NAME. If it
# does, then MASTER_LOG_FILE is set to FILE_NAME. Otherwise,
# MASTER_LOG_FILE is set to the last binlog on the master. For
# MASTER_LOG_FILE is set to the last binlog on the master. For
# example, to specify that server_1 should start replicate from
# master-bin.000007 and server_5 should start replicate from
# master-bin.012345, do:
# --let $rpl_master_log_file= 1:master-bin.000007,5:master-bin.012345
#
# $rpl_master_log_pos
# By default, CHANGE MASTER is executed without specifying the
# MASTER_LOG_POS parameter. This variable can be set to set a
# specific position. It has the same form as $rpl_master_log_file
# (see above). For example, to specify that server_3 should start
# MASTER_LOG_POS parameter. This variable can be set to set a
# specific position. It has the same form as $rpl_master_log_file
# (see above). For example, to specify that server_3 should start
# replicate from position 4711 of its master, do:
# --let $rpl_master_log_pos= 3:4711
#
Expand All @@ -72,7 +72,7 @@
# include/rpl_stop_slaves.inc
# include/rpl_end.inc
#
# $rpl_server_count_length:
# $rpl_server_count_length
# Set to LENGTH($rpl_server_count). So if $rpl_server_count < 10,
# then $rpl_server_count_length = 1; if 10 <= $rpl_server_count <
# 100, then $rpl_server_count_length = 2, etc.
Expand All @@ -83,12 +83,12 @@
# server N is a slave, then the N'th number is the master of server
# N. If server N is not a slave, then the N'th number is just spaces
# (so in fact it is not a number). For example, if $rpl_topology is
# '1->2,2->3,3->1,2->4,5->6', then $rpl_master_list is '3122 6'.
# '1->2,2->3,3->1,2->4,5->6', then $rpl_master_list is '3122 5'.
#
# $rpl_sync_chain_dirty
# This variable is set to 1. This tells include/rpl_sync.inc to
# This variable is set to 1. This tells include/rpl_sync.inc to
# compute a new value for $rpl_sync_chain next time that
# include/rpl_sync.inc is sourced. See
# include/rpl_sync.inc is sourced. See
# include/rpl_generate_sync_chain.inc and include/rpl_sync.inc for
# details.

Expand Down Expand Up @@ -124,7 +124,7 @@ if ($rpl_master_list == '')
if ($rpl_debug)
{
--echo \$rpl_server_count='$rpl_server_count'
--echo \$rpl_server_count_length='$rpl_server_count_length'
--echo old \$rpl_server_count_length='$rpl_server_count_length'
--echo new \$rpl_topology='$_rpl_topology'
--echo old \$rpl_master_list='$rpl_master_list'
--echo old \$rpl_sync_chain='$rpl_sync_chain'
Expand Down Expand Up @@ -210,6 +210,10 @@ if (!$rpl_skip_change_master)
--let $rpl_connection_name= server_$_rpl_master
--source include/rpl_connection.inc
--let $_rpl_master_log_file= query_get_value(SHOW MASTER STATUS, File, 1)
if ($rpl_debug)
{
--echo "\$rpl_master_log_file parameter not set for the master: $_rpl_master, use the latest binlog file by executing SHOW MASTER STATUS."
}
}
# Change connection.
--let $rpl_connection_name= server_$_rpl_server
Expand All @@ -224,6 +228,10 @@ if (!$rpl_skip_change_master)
if (!$_rpl_master_log_pos_index)
{
--let $_rpl_master_log_pos=
if ($rpl_debug)
{
--echo "\$rpl_master_log_pos parameter not set for the master: $_rpl_master. Set log position to empty."
}
}
eval CHANGE MASTER TO MASTER_HOST = '127.0.0.1', MASTER_PORT = $_rpl_port, MASTER_USER = 'root', MASTER_LOG_FILE = '$_rpl_master_log_file'$_rpl_master_log_pos, MASTER_CONNECT_RETRY = 1;
}
Expand Down
2 changes: 1 addition & 1 deletion mysql-test/include/rpl_connect.inc
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@
# This script is normally used internally by rpl_init.inc and
# master-slave.inc, but it can also be used in test cases that need to
# create more connections or re-create connections after disconnect.
#
# Default ports SERVER_MYPORT_[1,2] are set by rpl_init.inc.
#
# ==== Usage ====
#
Expand Down
2 changes: 0 additions & 2 deletions mysql-test/include/rpl_end.inc
Original file line number Diff line number Diff line change
Expand Up @@ -103,11 +103,9 @@ while ($_rpl_server)

--connection default
--let $_rpl_server= $rpl_server_count
--let $_rpl_one= _1
while ($_rpl_server)
{
--disconnect server_$_rpl_server
--disconnect server_$_rpl_server$_rpl_one
--dec $_rpl_server
}

Expand Down
16 changes: 15 additions & 1 deletion mysql-test/include/rpl_for_each_slave.inc
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
# ==== Purpose ====
#
# Execute a .inc file once for each server that was configured as a
# slave by rpl_init.inc
# slave by rpl_init.inc, for example start_slave.inc or stop_slave.inc file.
#
#
# ==== Usage ====
Expand All @@ -14,6 +14,20 @@
# $rpl_source_file
# The file that will be sourced.
#
# $rpl_server_count
# The number of servers to configure. If this is not set, the largest
# number in $rpl_topology will be used.
# This parameter is obtained from rpl_init.inc.
#
# $rpl_master_list
# This parameter is calculated from within rpl_init.inc.
#
# $rpl_server_count_length
# Set to LENGTH($rpl_server_count). So if $rpl_server_count < 10,
# then $rpl_server_count_length = 1; if 10 <= $rpl_server_count <
# 100, then $rpl_server_count_length = 2, etc.
# This parameter is calculated from within rpl_change_topology.inc.
#
# $rpl_debug
# See include/rpl_init.inc

Expand Down
40 changes: 24 additions & 16 deletions mysql-test/include/rpl_init.inc
Original file line number Diff line number Diff line change
Expand Up @@ -3,18 +3,16 @@
# Set up replication on several servers in a specified topology.
#
# By default, this script does the following:
# - Creates the connections server_1, server_2, ..., server_N, as
# well as extra connections server_1_1, server_2_1, ...,
# server_N_1. server_I and server_I_1 are connections to the same
# server.
# - Verifies that @@server_id of all servers are different.
# - Creates the connections server_1, server_2, ..., server_N.
# - Calls RESET MASTER, RESET SLAVE, USE test, CHANGE MASTER, START SLAVE.
# - Sets the connection to server_1 before exiting.
# With $rpl_check_server_ids parameter, the script does the following:
# - Verifies that @@server_id of all servers are different.
#
# ==== Usage ====
#
# 1. If you are going to use more than two servers, create
# rpl_test.cfg with the following contents:
# rpl_test.cnf with the following contents:
#
# !include ../my.cnf
# [mysqld.1]
Expand All @@ -34,8 +32,9 @@
#
# (It is allowed, but not required, to configure SERVER_MYPORT_1
# and SERVER_MYPORT_2 too. If these variables are not set, the
# variables MASTER_MYPORT and SLAVE_MYPORT, configured in the
# default my.cnf used by the rpl suite, are used instead.)
# variables MASTER_MYPORT and SLAVE_MYPORT are used instead.
# These variables are configured in the rpl_1slave_base.cnf,
# that is used in the default my.cnf, which is used by the rpl suite.)
#
# 2. Execute the following near the top of the test:
#
Expand Down Expand Up @@ -147,18 +146,15 @@ if (!$rpl_debug)
}


# Create two connections to each server; reset master/slave, select
# Create connection to the server; reset master/slave, select
# database, set autoinc variables.
--let $_rpl_server= $rpl_server_count
--let $_rpl_one= _1
while ($_rpl_server)
{
# Connect.
--let $rpl_server_number= $_rpl_server
--let $rpl_connection_name= server_$_rpl_server
--source include/rpl_connect.inc
--let $rpl_connection_name= server_$_rpl_server$_rpl_one
--source include/rpl_connect.inc

# Configure server.
--let $rpl_connection_name= server_$_rpl_server
Expand Down Expand Up @@ -203,7 +199,7 @@ if ($rpl_check_server_ids)
while ($_rpl_server2)
{
--let $assert_text= Servers $_rpl_server and $_rpl_server2 should have different @@server_id
--let $assert_condition= [$_rpl_server:SELECT @@server_id AS i, i, 1] != [$_rpl_server2:SELECT @@server_id AS i, i, 1]
--let $assert_cond= [SELECT @@server_id AS i, i, 1] != $_rpl_server

--source include/assert.inc
--dec $_rpl_server2
Expand All @@ -212,18 +208,30 @@ if ($rpl_check_server_ids)
}
}

# $rpl_master_list must be set so that include/rpl_change_topology.inc
# knows which servers are initialized and not.
if ($rpl_debug)
{
--echo ---- Check the topology and call CHANGE MASTER ----
}

# $rpl_master_list must be set so that include/rpl_change_topology.inc and later
# include/rpl_for_each_slave.inc knows which servers are initialized and not.
--let $rpl_master_list= `SELECT REPEAT('x', $rpl_server_count * LENGTH($rpl_server_count))`
--source include/rpl_change_topology.inc


if (!$rpl_skip_start_slave)
{
if ($rpl_debug)
{
--echo ---- Start slaves ----
}
--source include/rpl_start_slaves.inc
}


if ($rpl_debug)
{
--echo ---- Set connection to the server_1 ----
}
--let $rpl_connection_name= server_1
--source include/rpl_connection.inc

Expand Down
11 changes: 0 additions & 11 deletions mysql-test/include/rpl_reconnect.inc
Original file line number Diff line number Diff line change
Expand Up @@ -72,11 +72,6 @@ if (!$_rpl_server_number)
--source include/rpl_connection.inc
--enable_reconnect

--let $_rpl_one= _1
--let $rpl_connection_name= server_$rpl_server_number$_rpl_one
--source include/rpl_connection.inc
--enable_reconnect

if ($rpl_debug)
{
--echo ---- Wait for reconnect and disable reconnect on all connections ----
Expand Down Expand Up @@ -122,11 +117,5 @@ if (!$_rpl_server_number)
--source include/wait_until_connected_again.inc
--disable_reconnect

--let $rpl_connection_name= server_$rpl_server_number$_rpl_one
--source include/rpl_connection.inc
--source include/wait_until_connected_again.inc
--disable_reconnect


--let $include_filename= rpl_reconnect.inc
--source include/end_include_file.inc
2 changes: 1 addition & 1 deletion mysql-test/include/rpl_start_slaves.inc
Original file line number Diff line number Diff line change
Expand Up @@ -19,7 +19,7 @@
#
# $slave_timeout
# Set the timeout when waiting for slave threads to stop and
# start, respectively. See include/wait_for_slave_param.inc
# start, respectively. See include/wait_for_slave_param.inc


--let $include_filename= rpl_start_slaves.inc
Expand Down
9 changes: 5 additions & 4 deletions mysql-test/include/wait_for_slave_io_to_start.inc
Original file line number Diff line number Diff line change
Expand Up @@ -14,13 +14,14 @@
#
# Parameters:
# $slave_timeout
# See include/wait_for_slave_param.inc
# Timeout used when waiting for the slave IO thread to start.
# See include/wait_for_slave_param.inc.
#
# $rpl_allow_error
# By default, this file fails if there is an error in the IO
# thread. However, the IO thread can recover and reconnect after
# certain errors. If such an error is expected, can set
# $rpl_allow_error=1. This will prevent this file from failing if
# thread. However, the IO thread can recover and reconnect after
# certain errors. If such an error is expected, can set
# $rpl_allow_error=1. This will prevent this file from failing if
# there is an error in the IO thread.
#
# $rpl_debug
Expand Down
3 changes: 2 additions & 1 deletion mysql-test/include/wait_for_slave_sql_to_start.inc
Original file line number Diff line number Diff line change
Expand Up @@ -11,6 +11,7 @@
#
# Parameters:
# $slave_timeout
# Timeout used when waiting for the slave SQL thread to start.
# See include/wait_for_slave_param.inc
#
# $rpl_debug
Expand All @@ -25,7 +26,7 @@ let $slave_param= Slave_SQL_Running;
let $slave_param_value= Yes;

# Unfortunately, the slave sql thread sets Slave_SQL_Running=Yes
# *before* it clears Last_SQL_Errno. So we have to allow errors in
# *before* it clears Last_SQL_Errno. So we have to allow errors in
# the SQL thread here.

#--let $slave_error_param= Last_SQL_Errno
Expand Down
1 change: 1 addition & 0 deletions mysql-test/include/wait_for_slave_to_start.inc
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@
#
# Parameters:
# $slave_timeout
# Timeout used when waiting for the slave threads to start.
# See include/wait_for_slave_param.inc
#
# $rpl_debug
Expand Down
10 changes: 5 additions & 5 deletions mysql-test/suite/rpl/my.cnf
Original file line number Diff line number Diff line change
@@ -1,8 +1,8 @@
# Use settings from rpl_1slave_base.cnf
# add setting to connect the slave to the master by default
!include rpl_1slave_base.cnf
!include include/default_client.cnf


[mysqld.2]

# Override specific server settings using [mariadb-x.y] option group
# from `test.cnf` file right after including this file.
# E.g. after !include ../my.cnf, in your `test.cnf`, specify your configuration
# in option group e.g [mysqld.x], so that number `x` corresponds to the number
# in the rpl server topology.
Loading

0 comments on commit e95e9a2

Please sign in to comment.