MXS-2271 Monitor config name and instance name are parameters of createInstance()

Also adds/moves some comments from previous entrypoints. Name and module
are now constant fields.
This commit is contained in:
Esa Korhonen 2019-01-21 15:51:53 +02:00
parent de970e579e
commit f6cec41dd8
19 changed files with 75 additions and 63 deletions

View File

@ -51,9 +51,11 @@ struct MXS_MONITOR_API
* If the function fails, MaxScale will not start. The returned object must inherit from
* the abstract base monitor class and implement the missing methods.
*
* @param name Configuration name of the monitor
* @param module Module name of the monitor
* @return Monitor object
*/
Monitor* (* createInstance)();
Monitor* (* createInstance)(const std::string& name, const std::string& module);
};
/**
@ -164,7 +166,7 @@ inline mxb::intrusive_slist_iterator<MXS_MONITORED_SERVER> end(MXS_MONITORED_SER
class Monitor
{
public:
Monitor();
Monitor(const std::string& name, const std::string& module);
virtual ~Monitor();
virtual bool configure(const MXS_CONFIG_PARAMETER* params) = 0;
@ -198,8 +200,8 @@ public:
*/
virtual json_t* diagnostics_json() const = 0;
char* name; /**< Monitor instance name */
std::string module_name; /**< Name of the monitor module */
const char* const name; /**< Monitor instance name. TODO: change to string */
const std::string module_name; /**< Name of the monitor module */
Monitor* next; /**< Next monitor in the linked list */
mutable std::mutex lock;
@ -429,6 +431,9 @@ void monitor_debug_wait();
namespace maxscale
{
/**
* An abstract class which helps implement a monitor based on a maxbase::Worker thread.
*/
class MonitorWorker : public Monitor
, protected maxbase::Worker
{
@ -525,7 +530,7 @@ public:
static int64_t get_time_ms();
protected:
MonitorWorker();
MonitorWorker(const std::string& name, const std::string& module);
/**
* @brief Should the monitor shut down?
@ -649,7 +654,8 @@ public:
MonitorWorkerSimple& operator=(const MonitorWorkerSimple&) = delete;
protected:
MonitorWorkerSimple()
MonitorWorkerSimple(const std::string& name, const std::string& module)
: MonitorWorker(name, module)
{
}
@ -707,10 +713,10 @@ public:
MonitorApi(const MonitorApi&) = delete;
MonitorApi& operator=(const MonitorApi&) = delete;
static Monitor* createInstance()
static Monitor* createInstance(const std::string& name, const std::string& module)
{
MonitorInstance* pInstance = NULL;
MXS_EXCEPTION_GUARD(pInstance = MonitorInstance::create());
MXS_EXCEPTION_GUARD(pInstance = MonitorInstance::create(name, module));
return pInstance;
}

View File

@ -106,7 +106,7 @@ Monitor* MonitorManager::create_monitor(const string& name, const string& module
return NULL;
}
Monitor* mon = api->createInstance();
Monitor* mon = api->createInstance(name, module);
if (!mon)
{
MXS_ERROR("Unable to create monitor instance for '%s', using module '%s'.",
@ -114,10 +114,6 @@ Monitor* MonitorManager::create_monitor(const string& name, const string& module
return NULL;
}
// These initializations are kept outside the constructor to keep it simple.
mon->name = MXS_STRDUP_A(name.c_str());
mon->module_name = module;
if (mon->configure_base(params)) // TODO: Move derived class configure() here
{
std::lock_guard<std::mutex> guard(monLock);
@ -132,7 +128,9 @@ Monitor* MonitorManager::create_monitor(const string& name, const string& module
return mon;
}
Monitor::Monitor()
Monitor::Monitor(const string& name, const string& module)
: name(MXS_STRDUP_A(name.c_str()))
, module_name(module)
{
memset(journal_hash, 0, sizeof(journal_hash));
}
@ -210,7 +208,7 @@ Monitor::~Monitor()
delete disk_space_threshold;
config_parameter_free(parameters);
monitor_server_free_all(monitored_servers);
MXS_FREE(name);
MXS_FREE((const_cast<char*>(name)));
}
void MonitorManager::destroy_all_monitors()
@ -2429,8 +2427,9 @@ void monitor_debug_wait()
namespace maxscale
{
MonitorWorker::MonitorWorker()
: m_monitor(this)
MonitorWorker::MonitorWorker(const string& name, const string& module)
: Monitor(name, module)
, m_monitor(this)
, m_master(NULL)
, m_thread_running(false)
, m_shutdown(0)

View File

@ -25,7 +25,8 @@
#include <maxscale/mysql_utils.hh>
AuroraMonitor::AuroraMonitor()
AuroraMonitor::AuroraMonitor(const std::string& name, const std::string& module)
: MonitorWorkerSimple(name, module)
{
}
@ -34,9 +35,9 @@ AuroraMonitor::~AuroraMonitor()
}
// static
AuroraMonitor* AuroraMonitor::create()
AuroraMonitor* AuroraMonitor::create(const std::string& name, const std::string& module)
{
return new AuroraMonitor();
return new AuroraMonitor(name, module);
}
bool AuroraMonitor::has_sufficient_permissions() const

View File

@ -26,12 +26,12 @@ public:
AuroraMonitor& operator=(const AuroraMonitor&) = delete;
~AuroraMonitor();
static AuroraMonitor* create();
static AuroraMonitor* create(const std::string& name, const std::string& module);
protected:
bool has_sufficient_permissions() const;
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
private:
AuroraMonitor();
AuroraMonitor(const std::string& name, const std::string& module);
};

View File

@ -27,7 +27,8 @@ const int DEFAULT_HEALTH_PORT = 3581;
}
ClustrixMonitor::ClustrixMonitor()
ClustrixMonitor::ClustrixMonitor(const string& name, const string& module)
: MonitorWorker(name, module)
{
}
@ -36,9 +37,9 @@ ClustrixMonitor::~ClustrixMonitor()
}
//static
ClustrixMonitor* ClustrixMonitor::create()
ClustrixMonitor* ClustrixMonitor::create(const string& name, const string& module)
{
return new ClustrixMonitor();
return new ClustrixMonitor(name, module);
}
bool ClustrixMonitor::configure(const MXS_CONFIG_PARAMETER* pParams)

View File

@ -60,12 +60,12 @@ public:
~ClustrixMonitor();
static ClustrixMonitor* create();
static ClustrixMonitor* create(const std::string& name, const std::string& module);
bool configure(const MXS_CONFIG_PARAMETER* pParams) override;
private:
ClustrixMonitor();
ClustrixMonitor(const std::string& name, const std::string& module);
void pre_loop() override;
void post_loop() override;

View File

@ -71,7 +71,8 @@ int get_cs_version(MXS_MONITORED_SERVER* srv)
}
}
CsMonitor::CsMonitor()
CsMonitor::CsMonitor(const std::string& name, const std::string& module)
: MonitorWorkerSimple(name, module)
{
}
@ -80,9 +81,9 @@ CsMonitor::~CsMonitor()
}
// static
CsMonitor* CsMonitor::create()
CsMonitor* CsMonitor::create(const std::string& name, const std::string& module)
{
return new CsMonitor();
return new CsMonitor(name, module);
}
bool CsMonitor::has_sufficient_permissions() const

View File

@ -22,14 +22,14 @@ public:
CsMonitor& operator=(const CsMonitor&) = delete;
~CsMonitor();
static CsMonitor* create();
static CsMonitor* create(const std::string& name, const std::string& module);
protected:
bool has_sufficient_permissions() const;
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
private:
CsMonitor();
CsMonitor(const std::string& name, const std::string& module);
bool configure(const MXS_CONFIG_PARAMETER* pParams) override;
SERVER* m_primary;

View File

@ -42,8 +42,9 @@ static int compare_node_index(const void*, const void*);
static int compare_node_priority(const void*, const void*);
static bool using_xtrabackup(MXS_MONITORED_SERVER* database, const char* server_string);
GaleraMonitor::GaleraMonitor()
: m_disableMasterFailback(0)
GaleraMonitor::GaleraMonitor(const std::string& name, const std::string& module)
: MonitorWorkerSimple(name, module)
, m_disableMasterFailback(0)
, m_availableWhenDonor(0)
, m_disableMasterRoleSetting(0)
, m_root_node_as_master(false)
@ -59,9 +60,9 @@ GaleraMonitor::~GaleraMonitor()
}
// static
GaleraMonitor* GaleraMonitor::create()
GaleraMonitor* GaleraMonitor::create(const std::string& name, const std::string& module)
{
return new GaleraMonitor();
return new GaleraMonitor(name, module);
}
void GaleraMonitor::diagnostics(DCB* dcb) const

View File

@ -17,9 +17,7 @@
*/
#include <maxscale/ccdefs.hh>
#include <unordered_map>
#include <maxscale/monitor.hh>
/**
@ -43,7 +41,7 @@ public:
GaleraMonitor& operator=(const GaleraMonitor&) = delete;
~GaleraMonitor();
static GaleraMonitor* create();
static GaleraMonitor* create(const std::string& name, const std::string& module);
void diagnostics(DCB* dcb) const;
json_t* diagnostics_json() const;
@ -68,7 +66,7 @@ private:
NodeMap m_info; /**< Contains Galera Cluster variables of all nodes */
int m_cluster_size; /**< How many nodes in the cluster */
GaleraMonitor();
GaleraMonitor(const std::string& name, const std::string& module);
bool detect_cluster_size(const int n_nodes,
const char* candidate_uuid,

View File

@ -26,7 +26,8 @@
#include <mysqld_error.h>
GRMon::GRMon()
GRMon::GRMon(const std::string& name, const std::string& module)
: MonitorWorkerSimple(name, module)
{
}
@ -34,9 +35,9 @@ GRMon::~GRMon()
{
}
GRMon* GRMon::create()
GRMon* GRMon::create(const std::string& name, const std::string& module)
{
return new GRMon();
return new GRMon(name, module);
}
bool GRMon::has_sufficient_permissions() const

View File

@ -26,12 +26,12 @@ public:
GRMon& operator&(const GRMon&) = delete;
~GRMon();
static GRMon* create();
static GRMon* create(const std::string& name, const std::string& module);
protected:
bool has_sufficient_permissions() const;
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
private:
GRMon();
GRMon(const std::string& name, const std::string& module);
};

View File

@ -59,7 +59,8 @@ static const char CN_REPLICATION_PASSWORD[] = "replication_password";
static const char DIAG_ERROR[] = "Internal error, could not print diagnostics. "
"Check log for more information.";
MariaDBMonitor::MariaDBMonitor()
MariaDBMonitor::MariaDBMonitor(const string& name, const string& module)
: MonitorWorker(name, module)
{
}
@ -172,9 +173,9 @@ bool MariaDBMonitor::set_replication_credentials(const MXS_CONFIG_PARAMETER* par
return rval;
}
MariaDBMonitor* MariaDBMonitor::create()
MariaDBMonitor* MariaDBMonitor::create(const string& name, const string& module)
{
return new MariaDBMonitor();
return new MariaDBMonitor(name, module);
}
/**

View File

@ -48,10 +48,11 @@ public:
/**
* Create the monitor instance and return the instance data.
*
* @param monitor Generic monitor data
* @param name Monitor config name
* @param module Module name
* @return MariaDBMonitor instance
*/
static MariaDBMonitor* create();
static MariaDBMonitor* create(const std::string& name, const std::string& module);
~MariaDBMonitor();
@ -236,7 +237,7 @@ private:
* gtid:s? */
// Base methods
MariaDBMonitor();
MariaDBMonitor(const std::string& name, const std::string& module);
bool configure(const MXS_CONFIG_PARAMETER* params);
bool set_replication_credentials(const MXS_CONFIG_PARAMETER* params);
void reset_server_info();

View File

@ -90,7 +90,7 @@ int main()
}
MariaDBMonitor::Test::Test(bool use_hostnames)
: m_monitor(new MariaDBMonitor())
: m_monitor(new MariaDBMonitor("TestMonitor", MXS_MODULE_NAME))
, m_use_hostnames(use_hostnames)
{
}

View File

@ -34,8 +34,9 @@
static void detectStaleMaster(void*, int);
static bool isMySQLEvent(mxs_monitor_event_t event);
MMMonitor::MMMonitor()
: m_detectStaleMaster(false)
MMMonitor::MMMonitor(const std::string& name, const std::string& module)
: MonitorWorkerSimple(name, module)
, m_detectStaleMaster(false)
{
}
@ -44,9 +45,9 @@ MMMonitor::~MMMonitor()
}
// static
MMMonitor* MMMonitor::create()
MMMonitor* MMMonitor::create(const std::string& name, const std::string& module)
{
return new MMMonitor();
return new MMMonitor(name, module);
}
void MMMonitor::diagnostics(DCB* dcb) const

