Create a macro for module declarations

The modules are now declared with a common macro. This allows future
additions to the module loading process while also making the loaded
symbol name a constant.
This commit is contained in:
Markus Mäkelä 2017-01-03 14:33:44 +02:00
parent ae0577c695
commit b00e0328d5
51 changed files with 87 additions and 56 deletions

View File

@ -193,7 +193,7 @@ protected:
* The plugin function @c GetModuleObject is then implemented as follows:
*
* @code
* extern "C" MODULE_INFO* GetModuleObject()
* extern "C" MODULE_INFO* MXS_CREATE_MODULE()
* {
* return &MyFilter::s_object;
* };

View File

@ -81,12 +81,43 @@ typedef struct
*/
typedef struct
{
MODULE_API modapi;
MODULE_STATUS status;
MODULE_VERSION api_version;
const char *description;
const char *version;
void *module_object;
MODULE_API modapi; /**< Module API type */
MODULE_STATUS status; /**< Module development status */
MODULE_VERSION api_version; /**< Module API version */
const char *description; /**< Module description */
const char *version; /**< Module version */
void *module_object; /**< Module type specific API implementation */
} MODULE_INFO;
/**
* Name of the module entry point
*
* All modules should declare the module entry point in the following style:
*
* @code{.cpp}
*
* MODULE_INFO* MXS_CREATE_MODULE()
* {
* // Module specific API implementation
* static FILTER_OBJECT my_object = { ... };
*
* // An implementation of the MODULE_INFO structure
* static MODULE_INFO info = { ... };
*
* // Any global initialization should be done here
*
* return &info;
* }
*
* @endcode
*
* The @c module_object field of the MODULE_INFO structure should point to
* the module type specific API implementation. In the above example, the @c info
* would declare a pointer to @c my_object as the last member of the struct.
*/
#define MXS_CREATE_MODULE mxs_get_module_object
/** Name of the symbol that MaxScale will load */
#define MXS_MODULE_SYMBOL_NAME "mxs_get_module_object"
MXS_END_DECLS

View File

