From 9bbbaa4c11f7457007bd77365302271c17966c65 Mon Sep 17 00:00:00 2001 From: Vlad Lesin Date: Mon, 18 Feb 2019 10:14:21 +0300 Subject: MDEV-18612: xtrabackup_copy_logfile() failed. log_t::files::read_log_seg() can return true without changing *start_lsn, what can cause an error in xtrabackup_copy_logfile() retry logic. Besides, log_t::files::read_log_seg() can set recv_sys->found_corrupt_log flag, xtrabackup_copy_logfile() now fails if the flag is set. --- extra/mariabackup/xtrabackup.cc | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/extra/mariabackup/xtrabackup.cc b/extra/mariabackup/xtrabackup.cc index 9ceb2800e73..7e563a750fb 100644 --- a/extra/mariabackup/xtrabackup.cc +++ b/extra/mariabackup/xtrabackup.cc @@ -2728,13 +2728,19 @@ static bool xtrabackup_copy_logfile(bool last = false) lsn_t lsn= start_lsn; for (int retries= 0; retries < 100; retries++) { if (log_sys.log.read_log_seg(&lsn, end_lsn) - || lsn != start_lsn) { + && lsn != start_lsn) { break; } msg("Retrying read of log at LSN=" LSN_PF "\n", lsn); my_sleep(1000); } + if (recv_sys->found_corrupt_log) { + msg("mariabackup: Error: xtrabackup_copy_logfile()" + " found corrupted log.\n"); + exit(EXIT_FAILURE); + } + start_lsn = (lsn == start_lsn) ? 0 : xtrabackup_copy_log(start_lsn, lsn, last); -- cgit v1.2.1