Don't kick out super-users when performing rejoin

When rejoining a server, preventing writes is not as essential as in switchover.
This commit is contained in:
Esa Korhonen 2019-06-19 12:25:30 +03:00
parent 3d8475f8ed
commit 39df829384
4 changed files with 11 additions and 7 deletions

View File

@ -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;

View File

@ -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;
}

View File

@ -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.

View File

@ -216,7 +216,8 @@ using EventNameSet = std::unordered_set<std::string>;
enum class OperationType
{
SWITCHOVER,
FAILOVER
FAILOVER,
REJOIN
};
class GeneralOpData