View File

@ -26,7 +26,7 @@ public:
MMMonitor& operator=(const MMMonitor&) = delete;
~MMMonitor();
static MMMonitor* create();
static MMMonitor* create(const std::string& name, const std::string& module);
void diagnostics(DCB* dcb) const;
json_t* diagnostics_json() const;
@ -39,7 +39,7 @@ protected:
private:
int m_detectStaleMaster; /**< Monitor flag for Stale Master detection */
MMMonitor();
MMMonitor(const std::string& name, const std::string& module);
MXS_MONITORED_SERVER* get_current_master();
};

View File

@ -22,7 +22,8 @@
#include <maxscale/mysql_utils.hh>
NDBCMonitor::NDBCMonitor()
NDBCMonitor::NDBCMonitor(const std::string& name, const std::string& module)
: MonitorWorkerSimple(name, module)
{
}
@ -31,9 +32,9 @@ NDBCMonitor::~NDBCMonitor()
}
// static
NDBCMonitor* NDBCMonitor::create()
NDBCMonitor* NDBCMonitor::create(const std::string& name, const std::string& module)
{
return new NDBCMonitor();
return new NDBCMonitor(name, module);
}
bool NDBCMonitor::has_sufficient_permissions() const

View File

@ -26,12 +26,12 @@ public:
NDBCMonitor& operator=(const NDBCMonitor&) = delete;
~NDBCMonitor();
static NDBCMonitor* create();
static NDBCMonitor* create(const std::string& name, const std::string& module);
protected:
bool has_sufficient_permissions() const;
void update_server_status(MXS_MONITORED_SERVER* monitored_server);
private:
NDBCMonitor();
NDBCMonitor(const std::string& name, const std::string& module);
};