diff --git a/server/modules/monitor/mariadbmon/cluster_manipulation.cc b/server/modules/monitor/mariadbmon/cluster_manipulation.cc index 8d9f419d2..3fe1c0205 100644 --- a/server/modules/monitor/mariadbmon/cluster_manipulation.cc +++ b/server/modules/monitor/mariadbmon/cluster_manipulation.cc @@ -636,7 +636,7 @@ uint32_t MariaDBMonitor::do_rejoin(const ServerArray& joinable_servers, json_t** // the case, the following is unlikely to do damage. ServerOperation demotion(joinable, true, /* treat as old master */ m_handle_event_scheduler, m_demote_sql_file); - if (joinable->demote(general, demotion)) + if (joinable->demote(general, demotion, OperationType::REJOIN)) { MXS_NOTICE("Directing standalone server '%s' to replicate from '%s'.", name, master_name); // A slave connection description is required. As this is the only connection, no name @@ -837,7 +837,7 @@ bool MariaDBMonitor::switchover_perform(SwitchoverParams& op) bool rval = false; // Step 1: Set read-only to on, flush logs, update gtid:s. - if (demotion_target->demote(op.general, op.demotion)) + if (demotion_target->demote(op.general, op.demotion, OperationType::SWITCHOVER)) { m_cluster_modified = true; bool catchup_and_promote_success = false; diff --git a/server/modules/monitor/mariadbmon/mariadbserver.cc b/server/modules/monitor/mariadbmon/mariadbserver.cc index cb4e1826a..13dcd5750 100644 --- a/server/modules/monitor/mariadbmon/mariadbserver.cc +++ b/server/modules/monitor/mariadbmon/mariadbserver.cc @@ -1582,9 +1582,10 @@ bool MariaDBServer::promote(GeneralOpData& general, ServerOperation& promotion, return success; } -bool MariaDBServer::demote(GeneralOpData& general, ServerOperation& demotion) +bool MariaDBServer::demote(GeneralOpData& general, ServerOperation& demotion, OperationType type) { mxb_assert(demotion.target == this); + mxb_assert(type == OperationType::SWITCHOVER || type == OperationType::REJOIN); json_t** const error_out = general.error_out; bool success = false; @@ -1613,7 +1614,7 @@ bool MariaDBServer::demote(GeneralOpData& general, ServerOperation& demotion) // read_only doesn't stop them from doing writes. This does not stop them from immediately // logging back in but it's better than nothing. This also stops super-user writes going // through MaxScale. - if (!kick_out_super_users(general)) + if (type == OperationType::SWITCHOVER && !kick_out_super_users(general)) { demotion_error = true; } diff --git a/server/modules/monitor/mariadbmon/mariadbserver.hh b/server/modules/monitor/mariadbmon/mariadbserver.hh index 93bb71e80..b8cba74e2 100644 --- a/server/modules/monitor/mariadbmon/mariadbserver.hh +++ b/server/modules/monitor/mariadbmon/mariadbserver.hh @@ -383,10 +383,12 @@ public: /** * Demote this server. Removes all slave connections. If server was master, sets read_only. * - * @param op Cluster operation descriptor + * @param general General operation data + * @param demotion Demotion-specific settings + * @param type Which specific operation is this part of * @return True if successful */ - bool demote(GeneralOpData& general, ServerOperation& op); + bool demote(GeneralOpData& general, ServerOperation& demotion, OperationType type); /** * Redirect the slave connection going to old master to replicate from new master. diff --git a/server/modules/monitor/mariadbmon/server_utils.hh b/server/modules/monitor/mariadbmon/server_utils.hh index 0aa37e1e9..d39cef946 100644 --- a/server/modules/monitor/mariadbmon/server_utils.hh +++ b/server/modules/monitor/mariadbmon/server_utils.hh @@ -216,7 +216,8 @@ using EventNameSet = std::unordered_set; enum class OperationType { SWITCHOVER, - FAILOVER + FAILOVER, + REJOIN }; class GeneralOpData