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)) {