MXS-2576: Update states atomically in csmon
This prevents false transient states from occurring.
This commit is contained in:
@ -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;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user