summaryrefslogtreecommitdiff
path: root/sql/rpl_parallel.cc
diff options
context:
space:
mode:
authorunknown <knielsen@knielsen-hq.org>2014-04-09 14:42:46 +0200
committerunknown <knielsen@knielsen-hq.org>2014-04-09 14:42:46 +0200
commit2480b60bb7f2df072571ca19e35a44c92465d67e (patch)
tree26b5d27b7f27852d404654899db43ac2c59c2135 /sql/rpl_parallel.cc
parentb1a1a79a69c0cdb21334002693d05237a02ede98 (diff)
downloadmariadb-git-2480b60bb7f2df072571ca19e35a44c92465d67e.tar.gz
MDEV-5938: Exec_master_log_pos not updated at log rotate in parallel replication
The code did not correctly handle the update of position for Rotate events in the binlog/relaylog when using parallel replication.
Diffstat (limited to 'sql/rpl_parallel.cc')
-rw-r--r--sql/rpl_parallel.cc10
1 files changed, 7 insertions, 3 deletions
diff --git a/sql/rpl_parallel.cc b/sql/rpl_parallel.cc
index 9c4c819c022..5c902249914 100644
--- a/sql/rpl_parallel.cc
+++ b/sql/rpl_parallel.cc
@@ -1495,7 +1495,6 @@ rpl_parallel::do_event(rpl_group_info *serial_rgi, Log_event *ev,
}
else if (!is_group_event)
{
- my_off_t log_pos;
int err;
bool tmp;
/*
@@ -1509,7 +1508,13 @@ rpl_parallel::do_event(rpl_group_info *serial_rgi, Log_event *ev,
serial_rgi->is_parallel_exec= true;
err= rpt_handle_event(qev, NULL);
serial_rgi->is_parallel_exec= tmp;
- log_pos= ev->log_pos;
+ if (ev->is_relay_log_event())
+ qev->future_event_master_log_pos= 0;
+ else if (typ == ROTATE_EVENT)
+ qev->future_event_master_log_pos=
+ (static_cast<Rotate_log_event *>(ev))->pos;
+ else
+ qev->future_event_master_log_pos= ev->log_pos;
delete_or_keep_event_post_apply(serial_rgi, typ, ev);
if (err)
@@ -1532,7 +1537,6 @@ rpl_parallel::do_event(rpl_group_info *serial_rgi, Log_event *ev,
the current point.
*/
qev->ev= NULL;
- qev->future_event_master_log_pos= log_pos;
}
else
{