From 65d355c7d70b830006384b7da1f84b90dd465e12 Mon Sep 17 00:00:00 2001 From: Johan Wikman Date: Tue, 4 Sep 2018 12:55:07 +0300 Subject: [PATCH] MXS-2011 Enforce gtid based replication If secondary masters are defined, MASTER_USE_GTID=Slave_pos must be specified for the default master. If MASTER_USE_GTID is specified, only Slave_pos is allowed as value. --- .../modules/routing/binlogrouter/blr_slave.cc | 26 +++++++++++++++++++ 1 file changed, 26 insertions(+) diff --git a/server/modules/routing/binlogrouter/blr_slave.cc b/server/modules/routing/binlogrouter/blr_slave.cc index 233e3a533..369d5fcd6 100644 --- a/server/modules/routing/binlogrouter/blr_slave.cc +++ b/server/modules/routing/binlogrouter/blr_slave.cc @@ -4540,6 +4540,21 @@ int blr_handle_change_master(ROUTER_INSTANCE* router, return -1; } + if (index != 0) + { + string use_gtid = router->configs[0].use_mariadb10_gtid; + + if (use_gtid.empty() || (strcasecmp(use_gtid.c_str(), "slave_pos") != 0)) + { + static const char MESSAGE[] = + "Secondary masters can only be used in conjunction with GTID based replication. " + "Specify MASTER_USE_GTID=Slave_pos for the default master connection."; + mxb_assert(sizeof(MESSAGE) <= BINLOG_ERROR_MSG_LEN); + strcpy(error, MESSAGE); + return -1; + } + } + std::vector cmd_string(command, command + strlen(command) + 1); // Include the NULL /* Parse SQL command and populate the change_master struct */ @@ -4572,6 +4587,17 @@ int blr_handle_change_master(ROUTER_INSTANCE* router, return -1; } + string use_gtid = options.use_mariadb10_gtid; + + if (!use_gtid.empty() && (strcasecmp(use_gtid.c_str(), "slave_pos") != 0)) + { + static const char MESSAGE[] = + "Only MASTER_USE_GTID=Slave_pos is allowed."; + mxb_assert(sizeof(MESSAGE) <= BINLOG_ERROR_MSG_LEN); + strcpy(error, MESSAGE); + return -1; + } + ChangeMasterConfig config; if (!options.validate(router, error, &config)) {