mirror of
https://github.com/MariaDB/server.git
synced 2025-01-30 18:41:56 +01:00
9e048a6bc5
Problem - The default port number shown in SHOW SLAVE HOSTS is always 3306 though the slave is actually listening on a different port number. This is a problem as the user can not be sure whether this port value can be trusted and so client trying to read replication topology can get confused. Fix - 3306 ceases to be the default value of report-port. Moreover report-port does not have a static default any longer. Instead we initialize report-port to 0 as the new default value and change it based on two checks : 1) If report_port is not set, the slave reports the port number its listening on. (i.e. if report-port is not set we get the actual value of the slave's port number). 2) If report-port is set, we show the value report-port is set to, as the slave's port number. mysql-test/include/show_slave_hosts.inc: A .inc file is added to use show slave hosts in the new test added. mysql-test/r/mysqld--help-notwin.result: Updated the result file to show the default value passed for report-port. mysql-test/suite/rpl/r/rpl_report_port.result: The result file for the new test that is added. mysql-test/suite/rpl/r/rpl_show_slave_hosts.result: Updated the result file to show the default value passed for report-port. mysql-test/suite/rpl/t/rpl_report_port-slave.opt: Option file for the new test added. mysql-test/suite/rpl/t/rpl_report_port.test: Added a test to check the correct functionality of report-port. We check this by running the replication twice. In the first run we do not set the value of report-port through the opt file and get the actual port number of the slave's port. We then restart the server with report-port set to some value (in this case 9000) and check the value reported for the slave's port number. mysql-test/suite/sys_vars/t/report_port_basic.test: Update the test file to show the value for report-port. It is replaced with SLAVE_PORT as the actual value of the report-port will change with each run. sql/mysqld.cc: Changed the value reported by report port : 1. If the value for report-port is not set we assign report-port to be the actual port number of the slave (mysqld_port). 2. If report-port is set we get the value set for the report-port. sql/sys_vars.cc: Passed 0 as the default value of the report-port.
47 lines
1.6 KiB
Text
47 lines
1.6 KiB
Text
###############################################################################
|
|
# Bug#13963 SHOW SLAVE HOSTS is unreliable
|
|
#
|
|
# Slaves only appear in the output of SHOW SLAVE HOSTS when report-host option
|
|
# is set. If an expected slave does not appear in the list, nobody knows
|
|
# whether the slave does not connect or has started without the "report-host"
|
|
# option.
|
|
#
|
|
# Remove the "Rpl_recovery_rank" column from SHOW SLAVE HOSTS, It is not
|
|
# implemented.
|
|
#######################################################################
|
|
source include/master-slave.inc;
|
|
connect (slave2,127.0.0.1,root,,test,$SLAVE_MYPORT2,);
|
|
|
|
connection slave2;
|
|
RESET SLAVE;
|
|
--replace_result $MASTER_MYPORT MASTER_PORT
|
|
--eval CHANGE MASTER TO master_host='127.0.0.1',master_port=$MASTER_MYPORT,master_user='root'
|
|
START SLAVE IO_THREAD;
|
|
source include/wait_for_slave_io_to_start.inc;
|
|
|
|
connection master;
|
|
let $show_statement= SHOW SLAVE HOSTS;
|
|
let $field= Server_id;
|
|
# 3 is server_id of slave2.
|
|
let $condition= ='3';
|
|
source include/wait_show_condition.inc;
|
|
--replace_column 3 'SLAVE_PORT'
|
|
--replace_result $SLAVE_MYPORT SLAVE_PORT $DEFAULT_MASTER_PORT DEFAULT_PORT
|
|
SHOW SLAVE HOSTS;
|
|
|
|
connection slave2;
|
|
--source include/stop_slave_io.inc
|
|
|
|
connection master;
|
|
let $show_statement= SHOW SLAVE HOSTS;
|
|
let $field= Server_id;
|
|
# 3 is server_id of slave2.
|
|
let $condition= <> '3';
|
|
# All rows of 'SHOW SLAVE HOSTS' are not equal to 3. It mean that master has
|
|
# knew the leave of slave2 and has unregistered it.
|
|
let $wait_for_all= 1;
|
|
source include/wait_show_condition.inc;
|
|
--replace_result $SLAVE_MYPORT SLAVE_PORT
|
|
SHOW SLAVE HOSTS;
|
|
|
|
--source include/rpl_end.inc
|