getCapabilities now get the instance as argument

Allows the capabilities to be different depending on how the
filter/router has been configured.
This commit is contained in:
Johan Wikman 2017-02-14 13:17:56 +02:00
parent 7e23789364
commit 2a49cd6451
31 changed files with 58 additions and 56 deletions

View File

@ -179,7 +179,7 @@ typedef struct mxs_filter_object
*
* @see routing.h
*/
uint64_t (*getCapabilities)(void);
uint64_t (*getCapabilities)(MXS_FILTER *instance);
/**
* @brief Called for destroying a filter instance

View File

@ -183,7 +183,7 @@ protected:
* MyFilterSession* newSession(MXS_SESSION* pSession);
*
* void diagnostics(DCB* pDcb);
* static uint64_t getCapabilities();
* uint64_t getCapabilities();
* };
* @endcode
*
@ -290,11 +290,13 @@ public:
}
}
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* pInstance)
{
uint64_t rv = 0;
MXS_EXCEPTION_GUARD(rv = FilterType::getCapabilities());
FilterType* pFilter = reinterpret_cast<FilterType*>(pInstance);
MXS_EXCEPTION_GUARD(rv = pFilter->getCapabilities());
return rv;
}

View File

@ -79,7 +79,7 @@ typedef struct mxs_router_object
DCB* backend_dcb,
mxs_error_action_t action,
bool* succp);
uint64_t (*getCapabilities)(void);
uint64_t (*getCapabilities)(MXS_ROUTER *instance);
void (*destroyInstance)(MXS_ROUTER *instance);
} MXS_ROUTER_OBJECT;

View File

@ -142,7 +142,7 @@ SERVICE* service_alloc(const char *name, const char *router)
return NULL;
}
service->capabilities = service->router->getCapabilities();
service->capabilities = 0;
service->client_count = 0;
service->n_dbref = 0;
service->name = my_name;
@ -485,6 +485,8 @@ int serviceInitialize(SERVICE *service)
if ((service->router_instance = service->router->createInstance(service, router_options)))
{
service->capabilities |= service->router->getCapabilities(service->router_instance);
if (!config_get_global_options()->config_check)
{
listeners = serviceStartAllPorts(service);
@ -1237,7 +1239,7 @@ serviceSetFilters(SERVICE *service, char *filters)
{
if (filter_load(flist[n - 1]))
{
capabilities |= flist[n - 1]->obj->getCapabilities();
capabilities |= flist[n - 1]->obj->getCapabilities(flist[n - 1]->filter);
}
else
{

View File

@ -271,7 +271,6 @@ void CacheFilter::diagnostics(DCB* pDcb)
m_sCache->show(pDcb);
}
// static
uint64_t CacheFilter::getCapabilities()
{
return RCAP_TYPE_TRANSACTION_TRACKING;

View File

@ -39,7 +39,7 @@ public:
void diagnostics(DCB* pDcb);
static uint64_t getCapabilities();
uint64_t getCapabilities();
private:
CacheFilter();

View File

@ -56,7 +56,7 @@ static void freeSession(MXS_FILTER *instance, MXS_FILTER_SESSION *session);
static void setDownstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_DOWNSTREAM *downstream);
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
#define CCR_DEFAULT_TIME "60"
@ -386,7 +386,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -102,7 +102,7 @@ static void freeSession(MXS_FILTER *instance, MXS_FILTER_SESSION *session);
static void setDownstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_DOWNSTREAM *downstream);
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
/**
* Rule types
@ -2505,7 +2505,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_STMT_INPUT;
}

View File

@ -33,7 +33,7 @@ static void freeSession(MXS_FILTER *instance, MXS_FILTER_SESSION *session);
static void setDownstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_DOWNSTREAM *downstream);
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
/**
* The module entry point routine. It is this routine that
@ -238,7 +238,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -38,7 +38,7 @@ static void setDownstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MX
static void setUpstream(MXS_FILTER *instance, MXS_FILTER_SESSION *session, MXS_UPSTREAM *upstream);
static int32_t routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER *instance);
static int32_t clientReply(MXS_FILTER* instance, MXS_FILTER_SESSION *session, GWBUF *reply);
static bool extract_insert_target(GWBUF *buffer, char* target, int len);
static GWBUF* create_load_data_command(const char *target);
@ -517,7 +517,7 @@ static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *
*
* @return Filter capabilities
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_TRANSACTION_TRACKING;
}

View File

@ -35,7 +35,7 @@ public:
void diagnostics(DCB* pDcb);
static uint64_t getCapabilities();
uint64_t getCapabilities();
void reload(DCB* pOut);

View File

@ -55,7 +55,7 @@ static void setUpstream(MXS_FILTER *instance, MXS_FILTER_SESSION *sdata, MXS_
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *sdata, GWBUF *queue);
static int clientReply(MXS_FILTER *instance, MXS_FILTER_SESSION *sdata, GWBUF *queue);
static void diagnostics(MXS_FILTER *instance, MXS_FILTER_SESSION *sdata, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER *instance);
/* Global symbols of the Module */
@ -419,7 +419,7 @@ static void diagnostics(MXS_FILTER *instance, MXS_FILTER_SESSION *sdata, DCB *dc
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_STMT_INPUT | RCAP_TYPE_STMT_OUTPUT;
}

