MXS-1865 Combine server version and type
Binlog server is now handled better.
This commit is contained in:
@ -371,7 +371,7 @@ void MariaDBMonitor::main_loop()
|
||||
assign_relay_master(**iter);
|
||||
|
||||
/* Remove SLAVE status if this server is a Binlog Server relay */
|
||||
if ((*iter)->m_binlog_relay)
|
||||
if ((*iter)->m_version == MariaDBServer::version::BINLOG_ROUTER)
|
||||
{
|
||||
monitor_clear_pending_status((*iter)->m_server_base, SERVER_SLAVE);
|
||||
}
|
||||
@ -546,7 +546,8 @@ void MariaDBMonitor::measure_replication_lag(MariaDBServer* root_master)
|
||||
{
|
||||
if (ptr->server->node_id != mon_root_master->server->node_id &&
|
||||
(server->is_slave() || SERVER_IS_RELAY_SERVER(ptr->server)) &&
|
||||
!server->m_binlog_relay) // No select lag for Binlog Server
|
||||
(server->m_version == MariaDBServer::version::MARIADB_MYSQL_55 ||
|
||||
server->m_version == MariaDBServer::version::MARIADB_100)) // No select lag for Binlog Server
|
||||
{
|
||||
set_slave_heartbeat(server);
|
||||
}
|
||||
|
@ -40,11 +40,10 @@ SlaveStatus::SlaveStatus()
|
||||
MariaDBServer::MariaDBServer(MXS_MONITORED_SERVER* monitored_server)
|
||||
: m_server_base(monitored_server)
|
||||
, m_report_version_error(true)
|
||||
, m_version(MARIADB_VERSION_UNKNOWN)
|
||||
, m_version(version::UNKNOWN)
|
||||
, m_server_id(SERVER_ID_UNKNOWN)
|
||||
, m_group(0)
|
||||
, m_read_only(false)
|
||||
, m_binlog_relay(false)
|
||||
, m_n_slaves_running(0)
|
||||
, m_n_slave_heartbeats(0)
|
||||
, m_heartbeat_period(0)
|
||||
@ -85,13 +84,16 @@ bool MariaDBServer::do_show_slave_status()
|
||||
{
|
||||
unsigned int columns = 0;
|
||||
string query;
|
||||
bool all_slaves_status = false;
|
||||
switch (m_version)
|
||||
{
|
||||
case MARIADB_VERSION_100:
|
||||
case version::MARIADB_100:
|
||||
case version::BINLOG_ROUTER:
|
||||
columns = 42;
|
||||
all_slaves_status = true;
|
||||
query = "SHOW ALL SLAVES STATUS";
|
||||
break;
|
||||
case MARIADB_VERSION_55:
|
||||
case version::MARIADB_MYSQL_55:
|
||||
columns = 40;
|
||||
query = "SHOW SLAVE STATUS";
|
||||
break;
|
||||
@ -133,7 +135,7 @@ bool MariaDBServer::do_show_slave_status()
|
||||
|
||||
int64_t i_connection_name = -1, i_slave_rec_hbs = -1, i_slave_hb_period = -1;
|
||||
int64_t i_using_gtid = -1, i_gtid_io_pos = -1;
|
||||
if (m_version == MARIADB_VERSION_100)
|
||||
if (all_slaves_status)
|
||||
{
|
||||
i_connection_name = result->get_col_index("Connection_name");
|
||||
i_slave_rec_hbs = result->get_col_index("Slave_received_heartbeats");
|
||||
@ -173,7 +175,7 @@ bool MariaDBServer::do_show_slave_status()
|
||||
}
|
||||
}
|
||||
|
||||
if (m_version == MARIADB_VERSION_100)
|
||||
if (all_slaves_status)
|
||||
{
|
||||
sstatus.name = result->get_string(i_connection_name);
|
||||
auto heartbeats = result->get_uint(i_slave_rec_hbs);
|
||||
@ -261,7 +263,7 @@ void MariaDBServer::read_server_variables()
|
||||
MXS_MONITORED_SERVER* database = m_server_base;
|
||||
string query = "SELECT @@global.server_id, @@read_only;";
|
||||
int columns = 2;
|
||||
if (m_version == MARIADB_VERSION_100)
|
||||
if (m_version == version::MARIADB_100)
|
||||
{
|
||||
query.erase(query.end() - 1);
|
||||
query += ", @@global.gtid_domain_id;";
|
||||
@ -721,25 +723,31 @@ void MariaDBServer::monitor_server(MXS_MONITOR* base_monitor)
|
||||
return;
|
||||
}
|
||||
|
||||
/* Query a few settings. */
|
||||
/* Query different things depending on server version/type. */
|
||||
switch (m_version)
|
||||
{
|
||||
case version::MARIADB_MYSQL_55:
|
||||
read_server_variables();
|
||||
/* If gtid domain exists and server is 10.0, update gtid:s */
|
||||
if (m_version == MariaDBServer::MARIADB_VERSION_100)
|
||||
{
|
||||
update_gtids();
|
||||
}
|
||||
|
||||
/* Check for valid server version */
|
||||
if (m_version == MariaDBServer::MARIADB_VERSION_100 || m_version == MariaDBServer::MARIADB_VERSION_55)
|
||||
{
|
||||
update_slave_status();
|
||||
}
|
||||
else if (m_report_version_error)
|
||||
break;
|
||||
case version::MARIADB_100:
|
||||
read_server_variables();
|
||||
update_gtids();
|
||||
update_slave_status();
|
||||
break;
|
||||
case version::BINLOG_ROUTER:
|
||||
// TODO: Add special version of server variable query.
|
||||
update_slave_status();
|
||||
break;
|
||||
default:
|
||||
if (m_report_version_error)
|
||||
{
|
||||
MXS_ERROR("MariaDB/MySQL version of server '%s' is less than 5.5, which is not supported. "
|
||||
"The server is ignored by the monitor.", name());
|
||||
m_report_version_error = false;
|
||||
}
|
||||
break;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
@ -771,36 +779,34 @@ void MariaDBServer::update_slave_status()
|
||||
*/
|
||||
void MariaDBServer::update_server_info()
|
||||
{
|
||||
m_version = version::UNKNOWN;
|
||||
auto conn = m_server_base->con;
|
||||
auto srv = m_server_base->server;
|
||||
|
||||
/* Get server version string, also get/set numeric representation. This function does not query the
|
||||
* server, since the data was obtained when connecting. */
|
||||
mxs_mysql_set_server_version(conn, srv);
|
||||
|
||||
// Check whether this server is a MaxScale Binlog Server.
|
||||
MYSQL_RES *result;
|
||||
if (mxs_mysql_query(conn, "SELECT @@maxscale_version") == 0 &&
|
||||
(result = mysql_store_result(conn)) != NULL)
|
||||
{
|
||||
m_binlog_relay = true;
|
||||
m_version = version::BINLOG_ROUTER;
|
||||
mysql_free_result(result);
|
||||
}
|
||||
else
|
||||
{
|
||||
m_binlog_relay = false;
|
||||
}
|
||||
|
||||
/* Get server version string, also get/set numeric representation. These functions do not actually
|
||||
* query the server, since the data was obtained when connecting. */
|
||||
mxs_mysql_set_server_version(conn, m_server_base->server);
|
||||
/* Set monitor version enum. */
|
||||
uint64_t version_num = server_get_version(m_server_base->server);
|
||||
if (version_num >= 100000)
|
||||
/* Not a binlog server, check version number. */
|
||||
uint64_t version_num = server_get_version(srv);
|
||||
if (version_num >= 100000 && srv->server_type == SERVER_TYPE_MARIADB)
|
||||
{
|
||||
m_version = MariaDBServer::MARIADB_VERSION_100;
|
||||
m_version = version::MARIADB_100;
|
||||
}
|
||||
else if (version_num >= 5 * 10000 + 5 * 100)
|
||||
{
|
||||
m_version = MariaDBServer::MARIADB_VERSION_55;
|
||||
m_version = version::MARIADB_MYSQL_55;
|
||||
}
|
||||
else
|
||||
{
|
||||
m_version = MariaDBServer::MARIADB_VERSION_UNKNOWN;
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -76,23 +76,25 @@ class MariaDBServer
|
||||
{
|
||||
public:
|
||||
typedef std::vector<SlaveStatus> SlaveStatusArray;
|
||||
enum mariadb_version
|
||||
enum class version
|
||||
{
|
||||
MARIADB_VERSION_UNKNOWN, // Anything older than 5.5. These are no longer supported by the monitor.
|
||||
MARIADB_VERSION_55, // 5.5, oldest still supported release. Not all monitor features work.
|
||||
MARIADB_VERSION_100 // 10.0 and greater. In practice though, 10.0.2 or greater is assumed.
|
||||
UNKNOWN, /* Anything older than 5.5. These are no longer supported by the monitor. */
|
||||
MARIADB_MYSQL_55, /* MariaDB 5.5 series or MySQL 5.5 and later. Does not have gtid (on MariaDB) so
|
||||
* all gtid-related features (failover etc.) are disabled. */
|
||||
MARIADB_100, /* MariaDB 10.0 and greater. In practice though, 10.0.2 or greater is assumed.
|
||||
* All monitor features are on. */
|
||||
BINLOG_ROUTER /* MaxScale binlog server. Requires special handling. */
|
||||
};
|
||||
|
||||
MXS_MONITORED_SERVER* m_server_base; /**< Monitored server base class/struct. MariaDBServer does not
|
||||
* own the struct, it is not freed (or connection closed) when
|
||||
* a MariaDBServer is destroyed. Can be const on gcc 4.8 */
|
||||
bool m_report_version_error; /**< Report version error for this server. */
|
||||
mariadb_version m_version; /**< Server version */
|
||||
version m_version; /**< Server version/type. */
|
||||
int64_t m_server_id; /**< Value of @@server_id. Valid values are 32bit unsigned. */
|
||||
int m_group; /**< Multi-master group where this server belongs,
|
||||
* 0 for servers not in groups */
|
||||
bool m_read_only; /**< Value of @@read_only */
|
||||
bool m_binlog_relay; /** Server is a Binlog Relay */
|
||||
size_t m_n_slaves_running; /**< Number of running slave connections */
|
||||
int m_n_slave_heartbeats; /**< Number of received heartbeats */
|
||||
double m_heartbeat_period; /**< The time interval between heartbeats */
|
||||
|
Reference in New Issue
Block a user