summaryrefslogtreecommitdiff
path: root/sql/sql_repl.cc
diff options
context:
space:
mode:
authorAndrei Elkin <andrei.elkin@mariadb.com>2018-03-18 21:01:41 +0200
committerSergei Golubchik <serg@mariadb.org>2018-06-28 15:47:03 +0200
commit8ca18294d59e4df82dacba69f9853e568ab2e0eb (patch)
treecfa9ba69b953e82ce1247aab77d13952a3633b06 /sql/sql_repl.cc
parent16c14d7ba05ed3ad6ce1f3a8e0447d6304a7e636 (diff)
downloadmariadb-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.cc1
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))