View File

@ -95,7 +95,7 @@ static void setUpstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static int clientReply(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER *instance);
/**
*Structure used to store messages and their properties.
@ -1510,7 +1510,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -50,7 +50,7 @@ static void freeSession(MXS_FILTER *instance, MXS_FILTER_SESSION *session);
static void setDownstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_DOWNSTREAM *downstream);
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
typedef struct source_host
{
@ -378,7 +378,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -121,7 +121,6 @@ void NullFilter::diagnostics(DCB* pDcb)
dcb_printf(pDcb, "Hello, World!\n");
}
// static
uint64_t NullFilter::getCapabilities()
{
if (!this_unit.capabilities_set)

View File

@ -26,7 +26,7 @@ public:
void diagnostics(DCB* pDcb);
static uint64_t getCapabilities();
uint64_t getCapabilities();
private:
NullFilter(const char* zName);

View File

@ -82,7 +82,7 @@ static void freeSession(MXS_FILTER *instance, MXS_FILTER_SESSION *session);
static void setDownstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_DOWNSTREAM *downstream);
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
/**
* A instance structure, the assumption is that the option passed
@ -619,7 +619,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -49,7 +49,7 @@ static void freeSession(MXS_FILTER *instance, MXS_FILTER_SESSION *session);
static void setDownstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_DOWNSTREAM *downstream);
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
static char *regex_replace(const char *sql, pcre2_code *re, pcre2_match_data *study,
const char *replace);
@ -490,7 +490,7 @@ void log_nomatch(REGEX_INSTANCE* inst, char* re, char* old)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -107,7 +107,7 @@ static void setUpstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static int clientReply(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
/**
* The instance structure for the TEE filter - this holds the configuration
@ -753,7 +753,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -37,7 +37,7 @@ static void freeSession(MXS_FILTER *instance, MXS_FILTER_SESSION *session);
static void setDownstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_DOWNSTREAM *downstream);
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
static void destroyInstance(MXS_FILTER *instance);
@ -243,7 +243,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_NONE;
}

View File

@ -59,7 +59,7 @@ static void setUpstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, MXS_
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static int clientReply(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
/**
* A instance structure, the assumption is that the option passed
@ -628,7 +628,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -86,7 +86,7 @@ static void setUpstream(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession,
static int routeQuery(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static int clientReply(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, GWBUF *queue);
static void diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_FILTER* instance);
static void checkNamedPipe(void *args);
/**
@ -602,7 +602,7 @@ diagnostic(MXS_FILTER *instance, MXS_FILTER_SESSION *fsession, DCB *dcb)
*
* @return The capabilities of the filter.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_FILTER* instance)
{
return RCAP_TYPE_CONTIGUOUS_INPUT;
}

View File

@ -81,7 +81,7 @@ static void clientReply(MXS_ROUTER *instance, void *router_session, GWBUF *queue
DCB *backend_dcb);
static void errorReply(MXS_ROUTER *instance, void *router_session, GWBUF *message,
DCB *backend_dcb, mxs_error_action_t action, bool *succp);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_ROUTER* instance);
extern int MaxScaleUptime();
extern void avro_get_used_tables(AVRO_INSTANCE *router, DCB *dcb);
void converter_func(void* data);
@ -998,7 +998,7 @@ errorReply(MXS_ROUTER *instance, void *router_session, GWBUF *message, DCB *back
ss_dassert(false);
}
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_ROUTER* instance)
{
return RCAP_TYPE_NO_RSESSION;
}

View File

@ -106,7 +106,7 @@ static void errorReply(MXS_ROUTER *instance,
mxs_error_action_t action,
bool *succp);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_ROUTER* instance);
static int blr_handler_config(void *userdata, const char *section, const char *name, const char *value);
static int blr_handle_config_item(const char *name, const char *value, ROUTER_INSTANCE *inst);
static int blr_load_dbusers(const ROUTER_INSTANCE *router);
@ -1900,7 +1900,7 @@ static void rses_end_locked_router_action(ROUTER_SLAVE *rses)
}
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_ROUTER* instance)
{
return RCAP_TYPE_NO_RSESSION | RCAP_TYPE_CONTIGUOUS_OUTPUT | RCAP_TYPE_RESULTSET_OUTPUT;
}

View File

@ -49,7 +49,7 @@ static void closeSession(MXS_ROUTER *instance, void *router_session);
static void freeSession(MXS_ROUTER *instance, void *router_session);
static int execute(MXS_ROUTER *instance, void *router_session, GWBUF *queue);
static void diagnostics(MXS_ROUTER *instance, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_ROUTER* instance);
extern int execute_cmd(CLI_SESSION *cli);
@ -288,7 +288,7 @@ diagnostics(MXS_ROUTER *instance, DCB *dcb)
return; /* Nothing to do currently */
}
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_ROUTER *instance)
{
return 0;
}

