Cleanup server.h
Renamed, rearranged and clarified status bits. Removed unused macros.
This commit is contained in:
@ -173,23 +173,25 @@ enum
|
|||||||
};
|
};
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Status bits in the server->status member.
|
* Status bits in the SERVER->status member, which describes the general state of a server. Although the
|
||||||
*
|
* individual bits are independent, not all combinations make sense or are used. The bitfield is 64bits wide.
|
||||||
* These are a bitmap of attributes that may be applied to a server
|
|
||||||
*/
|
*/
|
||||||
#define SERVER_RUNNING 0x0001 /**<< The server is up and running */
|
// Bits used by most monitors
|
||||||
#define SERVER_MASTER 0x0002 /**<< The server is a master, i.e. can handle writes */
|
#define SERVER_RUNNING (1 << 0) /**<< The server is up and running */
|
||||||
#define SERVER_SLAVE 0x0004 /**<< The server is a slave, i.e. can handle reads */
|
#define SERVER_MAINT (1 << 1) /**<< Server is in maintenance mode */
|
||||||
#define SERVER_JOINED 0x0008 /**<< The server is joined in a Galera cluster */
|
#define SERVER_AUTH_ERROR (1 << 2) /**<< Authentication error from monitor */
|
||||||
#define SERVER_NDB 0x0010 /**<< The server is part of a MySQL cluster setup */
|
#define SERVER_MASTER (1 << 3) /**<< The server is a master, i.e. can handle writes */
|
||||||
#define SERVER_MAINT 0x0020 /**<< Server is in maintenance mode */
|
#define SERVER_SLAVE (1 << 4) /**<< The server is a slave, i.e. can handle reads */
|
||||||
#define SERVER_SLAVE_OF_EXTERNAL_MASTER 0x0040 /**<< Server is slave of a Master outside
|
// Bits used by MariaDB Monitor (mostly)
|
||||||
the provided replication topology */
|
#define SERVER_SLAVE_OF_EXT_MASTER (1 << 5) /**<< Server is slave of a non-monitored master */
|
||||||
#define SERVER_STALE_STATUS 0x0080 /**<< Server stale status, monitor didn't update it */
|
#define SERVER_RELAY_MASTER (1 << 6) /**<< Server is a relay master */
|
||||||
#define SERVER_MASTER_STICKINESS 0x0100 /**<< Server Master stickiness */
|
#define SERVER_WAS_MASTER (1 << 7) /**<< Server was a master but lost all slaves. */
|
||||||
#define SERVER_AUTH_ERROR 0x1000 /**<< Authentication error from monitor */
|
#define SERVER_WAS_SLAVE (1 << 8) /**<< Server was a slave but lost its master. */
|
||||||
#define SERVER_STALE_SLAVE 0x2000 /**<< Slave status is possible even without a master */
|
// Bits used by other monitors
|
||||||
#define SERVER_RELAY_MASTER 0x4000 /**<< Server is a relay master */
|
#define SERVER_JOINED (1 << 9) /**<< The server is joined in a Galera cluster */
|
||||||
|
#define SERVER_NDB (1 << 10) /**<< The server is part of a MySQL cluster setup */
|
||||||
|
#define SERVER_MASTER_STICKINESS (1 << 11) /**<< Server Master stickiness */
|
||||||
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the server valid and active
|
* Is the server valid and active
|
||||||
@ -216,13 +218,6 @@ enum
|
|||||||
(SERVER_RUNNING|SERVER_MASTER|SERVER_MAINT)) == \
|
(SERVER_RUNNING|SERVER_MASTER|SERVER_MAINT)) == \
|
||||||
(SERVER_RUNNING|SERVER_MASTER))
|
(SERVER_RUNNING|SERVER_MASTER))
|
||||||
|
|
||||||
/**
|
|
||||||
* Is the server valid candidate for root master. The server must be running,
|
|
||||||
* marked as master and not have maintenance bit set.
|
|
||||||
*/
|
|
||||||
#define SERVER_IS_ROOT_MASTER(server) \
|
|
||||||
(((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_MAINT)) == (SERVER_RUNNING|SERVER_MASTER))
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Is the server a slave? The server must be both running and marked as a slave
|
* Is the server a slave? The server must be both running and marked as a slave
|
||||||
* in order for the macro to return true
|
* in order for the macro to return true
|
||||||
@ -248,18 +243,15 @@ enum
|
|||||||
*/
|
*/
|
||||||
#define SERVER_IN_MAINT(server) ((server)->status & SERVER_MAINT)
|
#define SERVER_IN_MAINT(server) ((server)->status & SERVER_MAINT)
|
||||||
|
|
||||||
/** server is not master, slave or joined */
|
|
||||||
#define SERVER_NOT_IN_CLUSTER(s) (((s)->status & (SERVER_MASTER|SERVER_SLAVE|SERVER_JOINED|SERVER_NDB)) == 0)
|
|
||||||
|
|
||||||
#define SERVER_IS_IN_CLUSTER(s) (((s)->status & (SERVER_MASTER|SERVER_SLAVE|SERVER_JOINED|SERVER_NDB)) != 0)
|
#define SERVER_IS_IN_CLUSTER(s) (((s)->status & (SERVER_MASTER|SERVER_SLAVE|SERVER_JOINED|SERVER_NDB)) != 0)
|
||||||
|
|
||||||
#define SERVER_IS_RELAY_SERVER(server) \
|
#define SERVER_IS_RELAY_SERVER(server) \
|
||||||
(((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE|SERVER_MAINT)) == \
|
(((server)->status & (SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE|SERVER_MAINT)) == \
|
||||||
(SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE))
|
(SERVER_RUNNING|SERVER_MASTER|SERVER_SLAVE))
|
||||||
|
|
||||||
#define SERVER_IS_SLAVE_OF_EXTERNAL_MASTER(s) (((s)->status & \
|
#define SERVER_IS_SLAVE_OF_EXT_MASTER(s) (((s)->status & \
|
||||||
(SERVER_RUNNING|SERVER_SLAVE_OF_EXTERNAL_MASTER)) == \
|
(SERVER_RUNNING|SERVER_SLAVE_OF_EXT_MASTER)) == \
|
||||||
(SERVER_RUNNING|SERVER_SLAVE_OF_EXTERNAL_MASTER))
|
(SERVER_RUNNING|SERVER_SLAVE_OF_EXT_MASTER))
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* @brief Allocate a new server
|
* @brief Allocate a new server
|
||||||
|
|||||||
@ -688,7 +688,7 @@ server_status(const SERVER *server)
|
|||||||
{
|
{
|
||||||
strcat(status, "NDB, ");
|
strcat(status, "NDB, ");
|
||||||
}
|
}
|
||||||
if (server_status & SERVER_SLAVE_OF_EXTERNAL_MASTER)
|
if (server_status & SERVER_SLAVE_OF_EXT_MASTER)
|
||||||
{
|
{
|
||||||
strcat(status, "Slave of External Server, ");
|
strcat(status, "Slave of External Server, ");
|
||||||
}
|
}
|
||||||
@ -1103,7 +1103,7 @@ static struct
|
|||||||
{ "ndb", SERVER_NDB },
|
{ "ndb", SERVER_NDB },
|
||||||
{ "maintenance", SERVER_MAINT },
|
{ "maintenance", SERVER_MAINT },
|
||||||
{ "maint", SERVER_MAINT },
|
{ "maint", SERVER_MAINT },
|
||||||
{ "stale", SERVER_STALE_STATUS },
|
{ "stale", SERVER_WAS_MASTER },
|
||||||
{ NULL, 0 }
|
{ NULL, 0 }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|||||||
@ -139,7 +139,7 @@ MXS_MONITORED_SERVER* MariaDBMonitor::get_replication_tree()
|
|||||||
if (current->master_id > 0)
|
if (current->master_id > 0)
|
||||||
{
|
{
|
||||||
monitor_set_pending_status(ptr, SERVER_SLAVE);
|
monitor_set_pending_status(ptr, SERVER_SLAVE);
|
||||||
monitor_set_pending_status(ptr, SERVER_SLAVE_OF_EXTERNAL_MASTER);
|
monitor_set_pending_status(ptr, SERVER_SLAVE_OF_EXT_MASTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
@ -397,13 +397,13 @@ void MariaDBMonitor::assign_cycle_roles(int cycle)
|
|||||||
/** We have at least one cycle in the graph */
|
/** We have at least one cycle in the graph */
|
||||||
if (server.m_read_only)
|
if (server.m_read_only)
|
||||||
{
|
{
|
||||||
monitor_set_pending_status(mon_srv, SERVER_SLAVE | SERVER_STALE_SLAVE);
|
monitor_set_pending_status(mon_srv, SERVER_SLAVE | SERVER_WAS_SLAVE);
|
||||||
monitor_clear_pending_status(mon_srv, SERVER_MASTER);
|
monitor_clear_pending_status(mon_srv, SERVER_MASTER);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
monitor_set_pending_status(mon_srv, SERVER_MASTER);
|
monitor_set_pending_status(mon_srv, SERVER_MASTER);
|
||||||
monitor_clear_pending_status(mon_srv, SERVER_SLAVE | SERVER_STALE_SLAVE);
|
monitor_clear_pending_status(mon_srv, SERVER_SLAVE | SERVER_WAS_SLAVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if (m_detect_stale_master && cycle == 1 && mon_srv->mon_prev_status & SERVER_MASTER &&
|
else if (m_detect_stale_master && cycle == 1 && mon_srv->mon_prev_status & SERVER_MASTER &&
|
||||||
@ -422,13 +422,13 @@ void MariaDBMonitor::assign_cycle_roles(int cycle)
|
|||||||
if (server.m_read_only)
|
if (server.m_read_only)
|
||||||
{
|
{
|
||||||
/** The master is in read-only mode, set it into Slave state */
|
/** The master is in read-only mode, set it into Slave state */
|
||||||
monitor_set_pending_status(mon_srv, SERVER_SLAVE | SERVER_STALE_SLAVE);
|
monitor_set_pending_status(mon_srv, SERVER_SLAVE | SERVER_WAS_SLAVE);
|
||||||
monitor_clear_pending_status(mon_srv, SERVER_MASTER | SERVER_STALE_STATUS);
|
monitor_clear_pending_status(mon_srv, SERVER_MASTER | SERVER_WAS_MASTER);
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
monitor_set_pending_status(mon_srv, SERVER_MASTER | SERVER_STALE_STATUS);
|
monitor_set_pending_status(mon_srv, SERVER_MASTER | SERVER_WAS_MASTER);
|
||||||
monitor_clear_pending_status(mon_srv, SERVER_SLAVE | SERVER_STALE_SLAVE);
|
monitor_clear_pending_status(mon_srv, SERVER_SLAVE | SERVER_WAS_SLAVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -711,7 +711,7 @@ bool MariaDBMonitor::set_standalone_master()
|
|||||||
m_warn_set_standalone_master = false;
|
m_warn_set_standalone_master = false;
|
||||||
}
|
}
|
||||||
|
|
||||||
monitor_set_pending_status(mon_server, SERVER_MASTER | SERVER_STALE_STATUS);
|
monitor_set_pending_status(mon_server, SERVER_MASTER | SERVER_WAS_MASTER);
|
||||||
monitor_clear_pending_status(mon_server, SERVER_SLAVE);
|
monitor_clear_pending_status(mon_server, SERVER_SLAVE);
|
||||||
m_master = server;
|
m_master = server;
|
||||||
rval = true;
|
rval = true;
|
||||||
@ -815,11 +815,11 @@ void MariaDBMonitor::update_server_states(MariaDBServer& db_server, MariaDBServe
|
|||||||
(ptr->mon_prev_status & SERVER_MASTER) && !(ptr->pending_status & SERVER_MASTER) &&
|
(ptr->mon_prev_status & SERVER_MASTER) && !(ptr->pending_status & SERVER_MASTER) &&
|
||||||
!db_server.m_read_only)
|
!db_server.m_read_only)
|
||||||
{
|
{
|
||||||
db_server.set_status(SERVER_STALE_STATUS | SERVER_MASTER);
|
db_server.set_status(SERVER_WAS_MASTER | SERVER_MASTER);
|
||||||
|
|
||||||
/** Log the message only if the master server didn't have
|
/** Log the message only if the master server didn't have
|
||||||
* the stale master bit set */
|
* the stale master bit set */
|
||||||
if ((ptr->mon_prev_status & SERVER_STALE_STATUS) == 0)
|
if ((ptr->mon_prev_status & SERVER_WAS_MASTER) == 0)
|
||||||
{
|
{
|
||||||
MXS_WARNING("All slave servers under the current master server have been lost. "
|
MXS_WARNING("All slave servers under the current master server have been lost. "
|
||||||
"Assigning Stale Master status to the old master server '%s' (%s:%i).",
|
"Assigning Stale Master status to the old master server '%s' (%s:%i).",
|
||||||
@ -838,18 +838,18 @@ void MariaDBMonitor::update_server_states(MariaDBServer& db_server, MariaDBServe
|
|||||||
/** Slave with a running master, assign stale slave candidacy */
|
/** Slave with a running master, assign stale slave candidacy */
|
||||||
if ((ptr->pending_status & bits) == bits)
|
if ((ptr->pending_status & bits) == bits)
|
||||||
{
|
{
|
||||||
monitor_set_pending_status(ptr, SERVER_STALE_SLAVE);
|
monitor_set_pending_status(ptr, SERVER_WAS_SLAVE);
|
||||||
}
|
}
|
||||||
/** Server lost slave when a master is available, remove
|
/** Server lost slave when a master is available, remove
|
||||||
* stale slave candidacy */
|
* stale slave candidacy */
|
||||||
else if ((ptr->pending_status & bits) == SERVER_RUNNING)
|
else if ((ptr->pending_status & bits) == SERVER_RUNNING)
|
||||||
{
|
{
|
||||||
monitor_clear_pending_status(ptr, SERVER_STALE_SLAVE);
|
monitor_clear_pending_status(ptr, SERVER_WAS_SLAVE);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
/** If this server was a stale slave candidate, assign
|
/** If this server was a stale slave candidate, assign
|
||||||
* slave status to it */
|
* slave status to it */
|
||||||
else if (ptr->mon_prev_status & SERVER_STALE_SLAVE &&
|
else if (ptr->mon_prev_status & SERVER_WAS_SLAVE &&
|
||||||
ptr->pending_status & SERVER_RUNNING &&
|
ptr->pending_status & SERVER_RUNNING &&
|
||||||
// Master is down
|
// Master is down
|
||||||
(!root_master || !SRV_MASTER_STATUS(root_master->pending_status) ||
|
(!root_master || !SRV_MASTER_STATUS(root_master->pending_status) ||
|
||||||
|
|||||||
@ -752,7 +752,7 @@ bool MariaDBMonitor::switchover_demote_master(MariaDBServer* current_master, jso
|
|||||||
MYSQL* conn = current_master->m_server_base->con;
|
MYSQL* conn = current_master->m_server_base->con;
|
||||||
const char* query = ""; // The next query to execute. Used also for error printing.
|
const char* query = ""; // The next query to execute. Used also for error printing.
|
||||||
// The presence of an external master changes several things.
|
// The presence of an external master changes several things.
|
||||||
const bool external_master = SERVER_IS_SLAVE_OF_EXTERNAL_MASTER(current_master->m_server_base->server);
|
const bool external_master = SERVER_IS_SLAVE_OF_EXT_MASTER(current_master->m_server_base->server);
|
||||||
|
|
||||||
if (external_master)
|
if (external_master)
|
||||||
{
|
{
|
||||||
|
|||||||
@ -390,7 +390,7 @@ void MariaDBMonitor::main()
|
|||||||
if (root_master && root_master->is_master())
|
if (root_master && root_master->is_master())
|
||||||
{
|
{
|
||||||
// Clear slave and stale slave status bits from current master
|
// Clear slave and stale slave status bits from current master
|
||||||
root_master->clear_status(SERVER_SLAVE | SERVER_STALE_SLAVE);
|
root_master->clear_status(SERVER_SLAVE | SERVER_WAS_SLAVE);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Clear external slave status from master if configured to do so.
|
* Clear external slave status from master if configured to do so.
|
||||||
@ -399,7 +399,7 @@ void MariaDBMonitor::main()
|
|||||||
*/
|
*/
|
||||||
if (m_ignore_external_masters)
|
if (m_ignore_external_masters)
|
||||||
{
|
{
|
||||||
root_master->clear_status(SERVER_SLAVE_OF_EXTERNAL_MASTER);
|
root_master->clear_status(SERVER_SLAVE_OF_EXT_MASTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -509,7 +509,7 @@ void MariaDBMonitor::update_gtid_domain()
|
|||||||
|
|
||||||
void MariaDBMonitor::update_external_master()
|
void MariaDBMonitor::update_external_master()
|
||||||
{
|
{
|
||||||
if (SERVER_IS_SLAVE_OF_EXTERNAL_MASTER(m_master->m_server_base->server))
|
if (SERVER_IS_SLAVE_OF_EXT_MASTER(m_master->m_server_base->server))
|
||||||
{
|
{
|
||||||
ss_dassert(!m_master->m_slave_status.empty());
|
ss_dassert(!m_master->m_slave_status.empty());
|
||||||
if (m_master->m_slave_status[0].master_host != m_external_master_host ||
|
if (m_master->m_slave_status[0].master_host != m_external_master_host ||
|
||||||
@ -569,11 +569,11 @@ void MariaDBMonitor::log_master_changes(MariaDBServer* root_master_server, int*
|
|||||||
{
|
{
|
||||||
MXS_MONITORED_SERVER* root_master = root_master_server ? root_master_server->m_server_base : NULL;
|
MXS_MONITORED_SERVER* root_master = root_master_server ? root_master_server->m_server_base : NULL;
|
||||||
if (root_master && mon_status_changed(root_master) &&
|
if (root_master && mon_status_changed(root_master) &&
|
||||||
!(root_master->pending_status & SERVER_STALE_STATUS))
|
!(root_master->pending_status & SERVER_WAS_MASTER))
|
||||||
{
|
{
|
||||||
if ((root_master->pending_status & SERVER_MASTER) && root_master_server->is_running())
|
if ((root_master->pending_status & SERVER_MASTER) && root_master_server->is_running())
|
||||||
{
|
{
|
||||||
if (!(root_master->mon_prev_status & SERVER_STALE_STATUS) &&
|
if (!(root_master->mon_prev_status & SERVER_WAS_MASTER) &&
|
||||||
!(root_master->pending_status & SERVER_MAINT))
|
!(root_master->pending_status & SERVER_MAINT))
|
||||||
{
|
{
|
||||||
MXS_NOTICE("A Master Server is now available: %s:%i",
|
MXS_NOTICE("A Master Server is now available: %s:%i",
|
||||||
|
|||||||
@ -735,7 +735,7 @@ void MariaDBServer::monitor_server(MXS_MONITOR* base_monitor)
|
|||||||
{
|
{
|
||||||
/* The current server is not running. Clear all but the stale master bit as it is used to detect
|
/* The current server is not running. Clear all but the stale master bit as it is used to detect
|
||||||
* masters that went down but came up. */
|
* masters that went down but came up. */
|
||||||
clear_status(~SERVER_STALE_STATUS);
|
clear_status(~SERVER_WAS_MASTER);
|
||||||
auto conn_errno = mysql_errno(conn);
|
auto conn_errno = mysql_errno(conn);
|
||||||
if (conn_errno == ER_ACCESS_DENIED_ERROR || conn_errno == ER_ACCESS_DENIED_NO_PASSWORD_ERROR)
|
if (conn_errno == ER_ACCESS_DENIED_ERROR || conn_errno == ER_ACCESS_DENIED_NO_PASSWORD_ERROR)
|
||||||
{
|
{
|
||||||
@ -797,7 +797,7 @@ void MariaDBServer::monitor_server(MXS_MONITOR* base_monitor)
|
|||||||
bool MariaDBServer::update_slave_status(string* errmsg_out)
|
bool MariaDBServer::update_slave_status(string* errmsg_out)
|
||||||
{
|
{
|
||||||
/** Clear old states */
|
/** Clear old states */
|
||||||
clear_status(SERVER_SLAVE | SERVER_MASTER | SERVER_RELAY_MASTER | SERVER_SLAVE_OF_EXTERNAL_MASTER);
|
clear_status(SERVER_SLAVE | SERVER_MASTER | SERVER_RELAY_MASTER | SERVER_SLAVE_OF_EXT_MASTER);
|
||||||
|
|
||||||
bool rval = false;
|
bool rval = false;
|
||||||
if (do_show_slave_status(errmsg_out))
|
if (do_show_slave_status(errmsg_out))
|
||||||
|
|||||||
@ -289,7 +289,7 @@ void MMMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server)
|
|||||||
}
|
}
|
||||||
|
|
||||||
/* Remove addition info */
|
/* Remove addition info */
|
||||||
monitor_clear_pending_status(monitored_server, SERVER_STALE_STATUS);
|
monitor_clear_pending_status(monitored_server, SERVER_WAS_MASTER);
|
||||||
|
|
||||||
/* Set the Slave Role */
|
/* Set the Slave Role */
|
||||||
/* Set the Master role */
|
/* Set the Master role */
|
||||||
@ -349,7 +349,7 @@ void MMMonitor::tick()
|
|||||||
monitor_set_pending_status(ptr, SERVER_RUNNING);
|
monitor_set_pending_status(ptr, SERVER_RUNNING);
|
||||||
|
|
||||||
/* Set the STALE bit for this server in server struct */
|
/* Set the STALE bit for this server in server struct */
|
||||||
monitor_set_pending_status(ptr, SERVER_STALE_STATUS);
|
monitor_set_pending_status(ptr, SERVER_WAS_MASTER);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user