mirror of
https://github.com/MariaDB/server.git
synced 2025-07-29 05:21:33 +03:00
MDEV-8134: The relay-log is not flushed after the slave-relay-log.999999 showed
Problem: ======== Auto purge of relaylogs stops when relay-log-file is 'slave-relay-log.999999' and slave_parallel_threads is enabled. Analysis: ========= The problem is that in Relay_log_info::inc_group_relay_log_pos() function, when two log names are compared via strcmp() function, it gives correct result, when log name sequence numbers are of same digits(6 digits), But when the number goes to 7 digits, a 999999 compares greater than 1000000, which is wrong, hence the bug. Fix: ==== Extract the numeric extension part of the file name, convert it into unsigned long and compare. Thanks to David Zhao for the contribution.
This commit is contained in:
@ -4,6 +4,7 @@
|
||||
#include "rpl_mi.h"
|
||||
#include "sql_parse.h"
|
||||
#include "debug_sync.h"
|
||||
#include "sql_repl.h"
|
||||
|
||||
/*
|
||||
Code for optional parallel execution of replicated events on the slave.
|
||||
@ -82,7 +83,7 @@ handle_queued_pos_update(THD *thd, rpl_parallel_thread::queued_event *qev)
|
||||
return;
|
||||
|
||||
mysql_mutex_lock(&rli->data_lock);
|
||||
cmp= strcmp(rli->group_relay_log_name, qev->event_relay_log_name);
|
||||
cmp= compare_log_name(rli->group_relay_log_name, qev->event_relay_log_name);
|
||||
if (cmp < 0)
|
||||
{
|
||||
rli->group_relay_log_pos= qev->future_event_relay_log_pos;
|
||||
@ -91,7 +92,7 @@ handle_queued_pos_update(THD *thd, rpl_parallel_thread::queued_event *qev)
|
||||
rli->group_relay_log_pos < qev->future_event_relay_log_pos)
|
||||
rli->group_relay_log_pos= qev->future_event_relay_log_pos;
|
||||
|
||||
cmp= strcmp(rli->group_master_log_name, qev->future_event_master_log_name);
|
||||
cmp= compare_log_name(rli->group_master_log_name, qev->future_event_master_log_name);
|
||||
if (cmp < 0)
|
||||
{
|
||||
strcpy(rli->group_master_log_name, qev->future_event_master_log_name);
|
||||
|
Reference in New Issue
Block a user