Move testfilter, router etc to examples

Also changed Plugin devel manual to match. Modified roundrobinrouter
to use static_cast due to the change in router api definitions.
This commit is contained in:
Esa Korhonen
2017-02-27 16:29:59 +02:00
parent 37f80a7dd8
commit d617a0b7b9
16 changed files with 59 additions and 62 deletions

View File

@ -187,10 +187,12 @@ add_subdirectory(plugins)
add_subdirectory(query_classifier)
add_subdirectory(server)
add_subdirectory(include/maxscale)
add_subdirectory(Documentation)
if(NOT WITHOUT_MAXADMIN)
add_subdirectory(client)
endif()
if(BUILD_TESTS)
add_subdirectory(examples)
endif()
# Generate text versions of some documents
execute_process(COMMAND perl ${CMAKE_SOURCE_DIR}/Documentation/format.pl

View File

@ -1 +0,0 @@
install_custom_file(Plugin-development-guide.md ${CMAKE_INSTALL_INCLUDEDIR}/maxscale/Documentation devel)

View File

@ -43,8 +43,8 @@ modules are written in C++.
The *RoundRobinRouter* is a practical example of a simple router plugin. The
RoundRobinRouter is compiled, installed and ran in [section
5.1](#hands-on-example:-roundrobinrouter). The source for the router is included
in the plugin development package.
5.1](#hands-on-example:-roundrobinrouter). The source for the router is located
in the `examples`-folder.
## Module categories

View File

@ -128,6 +128,7 @@ document.
- [Binlog Router Design (in development)](http://mariadb-corporation.github.io/MaxScale/Design-Documents/binlog-router-html-docs)
- [DCB States (to be replaced in StarUML)](Design-Documents/DCB-States.pdf)
- [Schema Sharding Router Technical Documentation](Design-Documents/SchemaRouter-technical.md)
- [Plugin development guide](Design-Documents/Plugin-development-guide.md)
## Earlier Release Notes
@ -145,4 +146,3 @@ document.
- [MariaDB MaxScale 0.7 Release Notes](Release-Notes/MaxScale-0.7-Release-Notes.md)
- [MariaDB MaxScale 0.6 Release Notes](Release-Notes/MaxScale-0.6-Release-Notes.md)
- [MariaDB MaxScale 0.5 Release Notes](Release-Notes/MaxScale-0.5-Release-Notes.md)

20
examples/CMakeLists.txt Normal file
View File

@ -0,0 +1,20 @@
include_directories(${MARIADB_CONNECTOR_INCLUDE_DIR})
add_library(roundrobinrouter SHARED roundrobinrouter.cpp)
target_link_libraries(roundrobinrouter maxscale-common)
set_target_properties(roundrobinrouter PROPERTIES VERSION "1.0.0")
install_module(roundrobinrouter core)
add_library(testroute SHARED testroute.c)
target_link_libraries(testroute maxscale-common)
set_target_properties(testroute PROPERTIES VERSION "1.0.0")
install_module(testroute core)
add_library(testfilter SHARED testfilter.c)
target_link_libraries(testfilter maxscale-common)
set_target_properties(testfilter PROPERTIES VERSION "1.0.0")
install_module(testfilter core)
add_library(testprotocol SHARED testprotocol.c)
set_target_properties(testprotocol PROPERTIES VERSION "1.0.0")
install_module(testprotocol core)

View File

@ -107,7 +107,7 @@ class RRRouter;
class RRRouterSession;
/* Each service using this router will have a router object instance. */
class RRRouter
class RRRouter : public MXS_ROUTER
{
private:
SERVICE* m_service; /* Service this router is part of */
@ -135,7 +135,7 @@ public:
};
/* Every client connection has a corresponding session. */
class RRRouterSession
class RRRouterSession : public MXS_ROUTER_SESSION
{
public:
bool m_closed; /* true when closeSession is called */
@ -344,8 +344,8 @@ void RRRouter::client_reply(RRRouterSession* rses, GWBUF* buf, DCB* backend_dcb)
MXS_NOTICE("Replied to client.\n");
}
}
void RRRouter::handle_error(RRRouterSession* rses, GWBUF* message,
DCB* problem_dcb, mxs_error_action_t action, bool* succp)
void RRRouter::handle_error(RRRouterSession* rses, GWBUF* message, DCB* problem_dcb,
mxs_error_action_t action, bool* succp)
{
/* Don't handle same error twice on same DCB */
if (problem_dcb->dcb_errhandle_called)
@ -562,16 +562,16 @@ void RRRouter::decide_target(RRRouterSession* rses, GWBUF* querybuf, DCB*& targe
* "extern C", but they do need to be callable from C code.
*/
static MXS_ROUTER* createInstance(SERVICE* service, char** options);
static void* newSession(MXS_ROUTER* instance, MXS_SESSION* session);
static void closeSession(MXS_ROUTER* instance, void* session);
static void freeSession(MXS_ROUTER* instance, void* session);
static int routeQuery(MXS_ROUTER* instance, void* session, GWBUF* querybuf);
static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* instance, MXS_SESSION* session);
static void closeSession(MXS_ROUTER* instance, MXS_ROUTER_SESSION* session);
static void freeSession(MXS_ROUTER* instance, MXS_ROUTER_SESSION* session);
static int routeQuery(MXS_ROUTER* instance, MXS_ROUTER_SESSION* session, GWBUF* querybuf);
static void diagnostics(MXS_ROUTER* instance, DCB* dcb);
static void clientReply(MXS_ROUTER* instance, void* router_session, GWBUF* resultbuf,
DCB* backend_dcb);
static void handleError(MXS_ROUTER* instance, void* router_session,
GWBUF* errmsgbuf, DCB* backend_dcb,
mxs_error_action_t action, bool* succp);
static void clientReply(MXS_ROUTER* instance, MXS_ROUTER_SESSION* router_session,
GWBUF* resultbuf, DCB* backend_dcb);
static void handleError(MXS_ROUTER* instance, MXS_ROUTER_SESSION* router_session,
GWBUF* errmsgbuf, DCB* backend_dcb, mxs_error_action_t action,
bool* succp);
static uint64_t getCapabilities(MXS_ROUTER *instance);
static void destroyInstance(MXS_ROUTER* instance);
/* The next two entry points are usually optional. */
@ -669,7 +669,7 @@ static MXS_ROUTER* createInstance(SERVICE* service, char** options)
{
MXS_ERROR("Module command registration failed.");
}
return (MXS_ROUTER*)instance;
return instance;
}
/**
@ -682,12 +682,12 @@ static MXS_ROUTER* createInstance(SERVICE* service, char** options)
* @param session The MaxScale session (generic client connection data)
* @return Client specific data for this router
*/
static void* newSession(MXS_ROUTER* instance, MXS_SESSION* session)
static MXS_ROUTER_SESSION* newSession(MXS_ROUTER* instance, MXS_SESSION* session)
{
RRRouter* router = (RRRouter*)instance;
RRRouter* router = static_cast<RRRouter*>(instance);
RRRouterSession* rses = NULL;
MXS_EXCEPTION_GUARD(rses = router->create_session(session));
return (void*)rses;
return rses;
}
/**
* @brief Close an existing router session for this router instance (API).
@ -700,9 +700,9 @@ static void* newSession(MXS_ROUTER* instance, MXS_SESSION* session)
* @param instance The router object instance
* @param session The router session
*/
static void closeSession(MXS_ROUTER* instance, void* session)
static void closeSession(MXS_ROUTER* instance, MXS_ROUTER_SESSION* session)
{
RRRouterSession* rses = (RRRouterSession*)session;
RRRouterSession* rses = static_cast<RRRouterSession*>(session);
MXS_EXCEPTION_GUARD(rses->close());
}
@ -716,9 +716,9 @@ static void closeSession(MXS_ROUTER* instance, void* session)
* @param session Router client session
*
*/
static void freeSession(MXS_ROUTER* instance, void* session)
static void freeSession(MXS_ROUTER* instance, MXS_ROUTER_SESSION* session)
{
RRRouterSession* rses = (RRRouterSession*)session;
RRRouterSession* rses = static_cast<RRRouterSession*>(session);
delete rses;
}
@ -734,10 +734,10 @@ static void freeSession(MXS_ROUTER* instance, void* session)
* @param buffer Buffer containing the query (or command)
* @return 1 on success, 0 on error
*/
static int routeQuery(MXS_ROUTER* instance, void* session, GWBUF* buffer)
static int routeQuery(MXS_ROUTER* instance, MXS_ROUTER_SESSION* session, GWBUF* buffer)
{
RRRouter* router = (RRRouter*)instance;
RRRouterSession* rses = (RRRouterSession*)session;
RRRouter* router = static_cast<RRRouter*>(instance);
RRRouterSession* rses = static_cast<RRRouterSession*>(session);
int rval = 0;
MXS_EXCEPTION_GUARD(rval = router->route_query(rses, buffer));
return rval;
@ -754,7 +754,7 @@ static int routeQuery(MXS_ROUTER* instance, void* session, GWBUF* buffer)
*/
static void diagnostics(MXS_ROUTER* instance, DCB* dcb)
{
RRRouter* router = (RRRouter*)instance;
RRRouter* router = static_cast<RRRouter*>(instance);
dcb_printf(dcb, "\t\tQueries routed successfully: %lu\n", router->m_routing_s);
dcb_printf(dcb, "\t\tFailed routing attempts: %lu\n", router->m_routing_f);
dcb_printf(dcb, "\t\tClient replies routed: %lu\n", router->m_routing_c);
@ -772,11 +772,11 @@ static void diagnostics(MXS_ROUTER* instance, DCB* dcb)
* @param backend_dcb The backend DCB (data source)
* @param queue The GWBUF with reply data
*/
static void clientReply(MXS_ROUTER* instance, void* session, GWBUF* queue,
static void clientReply(MXS_ROUTER* instance, MXS_ROUTER_SESSION* session, GWBUF* queue,
DCB* backend_dcb)
{
RRRouter* router = (RRRouter*)instance;
RRRouterSession* rses = (RRRouterSession*)session;
RRRouter* router = static_cast<RRRouter*>(instance);
RRRouterSession* rses = static_cast<RRRouterSession*>(session);
MXS_EXCEPTION_GUARD(router->client_reply(rses, queue, backend_dcb));
}
@ -794,12 +794,12 @@ static void clientReply(MXS_ROUTER* instance, void* session, GWBUF* queue,
* @param action The action: ERRACT_NEW_CONNECTION or ERRACT_REPLY_CLIENT
* @param succp Output result of action, true if router can continue
*/
static void handleError(MXS_ROUTER* instance, void* session,
static void handleError(MXS_ROUTER* instance, MXS_ROUTER_SESSION* session,
GWBUF* message, DCB* problem_dcb,
mxs_error_action_t action, bool* succp)
{
RRRouter* router = (RRRouter*)instance;
RRRouterSession* rses = (RRRouterSession*)session;
RRRouter* router = static_cast<RRRouter*>(instance);
RRRouterSession* rses = static_cast<RRRouterSession*>(session);
MXS_EXCEPTION_GUARD(router->handle_error(rses, message, problem_dcb, action, succp));
}
@ -832,7 +832,7 @@ static uint64_t getCapabilities(MXS_ROUTER *instance)
*/
static void destroyInstance(MXS_ROUTER* instance)
{
RRRouter* router = (RRRouter*)instance;
RRRouter* router = static_cast<RRRouter*>(instance);
delete router;
}

View File

@ -10,7 +10,6 @@ add_subdirectory(nullfilter)
add_subdirectory(qlafilter)
add_subdirectory(regexfilter)
add_subdirectory(tee)
add_subdirectory(testfilter)
add_subdirectory(topfilter)
add_subdirectory(tpmfilter)
add_subdirectory(masking)

View File

@ -1,4 +0,0 @@
add_library(testfilter SHARED testfilter.c)
target_link_libraries(testfilter maxscale-common)
set_target_properties(testfilter PROPERTIES VERSION "1.0.0")
install_module(testfilter core)

View File

@ -8,6 +8,3 @@ add_subdirectory(maxscaled)
add_subdirectory(MySQL)
add_subdirectory(telnetd)
if(BUILD_TESTS)
add_subdirectory(testprotocol)
endif()

View File

@ -1,3 +0,0 @@
add_library(testprotocol SHARED testprotocol.c)
set_target_properties(testprotocol PROPERTIES VERSION "1.0.0")
install_module(testprotocol core)

View File

@ -11,8 +11,5 @@ add_subdirectory(maxinfo)
add_subdirectory(readconnroute)
add_subdirectory(readwritesplit)
add_subdirectory(schemarouter)
add_subdirectory(roundrobinrouter)
if(BUILD_TESTS)
add_subdirectory(testroute)
endif()

View File

@ -1,6 +0,0 @@
add_library(roundrobinrouter SHARED roundrobinrouter.cpp)
target_link_libraries(roundrobinrouter maxscale-common)
set_target_properties(roundrobinrouter PROPERTIES VERSION "1.0.0")
install_module(roundrobinrouter core)
install_custom_file(roundrobinrouter.cpp ${CMAKE_INSTALL_INCLUDEDIR}/maxscale/Documentation devel)

View File

@ -1,4 +0,0 @@
add_library(testroute SHARED testroute.c)
target_link_libraries(testroute maxscale-common)
set_target_properties(testroute PROPERTIES VERSION "1.0.0")
install_module(testroute core)