MXS-1775 Check disk space in MariaDBMonitor
This commit is contained in:
@ -113,9 +113,23 @@ protected:
|
||||
return atomic_load_int32(&m_shutdown) != 0;
|
||||
}
|
||||
|
||||
bool should_check_disk_space(const MXS_MONITORED_SERVER* pMonitored_server) const;
|
||||
/**
|
||||
* @brief Should the disk space status be updated.
|
||||
*
|
||||
* @param pMonitored_server The monitored server in question.
|
||||
*
|
||||
* @return True, if the disk space should be checked, false otherwise.
|
||||
*/
|
||||
bool should_update_disk_space_status(const MXS_MONITORED_SERVER* pMonitored_server) const;
|
||||
|
||||
void check_disk_space(MXS_MONITORED_SERVER* pMonitored_server);
|
||||
/**
|
||||
* @brief Update the disk space status of a server.
|
||||
*
|
||||
* After the call, the bit @c SERVER_DISK_SPACE_EXHAUSTED will be set on
|
||||
* @c pMonitored_server->pending_status if the disk space is exhausted
|
||||
* or cleared if it is not.
|
||||
*/
|
||||
void update_disk_space_status(MXS_MONITORED_SERVER* pMonitored_server);
|
||||
|
||||
static int64_t get_time_ms();
|
||||
|
||||
|
@ -2664,7 +2664,7 @@ int64_t MonitorInstance::get_time_ms()
|
||||
return t.tv_sec * 1000 + (t.tv_nsec / 1000000);
|
||||
}
|
||||
|
||||
bool MonitorInstance::should_check_disk_space(const MXS_MONITORED_SERVER* pMs) const
|
||||
bool MonitorInstance::should_update_disk_space_status(const MXS_MONITORED_SERVER* pMs) const
|
||||
{
|
||||
bool should_check = false;
|
||||
|
||||
@ -2709,7 +2709,7 @@ bool check_disk_space_exhausted(MXS_MONITORED_SERVER* pMs,
|
||||
|
||||
}
|
||||
|
||||
void MonitorInstance::check_disk_space(MXS_MONITORED_SERVER* pMs)
|
||||
void MonitorInstance::update_disk_space_status(MXS_MONITORED_SERVER* pMs)
|
||||
{
|
||||
std::map<std::string, disk::SizesAndName> info;
|
||||
|
||||
@ -2843,9 +2843,9 @@ void MonitorInstance::tick()
|
||||
monitor_clear_pending_status(pMs, SERVER_AUTH_ERROR);
|
||||
monitor_set_pending_status(pMs, SERVER_RUNNING);
|
||||
|
||||
if (should_check_disk_space(pMs))
|
||||
if (should_update_disk_space_status(pMs))
|
||||
{
|
||||
check_disk_space(pMs);
|
||||
update_disk_space_status(pMs);
|
||||
}
|
||||
|
||||
update_server_status(pMs);
|
||||
|
@ -278,7 +278,7 @@ void MariaDBMonitor::update_server_status(MXS_MONITORED_SERVER* monitored_server
|
||||
auto i = m_server_info.find(monitored_server);
|
||||
ss_dassert(i != m_server_info.end());
|
||||
|
||||
(*i).second->update_server(m_monitor);
|
||||
(*i).second->update_server(*this);
|
||||
}
|
||||
|
||||
void MariaDBMonitor::pre_loop()
|
||||
|
@ -99,6 +99,7 @@ public:
|
||||
bool manual_rejoin(SERVER* rejoin_server, json_t** output);
|
||||
|
||||
protected:
|
||||
friend class MariaDBServer;
|
||||
void update_server_status(MXS_MONITORED_SERVER* pMonitored_server);
|
||||
void pre_loop();
|
||||
void tick();
|
||||
|
@ -19,6 +19,7 @@
|
||||
#include <sstream>
|
||||
#include <maxscale/mysql_utils.h>
|
||||
#include <maxscale/thread.h>
|
||||
#include "mariadbmon.hh"
|
||||
|
||||
using std::string;
|
||||
|
||||
@ -697,13 +698,13 @@ bool MariaDBServer::run_sql_from_file(const string& path, json_t** error_out)
|
||||
return !error;
|
||||
}
|
||||
|
||||
void MariaDBServer::update_server(MXS_MONITOR* base_monitor)
|
||||
void MariaDBServer::update_server(MariaDBMonitor& monitor)
|
||||
{
|
||||
/* Monitor current node if not in maintenance. */
|
||||
bool in_maintenance = m_server_base->pending_status & SERVER_MAINT;
|
||||
if (!in_maintenance)
|
||||
{
|
||||
monitor_server(base_monitor);
|
||||
monitor_server(monitor);
|
||||
}
|
||||
/** Increase or reset the error count of the server. */
|
||||
bool is_running = m_server_base->pending_status & SERVER_RUNNING;
|
||||
@ -715,10 +716,10 @@ void MariaDBServer::update_server(MXS_MONITOR* base_monitor)
|
||||
*
|
||||
* @param base_monitor The cluster monitor.
|
||||
*/
|
||||
void MariaDBServer::monitor_server(MXS_MONITOR* base_monitor)
|
||||
void MariaDBServer::monitor_server(MariaDBMonitor& monitor)
|
||||
{
|
||||
MXS_MONITORED_SERVER* mon_srv = m_server_base;
|
||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(base_monitor, mon_srv);
|
||||
mxs_connect_result_t rval = mon_ping_or_connect_to_db(monitor.m_monitor, mon_srv);
|
||||
|
||||
MYSQL* conn = mon_srv->con; // mon_ping_or_connect_to_db() may have reallocated the MYSQL struct.
|
||||
if (mon_connection_is_ok(rval))
|
||||
@ -751,6 +752,11 @@ void MariaDBServer::monitor_server(MXS_MONITOR* base_monitor)
|
||||
return;
|
||||
}
|
||||
|
||||
if (monitor.should_update_disk_space_status(m_server_base))
|
||||
{
|
||||
monitor.update_disk_space_status(m_server_base);
|
||||
}
|
||||
|
||||
string errmsg;
|
||||
bool query_ok = false;
|
||||
/* Query different things depending on server version/type. */
|
||||
|
@ -25,6 +25,7 @@ enum print_repl_warnings_t
|
||||
};
|
||||
|
||||
class QueryResult;
|
||||
class MariaDBMonitor;
|
||||
class MariaDBServer;
|
||||
// Server pointer array
|
||||
typedef std::vector<MariaDBServer*> ServerArray;
|
||||
@ -333,7 +334,7 @@ public:
|
||||
*
|
||||
* @param base_monitor The base monitor object monitoring this server. Required for connection settings.
|
||||
*/
|
||||
void update_server(MXS_MONITOR* base_monitor);
|
||||
void update_server(MariaDBMonitor& monitor);
|
||||
|
||||
/**
|
||||
* Clear server pending status flags.
|
||||
@ -350,7 +351,7 @@ public:
|
||||
void set_status(uint64_t bits);
|
||||
|
||||
private:
|
||||
void monitor_server(MXS_MONITOR* base_monitor);
|
||||
void monitor_server(MariaDBMonitor& monitor);
|
||||
bool update_slave_status(std::string* errmsg_out = NULL);
|
||||
void update_server_info();
|
||||
};
|
||||
|
Reference in New Issue
Block a user