MXS-1775 Move monitor loop to MonitorInstance
This commit is contained in:
parent
db30ea96f2
commit
650a739c92
@ -33,23 +33,27 @@ public:
|
||||
protected:
|
||||
MonitorInstance(MXS_MONITOR* pMonitor);
|
||||
|
||||
const std::string& script() const { return m_script; }
|
||||
uint64_t events() const { return m_events; }
|
||||
|
||||
virtual bool has_sufficient_permissions() const;
|
||||
virtual void configure(const MXS_CONFIG_PARAMETER* pParams);
|
||||
|
||||
virtual void main() = 0;
|
||||
|
||||
static void main(void* pArg);
|
||||
virtual void tick() = 0;
|
||||
|
||||
MXS_MONITOR* m_monitor; /**< The generic monitor structure. */
|
||||
int32_t m_shutdown; /**< Non-zero if the monitor should shut down. */
|
||||
std::string m_script; /**< Launchable script. */
|
||||
uint64_t m_events; /**< Enabled monitor events. */
|
||||
bool m_checked; /**< Whether server access has been checked. */
|
||||
MXS_MONITORED_SERVER* m_master; /**< Master server */
|
||||
|
||||
private:
|
||||
int32_t m_status; /**< The current status of the monitor. */
|
||||
THREAD m_thread; /**< The thread handle of the monitoring thread. */
|
||||
int32_t m_status; /**< The current status of the monitor. */
|
||||
THREAD m_thread; /**< The thread handle of the monitoring thread. */
|
||||
int32_t m_shutdown; /**< Non-zero if the monitor should shut down. */
|
||||
bool m_checked; /**< Whether server access has been checked. */
|
||||
std::string m_script; /**< Launchable script. */
|
||||
uint64_t m_events; /**< Enabled monitor events. */
|
||||
|
||||
void main();
|
||||
|
||||
static void main(void* pArg);
|
||||
};
|
||||
|
||||
/**
|
||||
|
@ -2508,11 +2508,12 @@ namespace maxscale
|
||||
|
||||
MonitorInstance::MonitorInstance(MXS_MONITOR* pMonitor)
|
||||
: m_monitor(pMonitor)
|
||||
, m_shutdown(0)
|
||||
, m_events(0)
|
||||
, m_master(NULL)
|
||||
, m_status(MXS_MONITOR_STOPPED)
|
||||
, m_thread(0)
|
||||
, m_shutdown(0)
|
||||
, m_checked(false)
|
||||
, m_events(0)
|
||||
{
|
||||
}
|
||||
|
||||
@ -2584,6 +2585,47 @@ void MonitorInstance::configure(const MXS_CONFIG_PARAMETER* pParams)
|
||||
{
|
||||
}
|
||||
|
||||
void MonitorInstance::main()
|
||||
{
|
||||
atomic_store_int32(&m_status, MXS_MONITOR_RUNNING);
|
||||
|
||||
load_server_journal(m_monitor, &m_master);
|
||||
|
||||
while (!m_shutdown)
|
||||
{
|
||||
lock_monitor_servers(m_monitor);
|
||||
servers_status_pending_to_current(m_monitor);
|
||||
|
||||
tick();
|
||||
|
||||
/**
|
||||
* After updating the status of all servers, check if monitor events
|
||||
* need to be launched.
|
||||
*/
|
||||
mon_process_state_changes(m_monitor, m_script.empty() ? NULL : m_script.c_str(), m_events);
|
||||
|
||||
mon_hangup_failed_servers(m_monitor);
|
||||
servers_status_current_to_pending(m_monitor);
|
||||
store_server_journal(m_monitor, m_master);
|
||||
release_monitor_servers(m_monitor);
|
||||
|
||||
/** Sleep until the next monitoring interval */
|
||||
unsigned int ms = 0;
|
||||
while (ms < m_monitor->interval && !m_shutdown)
|
||||
{
|
||||
if (m_monitor->server_pending_changes)
|
||||
{
|
||||
// Admin has changed something, skip sleep
|
||||
break;
|
||||
}
|
||||
thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
|
||||
ms += MXS_MON_BASE_INTERVAL_MS;
|
||||
}
|
||||
}
|
||||
|
||||
atomic_store_int32(&m_status, MXS_MONITOR_STOPPED);
|
||||
}
|
||||
|
||||
//static
|
||||
void MonitorInstance::main(void* pArg)
|
||||
{
|
||||
@ -2591,9 +2633,7 @@ void MonitorInstance::main(void* pArg)
|
||||
|
||||
if (mysql_thread_init() == 0)
|
||||
{
|
||||
atomic_store_int32(&pThis->m_status, MXS_MONITOR_RUNNING);
|
||||
static_cast<MonitorInstance*>(pArg)->main();
|
||||
atomic_store_int32(&pThis->m_status, MXS_MONITOR_STOPPED);
|
||||
pThis->main();
|
||||
|
||||
mysql_thread_end();
|
||||
}
|
||||
|
@ -114,48 +114,6 @@ void update_server_status(MXS_MONITOR *monitor, MXS_MONITORED_SERVER *database)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Main monitoring loop
|
||||
*
|
||||
* @param arg The MONITOR object for this monitor
|
||||
*/
|
||||
void AuroraMonitor::main()
|
||||
{
|
||||
load_server_journal(m_monitor, NULL);
|
||||
|
||||
while (!m_shutdown)
|
||||
{
|
||||
lock_monitor_servers(m_monitor);
|
||||
servers_status_pending_to_current(m_monitor);
|
||||
|
||||
tick();
|
||||
|
||||
/**
|
||||
* After updating the status of all servers, check if monitor events
|
||||
* need to be launched.
|
||||
*/
|
||||
mon_process_state_changes(m_monitor, m_script.empty() ? NULL : m_script.c_str(), m_events);
|
||||
|
||||
mon_hangup_failed_servers(m_monitor);
|
||||
servers_status_current_to_pending(m_monitor);
|
||||
store_server_journal(m_monitor, NULL);
|
||||
release_monitor_servers(m_monitor);
|
||||
|
||||
/** Sleep until the next monitoring interval */
|
||||
unsigned int ms = 0;
|
||||
while (ms < m_monitor->interval && !m_shutdown)
|
||||
{
|
||||
if (m_monitor->server_pending_changes)
|
||||
{
|
||||
// Admin has changed something, skip sleep
|
||||
break;
|
||||
}
|
||||
thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
|
||||
ms += MXS_MON_BASE_INTERVAL_MS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void AuroraMonitor::tick()
|
||||
{
|
||||
for (MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers; ptr; ptr = ptr->next)
|
||||
|
@ -38,6 +38,4 @@ private:
|
||||
bool has_sufficient_permissions() const;
|
||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||
void tick();
|
||||
|
||||
void main();
|
||||
};
|
||||
|
@ -204,9 +204,9 @@ json_t* GaleraMonitor::diagnostics_json() const
|
||||
json_object_set_new(rval, "use_priority", json_boolean(m_use_priority));
|
||||
json_object_set_new(rval, "set_donor_nodes", json_boolean(m_set_donor_nodes));
|
||||
|
||||
if (!m_script.empty())
|
||||
if (!script().empty())
|
||||
{
|
||||
json_object_set_new(rval, "script", json_string(m_script.c_str()));
|
||||
json_object_set_new(rval, "script", json_string(script().c_str()));
|
||||
}
|
||||
|
||||
if (m_cluster_info.c_uuid)
|
||||
@ -444,50 +444,6 @@ void GaleraMonitor::monitorDatabase(MXS_MONITORED_SERVER *database)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The entry point for the monitoring module thread
|
||||
*
|
||||
* @param arg The handle of the monitor
|
||||
*/
|
||||
void GaleraMonitor::main()
|
||||
{
|
||||
load_server_journal(m_monitor, NULL);
|
||||
|
||||
while (!m_shutdown)
|
||||
{
|
||||
lock_monitor_servers(m_monitor);
|
||||
servers_status_pending_to_current(m_monitor);
|
||||
|
||||
tick();
|
||||
|
||||
/**
|
||||
* After updating the status of all servers, check if monitor events
|
||||
* need to be launched.
|
||||
*/
|
||||
mon_process_state_changes(m_monitor, m_script.empty() ? NULL : m_script.c_str(), m_events);
|
||||
|
||||
mon_hangup_failed_servers(m_monitor);
|
||||
|
||||
servers_status_current_to_pending(m_monitor);
|
||||
|
||||
store_server_journal(m_monitor, NULL);
|
||||
release_monitor_servers(m_monitor);
|
||||
|
||||
/** Sleep until the next monitoring interval */
|
||||
unsigned int ms = 0;
|
||||
while (ms < m_monitor->interval && !m_shutdown)
|
||||
{
|
||||
if (m_monitor->server_pending_changes)
|
||||
{
|
||||
// Admin has changed something, skip sleep
|
||||
break;
|
||||
}
|
||||
thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
|
||||
ms += MXS_MON_BASE_INTERVAL_MS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GaleraMonitor::tick()
|
||||
{
|
||||
int is_cluster = 0;
|
||||
|
@ -93,6 +93,4 @@ private:
|
||||
bool has_sufficient_permissions() const;
|
||||
void configure(const MXS_CONFIG_PARAMETER* param);
|
||||
void tick();
|
||||
|
||||
void main();
|
||||
};
|
||||
|
@ -181,45 +181,6 @@ static void update_server_status(MXS_MONITOR* monitor, MXS_MONITORED_SERVER* ser
|
||||
}
|
||||
}
|
||||
|
||||
void GRMon::main()
|
||||
{
|
||||
load_server_journal(m_monitor, NULL);
|
||||
|
||||
while (!m_shutdown)
|
||||
{
|
||||
lock_monitor_servers(m_monitor);
|
||||
servers_status_pending_to_current(m_monitor);
|
||||
|
||||
tick();
|
||||
|
||||
/**
|
||||
* After updating the status of all servers, check if monitor events
|
||||
* need to be launched.
|
||||
*/
|
||||
mon_process_state_changes(m_monitor,
|
||||
m_script.empty() ? NULL : m_script.c_str(),
|
||||
m_events);
|
||||
|
||||
mon_hangup_failed_servers(m_monitor);
|
||||
servers_status_current_to_pending(m_monitor);
|
||||
store_server_journal(m_monitor, NULL);
|
||||
release_monitor_servers(m_monitor);
|
||||
|
||||
/** Sleep until the next monitoring interval */
|
||||
size_t ms = 0;
|
||||
while (ms < m_monitor->interval && !m_shutdown)
|
||||
{
|
||||
if (m_monitor->server_pending_changes)
|
||||
{
|
||||
// Admin has changed something, skip sleep
|
||||
break;
|
||||
}
|
||||
thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
|
||||
ms += MXS_MON_BASE_INTERVAL_MS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void GRMon::tick()
|
||||
{
|
||||
for (MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers; ptr; ptr = ptr->next)
|
||||
|
@ -38,6 +38,4 @@ private:
|
||||
bool has_sufficient_permissions() const;
|
||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||
void tick();
|
||||
|
||||
void main();
|
||||
};
|
||||
|
@ -433,48 +433,6 @@ monitorDatabase(MXS_MONITOR* mon, MXS_MONITORED_SERVER *database)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The entry point for the monitoring module thread
|
||||
*
|
||||
* @param arg The handle of the monitor
|
||||
*/
|
||||
void MMMonitor::main()
|
||||
{
|
||||
load_server_journal(m_monitor, &m_master);
|
||||
|
||||
while (!m_shutdown)
|
||||
{
|
||||
lock_monitor_servers(m_monitor);
|
||||
servers_status_pending_to_current(m_monitor);
|
||||
|
||||
tick();
|
||||
|
||||
/**
|
||||
* After updating the status of all servers, check if monitor events
|
||||
* need to be launched.
|
||||
*/
|
||||
mon_process_state_changes(m_monitor, m_script.empty() ? NULL : m_script.c_str(), m_events);
|
||||
|
||||
mon_hangup_failed_servers(m_monitor);
|
||||
servers_status_current_to_pending(m_monitor);
|
||||
store_server_journal(m_monitor, m_master);
|
||||
release_monitor_servers(m_monitor);
|
||||
|
||||
/** Sleep until the next monitoring interval */
|
||||
unsigned int ms = 0;
|
||||
while (ms < m_monitor->interval && !m_shutdown)
|
||||
{
|
||||
if (m_monitor->server_pending_changes)
|
||||
{
|
||||
// Admin has changed something, skip sleep
|
||||
break;
|
||||
}
|
||||
thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
|
||||
ms += MXS_MON_BASE_INTERVAL_MS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void MMMonitor::tick()
|
||||
{
|
||||
/* start from the first server in the list */
|
||||
|
@ -43,6 +43,4 @@ private:
|
||||
bool has_sufficient_permissions() const;
|
||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||
void tick();
|
||||
|
||||
void main();
|
||||
};
|
||||
|
@ -238,48 +238,6 @@ monitorDatabase(MXS_MONITORED_SERVER *database, char *defaultUser, char *default
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* The entry point for the monitoring module thread
|
||||
*
|
||||
* @param arg The handle of the monitor
|
||||
*/
|
||||
void NDBCMonitor::main()
|
||||
{
|
||||
load_server_journal(m_monitor, NULL);
|
||||
|
||||
while (!m_shutdown)
|
||||
{
|
||||
lock_monitor_servers(m_monitor);
|
||||
servers_status_pending_to_current(m_monitor);
|
||||
|
||||
tick();
|
||||
|
||||
/**
|
||||
* After updating the status of all servers, check if monitor events
|
||||
* need to be launched.
|
||||
*/
|
||||
mon_process_state_changes(m_monitor, m_script.empty() ? NULL : m_script.c_str(), m_events);
|
||||
|
||||
mon_hangup_failed_servers(m_monitor);
|
||||
servers_status_current_to_pending(m_monitor);
|
||||
store_server_journal(m_monitor, NULL);
|
||||
release_monitor_servers(m_monitor);
|
||||
|
||||
/** Sleep until the next monitoring interval */
|
||||
unsigned int ms = 0;
|
||||
while (ms < m_monitor->interval && !m_shutdown)
|
||||
{
|
||||
if (m_monitor->server_pending_changes)
|
||||
{
|
||||
// Admin has changed something, skip sleep
|
||||
break;
|
||||
}
|
||||
thread_millisleep(MXS_MON_BASE_INTERVAL_MS);
|
||||
ms += MXS_MON_BASE_INTERVAL_MS;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
void NDBCMonitor::tick()
|
||||
{
|
||||
MXS_MONITORED_SERVER *ptr = m_monitor->monitored_servers;
|
||||
|
@ -40,6 +40,4 @@ private:
|
||||
bool has_sufficient_permissions() const;
|
||||
void configure(const MXS_CONFIG_PARAMETER* params);
|
||||
void tick();
|
||||
|
||||
void main();
|
||||
};
|
||||
|
Loading…
x
Reference in New Issue
Block a user