@ -97,7 +97,7 @@ void qc_thread_end(void)
extern "C"
{
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static QUERY_CLASSIFIER qc =
{

View File

@ -2557,7 +2557,7 @@ void qc_thread_end(void)
extern "C"
{
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static QUERY_CLASSIFIER qc =
{

View File

@ -3172,7 +3172,7 @@ void qc_sqlite_get_field_info(GWBUF* query, const QC_FIELD_INFO** infos, size_t*
* EXPORTS
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static QUERY_CLASSIFIER qc =
{

View File

@ -194,7 +194,7 @@ void *load_module(const char *module, const char *type)
return NULL;
}
void *sym = dlsym(dlhandle, "GetModuleObject");
void *sym = dlsym(dlhandle, MXS_MODULE_SYMBOL_NAME);
if (sym == NULL)
{

View File

@ -143,7 +143,7 @@ static bool cdc_add_new_user(const MODULECMD_ARG *args)
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static modulecmd_arg_type_t args[] =
{

View File

@ -599,7 +599,7 @@ int gssapi_auth_load_users(SERV_LISTENER *listener)
/**
* Module handle entry point
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWAUTHENTICATOR MyObject =
{

View File

@ -263,7 +263,7 @@ static int gssapi_backend_auth_authenticate(DCB *dcb)
/**
* Module handle entry point
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWAUTHENTICATOR MyObject =
{

View File

@ -53,7 +53,7 @@ typedef struct http_auth
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWAUTHENTICATOR MyObject =
{

View File

@ -47,7 +47,7 @@ static void max_admin_auth_free_client_data(DCB *dcb);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWAUTHENTICATOR MyObject =
{

View File

@ -71,7 +71,7 @@ static int mysql_auth_set_client_data(
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWAUTHENTICATOR MyObject =
{

View File

@ -156,7 +156,7 @@ static bool auth_backend_ssl(DCB *dcb)
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWAUTHENTICATOR MyObject =
{

View File

@ -49,7 +49,7 @@ static void null_auth_free_client_data(DCB *dcb);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWAUTHENTICATOR MyObject =
{

View File

@ -46,7 +46,7 @@ static void null_auth_free_client_data(DCB *dcb);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWAUTHENTICATOR MyObject =
{

View File

@ -193,7 +193,7 @@ bool config_get_uint64(const FILTER_PARAMETER& param, uint64_t* pValue)
// Global symbols of the Module
//
extern "C" MODULE_INFO* GetModuleObject()
extern "C" MODULE_INFO* MXS_CREATE_MODULE()
{
static modulecmd_arg_type_t show_argv[] =
{

View File

@ -99,7 +99,7 @@ typedef struct
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -777,7 +777,7 @@ bool dbfw_show_rules(const MODULECMD_ARG *argv)
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
modulecmd_arg_type_t args_rules_reload[] =
{

View File

@ -40,7 +40,7 @@ static uint64_t getCapabilities(void);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -72,7 +72,7 @@ static uint64_t getCapabilities(void);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -18,7 +18,7 @@
// Global symbols of the Module
//
extern "C" MODULE_INFO* GetModuleObject()
extern "C" MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialized masking module.");

View File

@ -64,7 +64,7 @@ static uint64_t getCapabilities(void);
*
* @return The module object.
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT object =
{

View File

@ -245,7 +245,7 @@ void sendMessage(void* data);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -80,7 +80,7 @@ typedef struct
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -139,7 +139,7 @@ static int write_log_entry(uint32_t, FILE*, QLA_INSTANCE*, QLA_SESSION*, const c
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -90,7 +90,7 @@ void log_nomatch(REGEX_INSTANCE* inst, char* re, char* old);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -289,7 +289,7 @@ orphan_free(void* data)
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
spinlock_init(&orphanLock);
#ifdef SS_DEBUG

View File

@ -69,7 +69,7 @@ typedef struct
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -123,7 +123,7 @@ typedef struct
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -142,7 +142,7 @@ typedef struct
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static FILTER_OBJECT MyObject =
{

View File

@ -344,7 +344,7 @@ diagnostics(DCB *dcb, const MONITOR *mon)
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static MONITOR_OBJECT MyObject =
{

View File

@ -59,7 +59,7 @@ bool isGaleraEvent(monitor_event_t event);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise the MySQL Galera Monitor module.");

View File

@ -60,7 +60,7 @@ static bool isMySQLEvent(monitor_event_t event);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise the Multi-Master Monitor module.");

View File

@ -94,7 +94,7 @@ static const char* hb_table_name = "maxscale_schema.replication_heartbeat";
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise the MySQL Monitor module.");

View File

@ -53,7 +53,7 @@ bool isNdbEvent(monitor_event_t event);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise the MySQL Cluster Monitor module.");

View File

@ -68,7 +68,7 @@ static char* cdc_default_auth()
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWPROTOCOL MyObject =
{

View File

@ -63,7 +63,7 @@ static char *httpd_default_auth();
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWPROTOCOL MyObject =
{

View File

@ -85,7 +85,7 @@ static int gw_send_change_user_to_backend(char *dbname,
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWPROTOCOL MyObject =
{

View File

@ -93,7 +93,7 @@ static void gw_process_one_new_client(DCB *client_dcb);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWPROTOCOL MyObject =
{

View File

@ -164,7 +164,7 @@ static bool authenticate_socket(MAXSCALED *protocol, DCB *dcb)
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_INFO("Initialise MaxScaled Protocol module.");

View File

@ -81,7 +81,7 @@ static void telnetd_echo(DCB *dcb, int enable);
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_INFO("Initialise Telnetd Protocol module.");

View File

@ -52,7 +52,7 @@ static int test_connection_limit(DCB *dcb, int limit){return 0;}
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static GWPROTOCOL MyObject =
{

View File

@ -126,7 +126,7 @@ bool avro_handle_convert(const MODULECMD_ARG *args)
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
spinlock_init(&instlock);
instances = NULL;

View File

@ -134,7 +134,7 @@ static ROUTER_INSTANCE *instances;
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise binlog router module.");
spinlock_init(&instlock);

View File

@ -62,7 +62,7 @@ static CLI_INSTANCE *instances;
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise CLI router module");
spinlock_init(&instlock);

View File

@ -61,7 +61,7 @@ static CLI_INSTANCE *instances;
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise debug CLI router module.");
spinlock_init(&instlock);

View File

@ -85,7 +85,7 @@ static INFO_INSTANCE *instances;
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise MaxInfo router module.");
spinlock_init(&instlock);

View File

@ -118,7 +118,7 @@ static ROUTER_INSTANCE *instances;
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initialise readconnroute router module.");
spinlock_init(&instlock);

View File

@ -113,7 +113,7 @@ static bool create_backends(ROUTER_CLIENT_SES *rses, backend_ref_t** dest, int*
*
* @return The module object
*/
MODULE_INFO *GetModuleObject()
MODULE_INFO *MXS_CREATE_MODULE()
{
static ROUTER_OBJECT MyObject =
{

View File

@ -591,7 +591,7 @@ bool check_shard_status(ROUTER_INSTANCE* router, char* shard)
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
MXS_NOTICE("Initializing Schema Sharding Router.");
spinlock_init(&instlock);

View File

@ -46,7 +46,7 @@ typedef struct
*
* @return The module object
*/
MODULE_INFO* GetModuleObject()
MODULE_INFO* MXS_CREATE_MODULE()
{
static ROUTER_OBJECT MyObject =
{