View File

@ -48,7 +48,7 @@ static void closeSession(MXS_ROUTER *instance, void *router_session);
static void freeSession(MXS_ROUTER *instance, void *router_session);
static int execute(MXS_ROUTER *instance, void *router_session, GWBUF *queue);
static void diagnostics(MXS_ROUTER *instance, DCB *dcb);
static uint64_t getCapabilities ();
static uint64_t getCapabilities(MXS_ROUTER* instance);
extern int execute_cmd(CLI_SESSION *cli);
@ -293,7 +293,7 @@ diagnostics(MXS_ROUTER *instance, DCB *dcb)
return; /* Nothing to do currently */
}
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_ROUTER* instance)
{
return 0;
}

View File

@ -70,7 +70,7 @@ static void closeSession(MXS_ROUTER *instance, void *router_session);
static void freeSession(MXS_ROUTER *instance, void *router_session);
static int execute(MXS_ROUTER *instance, void *router_session, GWBUF *queue);
static void diagnostics(MXS_ROUTER *instance, DCB *dcb);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_ROUTER* instance);
static void handleError(MXS_ROUTER *instance,
void *router_session,
GWBUF *errbuf,
@ -392,7 +392,7 @@ diagnostics(MXS_ROUTER *instance, DCB *dcb)
* Not used for the maxinfo router
*/
static uint64_t
getCapabilities(void)
getCapabilities(MXS_ROUTER* instance)
{
return 0;
}

View File

@ -98,7 +98,7 @@ static void clientReply(MXS_ROUTER *instance, void *router_session, GWBUF *queue
DCB *backend_dcb);
static void handleError(MXS_ROUTER *instance, void *router_session, GWBUF *errbuf,
DCB *problem_dcb, mxs_error_action_t action, bool *succp);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_ROUTER* instance);
static bool rses_begin_locked_router_action(ROUTER_CLIENT_SES* rses);
static void rses_end_locked_router_action(ROUTER_CLIENT_SES* rses);
static SERVER_REF *get_root_master(SERVER_REF *servers);
@ -785,7 +785,7 @@ static void rses_end_locked_router_action(ROUTER_CLIENT_SES* rses)
spinlock_release(&rses->rses_lock);
}
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_ROUTER* instance)
{
return RCAP_TYPE_NONE;
}

View File

@ -79,7 +79,7 @@ static void clientReply(MXS_ROUTER *instance, void *router_session, GWBUF *queue
static void handleError(MXS_ROUTER *instance, void *router_session,
GWBUF *errmsgbuf, DCB *backend_dcb,
mxs_error_action_t action, bool *succp);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_ROUTER* instance);
/*
* End of the API functions; now the module structure that links to them.
@ -864,7 +864,7 @@ lock_failed:
*
* @return RCAP_TYPE_STMT_INPUT.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_ROUTER* instance)
{
return RCAP_TYPE_STMT_INPUT | RCAP_TYPE_TRANSACTION_TRACKING;
}

View File

@ -81,7 +81,7 @@ static route_target_t get_shard_route_target(qc_query_type_t qtype,
bool trx_active,
HINT* hint);
static uint64_t getCapabilities(void);
static uint64_t getCapabilities(MXS_ROUTER* instance);
static bool connect_backend_servers(backend_ref_t* backend_ref,
int router_nservers,
@ -3320,7 +3320,7 @@ static rses_property_t* mysql_sescmd_get_property(mysql_sescmd_t* scmd)
/**
* Return RCAP_TYPE_STMT_INPUT.
*/
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_ROUTER* instance)
{
return RCAP_TYPE_STMT_INPUT;
}

View File

@ -22,7 +22,7 @@ static void freeSession(MXS_ROUTER *instance, void *session);
static int routeQuery(MXS_ROUTER *instance, void *session, GWBUF *queue);
static void clientReply(MXS_ROUTER *instance, void *session, GWBUF *queue, DCB*);
static void diagnostic(MXS_ROUTER *instance, DCB *dcb);
static uint64_t getCapabilities ();
static uint64_t getCapabilities(MXS_ROUTER* instance);
static void handleError(MXS_ROUTER *instance,
void *router_session,
GWBUF *errbuf,
@ -150,7 +150,7 @@ diagnostic(MXS_ROUTER *instance, DCB *dcb)
{
}
static uint64_t getCapabilities(void)
static uint64_t getCapabilities(MXS_ROUTER* instance)
{
return 0;
}