[MDEV-4352] multi_source replication: conflict between rli->slave_patternload_file files of different connections Created: 2013-04-02  Updated: 2013-05-27  Resolved: 2013-05-03

Status: Closed
Project: MariaDB Server
Component/s: None
Affects Version/s: 10.0.1
Fix Version/s: 10.0.2, 10.0.3

Type: Bug Priority: Major
Reporter: Kristian Nielsen Assignee: Michael Widenius
Resolution: Fixed Votes: 0
Labels: multisource


 Description   

When using multiple connections to different masters in a slave server, there
is nothing done to guard against conflicts on the file name constructed in
rli->slave_patternload_file.

I found this from random failures in a test case where I start two slave
connections at once:

CHANGE MASTER 'slave1' TO master_port=$SERVER_MYPORT_1,
    master_host='127.0.0.1', master_user='root';
CHANGE MASTER 'slave2' TO master_port=$SERVER_MYPORT_2,
     master_host='127.0.0.1', master_user='root';
start all slaves;

This results sometimes in this error:

130329 21:18:13 [ERROR] Master 'slave1': Slave SQL: Unable to use slave's temporary directory /private/var/lib/buildslave/maria-slave/labrador/build/mysql-test/var/tmp/mysqld.3 - Can't create/write to file '/private/var/lib/buildslave/maria-slave/labrador/build/mysql-test/var/tmp/mysqld.3/SQL_LOAD-' (Errcode: 17 "File exists"), Error_code: 1

This happens because both SQL threads call
check_temp_dir(rli->slave_patternload_file) on the same file name created in
init_relay_log_info().

I think there are more problems with this. For example, it looks like
cleanup_load_tmpdir() could easily wrongly remove files from a different
connection. There seems nothing done to handle temporary files correctly
between different connections to multiple masters.

This seems like something that could easily cause silent (or not so silent)
corruption of replication.



 Comments   
Comment by Elena Stepanova [ 2013-04-02 ]

See also MDEV-4033

Comment by Michael Widenius [ 2013-05-02 ]

The issue with check_temp_dir() is already fixed in 10.0.2
I will look at fixing cleanup_load_tmpdir() for 10.0.3

Comment by Michael Widenius [ 2013-05-02 ]

There was also a bug that two parallel LOAD DATA statements could use the same temporary file name.
I fixed this by prefixing the temporary file name with the connection name.

Comment by Michael Widenius [ 2013-05-03 ]

Pushed into 10.0-base tree

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