MXS-1775 Introduce MonitorInstance::has_sufficient_permissions()

With this function in place, it is now possible to move the thread
starting to MonitorInstance.
This commit is contained in:
Johan Wikman
2018-05-16 12:30:37 +03:00
parent 3606a5ed1c
commit adb7f156d6
12 changed files with 52 additions and 9 deletions

View File

@ -32,6 +32,7 @@ public:
protected: protected:
MonitorInstance(MXS_MONITOR* pMonitor); MonitorInstance(MXS_MONITOR* pMonitor);
virtual bool has_sufficient_permissions() const;
virtual void configure(const MXS_CONFIG_PARAMETER* pParams); virtual void configure(const MXS_CONFIG_PARAMETER* pParams);
virtual void main() = 0; virtual void main() = 0;

View File

@ -2535,6 +2535,11 @@ void MonitorInstance::stop()
m_script = NULL; m_script = NULL;
} }
bool MonitorInstance::has_sufficient_permissions() const
{
return true;
}
void MonitorInstance::configure(const MXS_CONFIG_PARAMETER* pParams) void MonitorInstance::configure(const MXS_CONFIG_PARAMETER* pParams)
{ {
} }

View File

@ -191,9 +191,7 @@ bool AuroraMonitor::start(const MXS_CONFIG_PARAMETER *params)
if (!m_checked) if (!m_checked)
{ {
if (!check_monitor_permissions(m_monitor, "SELECT @@aurora_server_id, server_id FROM " if (!has_sufficient_permissions())
"information_schema.replica_host_status "
"WHERE session_id = 'MASTER_SESSION_ID'"))
{ {
MXS_ERROR("Failed to start monitor. See earlier errors for more information."); MXS_ERROR("Failed to start monitor. See earlier errors for more information.");
} }
@ -222,6 +220,13 @@ bool AuroraMonitor::start(const MXS_CONFIG_PARAMETER *params)
return started; return started;
} }
bool AuroraMonitor::has_sufficient_permissions() const
{
return check_monitor_permissions(m_monitor, "SELECT @@aurora_server_id, server_id FROM "
"information_schema.replica_host_status "
"WHERE session_id = 'MASTER_SESSION_ID'");
}
void AuroraMonitor::configure(const MXS_CONFIG_PARAMETER* params) void AuroraMonitor::configure(const MXS_CONFIG_PARAMETER* params)
{ {
m_script = config_copy_string(params, "script"); m_script = config_copy_string(params, "script");

View File

@ -36,6 +36,7 @@ private:
AuroraMonitor(MXS_MONITOR* monitor); AuroraMonitor(MXS_MONITOR* monitor);
~AuroraMonitor(); ~AuroraMonitor();
bool has_sufficient_permissions() const;
void configure(const MXS_CONFIG_PARAMETER* params); void configure(const MXS_CONFIG_PARAMETER* params);
void main(); void main();

View File

@ -165,7 +165,7 @@ bool GaleraMonitor::start(const MXS_CONFIG_PARAMETER *params)
if (!m_checked) if (!m_checked)
{ {
if (!check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'wsrep_local_state'")) if (!has_sufficient_permissions())
{ {
MXS_ERROR("Failed to start monitor. See earlier errors for more information."); MXS_ERROR("Failed to start monitor. See earlier errors for more information.");
} }
@ -194,6 +194,11 @@ bool GaleraMonitor::start(const MXS_CONFIG_PARAMETER *params)
return started; return started;
} }
bool GaleraMonitor::has_sufficient_permissions() const
{
return check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'wsrep_local_state'");
}
void GaleraMonitor::configure(const MXS_CONFIG_PARAMETER* params) void GaleraMonitor::configure(const MXS_CONFIG_PARAMETER* params)
{ {
m_disableMasterFailback = config_get_bool(params, "disable_master_failback"); m_disableMasterFailback = config_get_bool(params, "disable_master_failback");

View File

@ -81,8 +81,6 @@ private:
GaleraMonitor(MXS_MONITOR* monitor); GaleraMonitor(MXS_MONITOR* monitor);
~GaleraMonitor(); ~GaleraMonitor();
void configure(const MXS_CONFIG_PARAMETER* param);
bool detect_cluster_size(const int n_nodes, bool detect_cluster_size(const int n_nodes,
const char *candidate_uuid, const char *candidate_uuid,
const int candidate_size); const int candidate_size);
@ -93,5 +91,8 @@ private:
void set_galera_cluster(); void set_galera_cluster();
void update_sst_donor_nodes(int is_cluster); void update_sst_donor_nodes(int is_cluster);
bool has_sufficient_permissions() const;
void configure(const MXS_CONFIG_PARAMETER* param);
void main(); void main();
}; };

View File

@ -56,7 +56,14 @@ bool GRMon::start(const MXS_CONFIG_PARAMETER* params)
if (!m_checked) if (!m_checked)
{ {
m_checked = true; if (!has_sufficient_permissions())
{
MXS_ERROR("Failed to start monitor. See earlier errors for more information.");
}
else
{
m_checked = true;
}
} }
if (m_checked) if (m_checked)
@ -76,6 +83,11 @@ bool GRMon::start(const MXS_CONFIG_PARAMETER* params)
return started; return started;
} }
bool GRMon::has_sufficient_permissions() const
{
return true;
}
void GRMon::configure(const MXS_CONFIG_PARAMETER* params) void GRMon::configure(const MXS_CONFIG_PARAMETER* params)
{ {
m_script = config_get_string(params, "script"); m_script = config_get_string(params, "script");

View File

@ -39,6 +39,7 @@ private:
GRMon(MXS_MONITOR* monitor); GRMon(MXS_MONITOR* monitor);
~GRMon(); ~GRMon();
bool has_sufficient_permissions() const;
void configure(const MXS_CONFIG_PARAMETER* params); void configure(const MXS_CONFIG_PARAMETER* params);
void main(); void main();

View File

@ -127,7 +127,7 @@ bool MMMonitor::start(const MXS_CONFIG_PARAMETER *params)
if (!m_checked) if (!m_checked)
{ {
if (!check_monitor_permissions(m_monitor, "SHOW SLAVE STATUS")) if (!has_sufficient_permissions())
{ {
MXS_ERROR("Failed to start monitor. See earlier errors for more information."); MXS_ERROR("Failed to start monitor. See earlier errors for more information.");
} }
@ -156,6 +156,11 @@ bool MMMonitor::start(const MXS_CONFIG_PARAMETER *params)
return started; return started;
} }
bool MMMonitor::has_sufficient_permissions() const
{
return check_monitor_permissions(m_monitor, "SHOW SLAVE STATUS");
}
void MMMonitor::configure(const MXS_CONFIG_PARAMETER* params) void MMMonitor::configure(const MXS_CONFIG_PARAMETER* params)
{ {
m_script = config_copy_string(params, "script"); m_script = config_copy_string(params, "script");

View File

@ -42,6 +42,7 @@ private:
MXS_MONITORED_SERVER *get_current_master(); MXS_MONITORED_SERVER *get_current_master();
bool has_sufficient_permissions() const;
void configure(const MXS_CONFIG_PARAMETER* params); void configure(const MXS_CONFIG_PARAMETER* params);
void main(); void main();

View File

@ -111,7 +111,7 @@ bool NDBCMonitor::start(const MXS_CONFIG_PARAMETER *params)
if (!m_checked) if (!m_checked)
{ {
if (!check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'Ndb_number_of_ready_data_nodes'")) if (!has_sufficient_permissions())
{ {
MXS_ERROR("Failed to start monitor. See earlier errors for more information."); MXS_ERROR("Failed to start monitor. See earlier errors for more information.");
} }
@ -140,6 +140,11 @@ bool NDBCMonitor::start(const MXS_CONFIG_PARAMETER *params)
return started; return started;
} }
bool NDBCMonitor::has_sufficient_permissions() const
{
return check_monitor_permissions(m_monitor, "SHOW STATUS LIKE 'Ndb_number_of_ready_data_nodes'");
}
void NDBCMonitor::configure(const MXS_CONFIG_PARAMETER* params) void NDBCMonitor::configure(const MXS_CONFIG_PARAMETER* params)
{ {
m_script = config_copy_string(params, "script"); m_script = config_copy_string(params, "script");

View File

@ -39,6 +39,7 @@ private:
NDBCMonitor(MXS_MONITOR* monitor); NDBCMonitor(MXS_MONITOR* monitor);
~NDBCMonitor(); ~NDBCMonitor();
bool has_sufficient_permissions() const;
void configure(const MXS_CONFIG_PARAMETER* params); void configure(const MXS_CONFIG_PARAMETER* params);
void main(); void main();