diff options
author | Andrei Elkin <andrei.elkin@mariadb.com> | 2018-03-18 21:01:41 +0200 |
---|---|---|
committer | Sergei Golubchik <serg@mariadb.org> | 2018-06-28 15:47:03 +0200 |
commit | 8ca18294d59e4df82dacba69f9853e568ab2e0eb (patch) | |
tree | cfa9ba69b953e82ce1247aab77d13952a3633b06 /sql/sql_repl.cc | |
parent | 16c14d7ba05ed3ad6ce1f3a8e0447d6304a7e636 (diff) | |
download | mariadb-git-8ca18294d59e4df82dacba69f9853e568ab2e0eb.tar.gz |
MDEV-14014 Multi-Slave Replication Fail: bogus data in log event
MDEV-7257 made a dump thread to read from binlog concurrently with
writers as long as the read bytes are below a water-mark
(MYSQL_BIN_LOG::binlog_end_pos). However it appeared to be possible a
dump thread reader reach out for bytes past the water mark through a
feature of IO_CACHE that fills in the internal buffer and while doing
so it could read what the reader is not supposed to see (the bytes
above MYSQL_BIN_LOG::binlog_end_pos).
The issue is fixed with constraining the IO_CACHE buffer fill to respect
the watermark.
An added unit test proves reading from file is bound to an external
parameter
passed to {IO_CACHE::end_of_file} cache member.
Diffstat (limited to 'sql/sql_repl.cc')
-rw-r--r-- | sql/sql_repl.cc | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/sql/sql_repl.cc b/sql/sql_repl.cc index 569c3d2c4ef..db608de5147 100644 --- a/sql/sql_repl.cc +++ b/sql/sql_repl.cc @@ -2546,6 +2546,7 @@ static int send_events(binlog_send_info *info, IO_CACHE* log, LOG_INFO* linfo, linfo->pos= my_b_tell(log); info->last_pos= my_b_tell(log); + log->end_of_file= end_pos; while (linfo->pos < end_pos) { if (should_stop(info)) |