Add getCapabilities to filters
Common capabilities are now defined in routing.h. The common capabilities can be defined using bits 0 - 15. Router capabilities are defined using bits 16-31 and filter capabilities (should there ever be such) using bits 32-47. So, to find out the capabilities of a service you only need to OR the capabilities of the router and all filters together. For instance, if a single filter needs statement based routing, then that is what is done.
This commit is contained in:
13
server/modules/filter/cache/cache.c
vendored
13
server/modules/filter/cache/cache.c
vendored
@ -35,6 +35,7 @@ static void setUpstream(FILTER *instance, void *sdata, UPSTREAM *upstream);
|
||||
static int routeQuery(FILTER *instance, void *sdata, GWBUF *queue);
|
||||
static int clientReply(FILTER *instance, void *sdata, GWBUF *queue);
|
||||
static void diagnostics(FILTER *instance, void *sdata, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
#define C_DEBUG(format, ...) MXS_LOG_MESSAGE(LOG_NOTICE, format, ##__VA_ARGS__)
|
||||
|
||||
@ -81,6 +82,7 @@ FILTER_OBJECT *GetModuleObject()
|
||||
routeQuery,
|
||||
clientReply,
|
||||
diagnostics,
|
||||
getCapabilities
|
||||
};
|
||||
|
||||
return &object;
|
||||
@ -550,6 +552,17 @@ static void diagnostics(FILTER *instance, void *sdata, DCB *dcb)
|
||||
dcb_printf(dcb, "Hello World from Cache!\n");
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
//
|
||||
// API END
|
||||
//
|
||||
|
||||
@ -63,6 +63,7 @@ static void freeSession(FILTER *instance, void *session);
|
||||
static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *downstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
@ -76,6 +77,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
NULL,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
#define CCR_DEFAULT_TIME 60
|
||||
@ -412,3 +414,13 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
dcb_printf(dcb, "\tNo. of hints added based on count: %d\n", my_instance->stats.n_add_count);
|
||||
dcb_printf(dcb, "\tNo. of hints added based on time: %d\n", my_instance->stats.n_add_time);
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -105,6 +105,7 @@ static void freeSession(FILTER *instance, void *session);
|
||||
static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *downstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
{
|
||||
@ -117,6 +118,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
NULL,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -2328,6 +2330,16 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
#ifdef BUILD_RULE_PARSER
|
||||
// TODO: Not ok to include file from other component's test directory.
|
||||
#include "../../../core/test/test_utils.h"
|
||||
|
||||
@ -89,6 +89,8 @@ static void freeSession(FILTER *instance, void *session);
|
||||
static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *downstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
static bool read_stored_data(GK_INSTANCE *inst);
|
||||
static bool write_stored_data(GK_INSTANCE *inst);
|
||||
|
||||
@ -103,6 +105,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
NULL,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -422,6 +425,16 @@ static void diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
dcb_printf(dcb, "\t\tQueryhash misses: %u\n", inst->stats.miss);
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
/**
|
||||
* @brief Write query patterns from memory to disk
|
||||
*
|
||||
|
||||
@ -40,6 +40,7 @@ static void freeSession(FILTER *instance, void *session);
|
||||
static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *downstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
@ -53,6 +54,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
NULL,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -278,3 +280,13 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
HINT_SESSION *my_session = (HINT_SESSION *)fsession;
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -81,6 +81,7 @@ static void setUpstream(FILTER *instance, void *fsession, UPSTREAM *upstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static int clientReply(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
@ -94,6 +95,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
clientReply,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -589,3 +591,13 @@ static void diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -101,6 +101,7 @@ static void setUpstream(FILTER *instance, void *fsession, UPSTREAM *upstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static int clientReply(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
@ -114,6 +115,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
clientReply,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1703,3 +1705,13 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
my_instance->stats.n_sent);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -57,6 +57,7 @@ static void freeSession(FILTER *instance, void *session);
|
||||
static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *downstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
@ -70,6 +71,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
NULL,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -410,3 +412,13 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
my_instance->user);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -72,6 +72,7 @@ static void freeSession(FILTER *instance, void *session);
|
||||
static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *downstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
@ -85,6 +86,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
NULL, // No client reply
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -514,3 +516,13 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
my_instance->nomatch);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -57,6 +57,7 @@ static void freeSession(FILTER *instance, void *session);
|
||||
static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *downstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
static char *regex_replace(const char *sql, pcre2_code *re, pcre2_match_data *study,
|
||||
const char *replace);
|
||||
@ -72,6 +73,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
NULL,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -545,3 +547,13 @@ void log_nomatch(REGEX_INSTANCE* inst, char* re, char* old)
|
||||
MXS_INFO("No match %s: [%s]", re, old);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -116,6 +116,7 @@ static void setUpstream(FILTER *instance, void *fsession, UPSTREAM *upstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static int clientReply(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
{
|
||||
@ -128,6 +129,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
clientReply,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -1124,6 +1126,16 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
/**
|
||||
* Determine if the packet is a command that must be sent to the branch
|
||||
* to maintain the session consistancy. These are COM_INIT_DB,
|
||||
|
||||
@ -46,6 +46,7 @@ static void freeSession(FILTER *instance, void *session);
|
||||
static void setDownstream(FILTER *instance, void *fsession, DOWNSTREAM *downstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
@ -59,6 +60,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
NULL,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -246,3 +248,13 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
dcb_printf(dcb, "\t\tNo. of sessions created: %d\n",
|
||||
my_instance->sessions);
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_NONE;
|
||||
}
|
||||
|
||||
@ -67,6 +67,7 @@ static void setUpstream(FILTER *instance, void *fsession, UPSTREAM *upstream);
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static int clientReply(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
@ -80,6 +81,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
clientReply,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -682,3 +684,13 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -81,6 +81,7 @@ static void setUpstream(FILTER *instance, void *fsession, UPSTREAM *upstream
|
||||
static int routeQuery(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static int clientReply(FILTER *instance, void *fsession, GWBUF *queue);
|
||||
static void diagnostic(FILTER *instance, void *fsession, DCB *dcb);
|
||||
static uint64_t getCapabilities();
|
||||
|
||||
static FILTER_OBJECT MyObject =
|
||||
{
|
||||
@ -93,6 +94,7 @@ static FILTER_OBJECT MyObject =
|
||||
routeQuery,
|
||||
clientReply,
|
||||
diagnostic,
|
||||
getCapabilities,
|
||||
};
|
||||
|
||||
/**
|
||||
@ -557,3 +559,13 @@ diagnostic(FILTER *instance, void *fsession, DCB *dcb)
|
||||
dcb_printf(dcb, "\t\tLogging with query delimiter %s.\n",
|
||||
my_instance->query_delimiter);
|
||||
}
|
||||
|
||||
/**
|
||||
* Capability routine.
|
||||
*
|
||||
* @return The capabilities of the filter.
|
||||
*/
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_STMT_INPUT;
|
||||
}
|
||||
|
||||
@ -987,7 +987,7 @@ static void rses_end_locked_router_action(ROUTER_CLIENT_SES* rses)
|
||||
|
||||
static uint64_t getCapabilities()
|
||||
{
|
||||
return RCAP_TYPE_PACKET_INPUT;
|
||||
return RCAP_TYPE_NONE;
|
||||
}
|
||||
|
||||
/********************************
|
||||
|
||||
Reference in New Issue
Block a user