diff options
author | Brandon Nesterenko <brandon.nesterenko@mariadb.com> | 2021-10-13 07:31:32 -0600 |
---|---|---|
committer | Brandon Nesterenko <brandon.nesterenko@mariadb.com> | 2021-10-18 10:43:51 -0600 |
commit | 2291f8ef73489fb8ed79768484df1ee4db3583a7 (patch) | |
tree | 2243d2e502e7bc615ae29e60fae6c47e563ec324 /sql/rpl_mi.h | |
parent | 5f63f5dc60a48105d739f606cbf0a575925029d1 (diff) | |
download | mariadb-git-2291f8ef73489fb8ed79768484df1ee4db3583a7.tar.gz |
MDEV-25284: Assertion `info->type == READ_CACHE || info->type == WRITE_CACHE' failedbb-10.2-MDEV-25284
Problem:
========
This patch addresses two issues.
First, if a CHANGE MASTER command is issued and an error happens
while locating the replica’s relay logs, the logs can be put into an
invalid state where future updates fail and future CHANGE MASTER
calls crash the server. More specifically, right before a replica
purges the relay logs (part of the `CHANGE MASTER TO` logic), the
relay log is temporarily closed with state LOG_TO_BE_OPENED. If the
server errors in-between the temporary log closure and purge, i.e.
during the function find_log_pos, the log should be closed.
MDEV-25284 reveals the log is not properly closed.
Second, upon issuing a RESET SLAVE ALL command, a slave’s GTID
filters are not cleared (DO_DOMAIN_IDS, IGNORE_DOMIAN_IDS,
IGNORE_SERVER_IDS). MySQL had a similar bug report, Bug #18816897,
which fixed this issue to clear IGNORE_SERVER_IDS after issuing
RESET SLAVE ALL in version 5.7.
Solution:
=========
To fix the first problem, the CHANGE MASTER error handling logic was
extended to transition the relay log state to LOG_CLOSED from
LOG_TO_BE_OPENED.
To fix the second problem, the RESET SLAVE ALL logic is extended to
clear the domain_id filter and ignore_server_ids.
Reviewed By:
============
Andrei Elkin <andrei.elkin@mariadb.com>
Diffstat (limited to 'sql/rpl_mi.h')
-rw-r--r-- | sql/rpl_mi.h | 5 |
1 files changed, 5 insertions, 0 deletions
diff --git a/sql/rpl_mi.h b/sql/rpl_mi.h index 12574285de0..e80c14fc340 100644 --- a/sql/rpl_mi.h +++ b/sql/rpl_mi.h @@ -79,6 +79,11 @@ public: void reset_filter(); /* + Clear do_ids and ignore_ids to disable domain id filtering + */ + void clear_ids(); + + /* Update the do/ignore domain id filter lists. @param do_ids [IN] domain ids to be kept |