Multi-source replication (MDEV-253)

[MDEV-562] Multi-source: RESET SLAVE 'name' ALL creates master.info.index file instead of updating multi-master.info Created: 2012-09-28  Updated: 2012-09-28  Resolved: 2012-09-28

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: None
Fix Version/s: None

Type: Technical task Priority: Major
Reporter: Elena Stepanova Assignee: Michael Widenius
Resolution: Fixed Votes: 0
Labels: None

Attachments: File info_logs.result     File info_logs.test    
Issue Links:
Relates

 Description   

After RESET SLAVE 'name' ALL is run, master.info.index file appears in the datadir; and the name of the dropped connection isn't removed from multi-master.info, so the configuration becomes inconsistent (e.g. after restart the server attempts to start the dropped connection, doesn't find its configuration, complains, etc.)

bzr version-info

revision-id: monty@askmonty.org-20120928004505-r6ow2t0ccx5m4ead
date: 2012-09-28 03:45:05 +0300
build-date: 2012-09-28 07:02:02 +0400
revno: 3437

Test case
(the same test case and its result file are attached. The test should be okay to be put into the multi_source suite as is, but the result file needs to be checked after the bugfix, since I had to modify it manually)

cat info_logs.test

--connect (slave,127.0.0.1,root,,,$SERVER_MYPORT_3)
 
--let $datadir = `SELECT @@datadir`
 
#
# Check creation and updating of multi-source *info* logs
#
 
--echo #
--echo # List of files matching '*info*' pattern before starting any slaves
--list_files $datadir *info*
--echo # End of list
--echo #
--echo # Contents of multi-master.info
--cat_file $datadir/multi-master.info
--echo # EOF
--echo #
 
# Start replication from the first master
 
--replace_result $SERVER_MYPORT_1 MYPORT_1
eval change master 'master1' to
master_port=$SERVER_MYPORT_1,
master_host='127.0.0.1',
master_user='root';
 
start slave 'master1';
set default_master_connection = 'master1';
--source include/wait_for_slave_to_start.inc
 
# Check the files
 
--echo #
--echo # List of files matching '*info*' pattern while 'master1' is running
--list_files $datadir *info*
--echo # End of list
--echo #
--echo # Contents of multi-master.info
--cat_file $datadir/multi-master.info
--echo # EOF
--echo #
 
# Start replication from the second master
 
--replace_result $SERVER_MYPORT_2 MYPORT_2
eval change master 'master2' to
master_port=$SERVER_MYPORT_2,
master_host='127.0.0.1',
master_user='root';
 
start slave 'master2';
set default_master_connection = 'master2';
--source include/wait_for_slave_to_start.inc
 
# Check the files
 
--echo #
--echo # List of files matching '*info*' pattern
--echo #  while 'master1' and 'master2' are running
--list_files $datadir *info*
--echo # End of list
--echo #
--echo # Contents of multi-master.info
--cat_file $datadir/multi-master.info
--echo # EOF
--echo #
 
# Remove master1 configuration
 
stop slave 'master1';
set default_master_connection = 'master1';
--source include/wait_for_slave_to_stop.inc
reset slave 'master1' all;
 
# Check the files
 
--echo #
--echo # List of files matching '*info*' pattern
--echo #  after 'master1' was completely reset, 'master2' still running
--list_files $datadir *info*
--echo # End of list
--echo #
--echo # Contents of multi-master.info
--cat_file $datadir/multi-master.info
--echo # EOF
--echo #
 
# Start replication from the first master,
# now with the default empty name
 
set default_master_connection = '';
--replace_result $SERVER_MYPORT_1 MYPORT_1
eval change master to
master_port=$SERVER_MYPORT_1,
master_host='127.0.0.1',
master_user='root';
 
start slave;
--source include/wait_for_slave_to_start.inc
 
# Check the files
 
--echo #
--echo # List of files matching '*info*' pattern
--echo #   while 'master2' and '' are running
--list_files $datadir *info*
--echo # End of list
--echo #
--echo # Contents of multi-master.info
--cat_file $datadir/multi-master.info
--echo # EOF
--echo #
 
--replace_result $SERVER_MYPORT_1 MYPORT_1 $SERVER_MYPORT_2 MYPORT_2
show full slave status;
 
# Restart the slave server
 
--enable_reconnect
--append_file $MYSQLTEST_VARDIR/tmp/mysqld.3.expect
restart
EOF
--shutdown_server 60
--source include/wait_until_connected_again.inc
 
--replace_result $SERVER_MYPORT_1 MYPORT_1 $SERVER_MYPORT_2 MYPORT_2
show full slave status;
 
# Check the files
 
--echo #
--echo # List of files matching '*info*' pattern
--echo #   after slave server restart
--echo #   while 'master2' and '' are running
--list_files $datadir *info*
--echo # End of list
--echo #
--echo # Contents of multi-master.info
--cat_file $datadir/multi-master.info
--echo # EOF
--echo #
 
 
# Cleanup
 
stop slave;
--source include/wait_for_slave_to_stop.inc
 
set default_master_connection = 'master2';
stop slave;
--source include/wait_for_slave_to_stop.inc
 
--disconnect slave



 Comments   
Comment by Michael Widenius [ 2012-09-28 ]

Fixed. I have also added the info_logs.test to the test suite

Generated at Thu Feb 08 06:29:40 UTC 2024 using Jira 8.20.16#820016-sha1:9d11dbea5f4be3d4cc21f03a88dd11d8c8687422.