mirror of
https://github.com/MariaDB/server.git
synced 2025-01-15 19:42:28 +01:00
277968aa4c
There was two related problems: (1) Galera node that is defined as a slave to async MariaDB master at restart might do SST (state stransfer) and part of that it will copy mysql.gtid_slave_pos table. Problem is that updates on that table are not replicated on a cluster. Therefore, table from donor that is not slave is copied and joiner looses gtid position it was and start executing events from wrong position of the binlog. This incorrect position could break replication and causes node to be dropped and requiring user action. (2) Slave sql thread might start executing events before galera is ready (wsrep_ready=ON) and that could also cause node to be dropped from the cluster. In this fix we enable replication of mysql.gtid_slave_pos table on a cluster. In this way all nodes in a cluster will know gtid slave position and even after SST joiner knows correct gtid position to start. Furthermore, we wait galera to be ready before slave sql thread executes any events to prevent too early execution. Signed-off-by: Julius Goryavsky <julius.goryavsky@mariadb.com>
43 lines
1.6 KiB
C
43 lines
1.6 KiB
C
/* Copyright 2010-2023 Codership Oy <http://www.codership.com>
|
|
|
|
This program is free software; you can redistribute it and/or modify
|
|
it under the terms of the GNU General Public License as published by
|
|
the Free Software Foundation; version 2 of the License.
|
|
|
|
This program is distributed in the hope that it will be useful,
|
|
but WITHOUT ANY WARRANTY; without even the implied warranty of
|
|
MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
|
GNU General Public License for more details.
|
|
|
|
You should have received a copy of the GNU General Public License
|
|
along with this program; if not, write to the Free Software
|
|
Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335 USA
|
|
*/
|
|
|
|
//! @file declares symbols private to wsrep integration layer
|
|
|
|
#ifndef WSREP_PRIV_H
|
|
#define WSREP_PRIV_H
|
|
|
|
#include "wsrep_api.h"
|
|
#include "wsrep/server_state.hpp"
|
|
|
|
ssize_t wsrep_sst_prepare (void** msg);
|
|
wsrep_cb_status wsrep_sst_donate_cb (void* app_ctx,
|
|
void* recv_ctx,
|
|
const wsrep_buf_t* msg,
|
|
const wsrep_gtid_t* state_id,
|
|
const wsrep_buf_t* state,
|
|
bool bypass);
|
|
|
|
extern wsrep_uuid_t local_uuid;
|
|
extern wsrep_seqno_t local_seqno;
|
|
|
|
// a helper function
|
|
bool wsrep_sst_received(THD*, const wsrep_uuid_t&, wsrep_seqno_t,
|
|
const void*, size_t);
|
|
|
|
void wsrep_notify_status(enum wsrep::server_state::state status,
|
|
const wsrep::view* view= 0);
|
|
|
|
#endif /* WSREP_PRIV_H */
|