MXS-2576: Update states atomically in csmon

This prevents false transient states from occurring.
This commit is contained in:
Markus Mäkelä
2019-08-05 13:09:09 +03:00
parent ab429c3202
commit 9f6efef67a

View File

@ -56,7 +56,7 @@ static std::string do_query(MXS_MONITORED_SERVER* srv, const char* query)
// Returns a numeric version similar to mysql_get_server_version // Returns a numeric version similar to mysql_get_server_version
int get_cs_version(MXS_MONITORED_SERVER* srv) int get_cs_version(MXS_MONITORED_SERVER* srv)
{ {
int rval = 0; int rval = -1;
std::string prefix = "Columnstore "; std::string prefix = "Columnstore ";
std::string result = do_query(srv, "SELECT @@version_comment"); std::string result = do_query(srv, "SELECT @@version_comment");
auto pos = result.find(prefix); auto pos = result.find(prefix);
@ -106,16 +106,21 @@ void CsMonitor::update_server_status(MXS_MONITORED_SERVER* srv)
if (do_query(srv, alive_query) == "1") if (do_query(srv, alive_query) == "1")
{ {
status |= SERVER_RUNNING; auto version = get_cs_version(srv);
if (get_cs_version(srv) >= 10200) if (version >= 0)
{ {
// 1.2 supports the mcsSystemPrimary function status |= SERVER_RUNNING;
status |= do_query(srv, role_query) == "1" ? SERVER_MASTER : SERVER_SLAVE;
} if (version >= 10200)
else {
{ // 1.2 supports the mcsSystemPrimary function
status |= srv->server == m_primary ? SERVER_MASTER : SERVER_SLAVE; status |= do_query(srv, role_query) == "1" ? SERVER_MASTER : SERVER_SLAVE;
}
else
{
status |= srv->server == m_primary ? SERVER_MASTER : SERVER_SLAVE;
}
} }
} }