From d5643bc14d90fc5aba03614a3a3044e1c37d2b23 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Markus=20M=C3=A4kel=C3=A4?= Date: Thu, 29 Mar 2018 10:30:33 +0300 Subject: [PATCH] Create RWBackends from servers Added a helper function that creates a list of servers to use. This should remove some of the duplicate code in the routers. --- .../routing/readwritesplit/readwritesplit.cc | 10 +--------- .../modules/routing/readwritesplit/rwbackend.cc | 15 +++++++++++++++ .../modules/routing/readwritesplit/rwbackend.hh | 10 +++++++--- 3 files changed, 23 insertions(+), 12 deletions(-) diff --git a/server/modules/routing/readwritesplit/readwritesplit.cc b/server/modules/routing/readwritesplit/readwritesplit.cc index a32e7add0..e45668928 100644 --- a/server/modules/routing/readwritesplit/readwritesplit.cc +++ b/server/modules/routing/readwritesplit/readwritesplit.cc @@ -660,15 +660,7 @@ RWSplitSession* RWSplitSession::create(RWSplit* router, MXS_SESSION* session) if (router->have_enough_servers()) { - SRWBackendList backends; - - for (SERVER_REF *sref = router->service()->dbref; sref; sref = sref->next) - { - if (sref->active) - { - backends.push_back(SRWBackend(new RWBackend(sref))); - } - } + SRWBackendList backends = RWBackend::from_servers(router->service()->dbref); /** * At least the master must be found if the router is in the strict mode. diff --git a/server/modules/routing/readwritesplit/rwbackend.cc b/server/modules/routing/readwritesplit/rwbackend.cc index 34e4584e2..ad92af904 100644 --- a/server/modules/routing/readwritesplit/rwbackend.cc +++ b/server/modules/routing/readwritesplit/rwbackend.cc @@ -163,4 +163,19 @@ bool RWBackend::reply_is_complete(GWBUF *buffer) return get_reply_state() == REPLY_STATE_DONE; } +SRWBackendList RWBackend::from_servers(SERVER_REF* servers) +{ + SRWBackendList backends; + + for (SERVER_REF *ref = servers; ref; ref = ref->next) + { + if (ref->active) + { + backends.push_back(mxs::SRWBackend(new mxs::RWBackend(ref))); + } + } + + return backends; +} + } diff --git a/server/modules/routing/readwritesplit/rwbackend.hh b/server/modules/routing/readwritesplit/rwbackend.hh index 75c16f1d9..ff891148b 100644 --- a/server/modules/routing/readwritesplit/rwbackend.hh +++ b/server/modules/routing/readwritesplit/rwbackend.hh @@ -33,12 +33,19 @@ enum reply_state_t typedef std::map BackendHandleMap; /** Internal ID to external ID */ +class RWBackend; +typedef std::tr1::shared_ptr SRWBackend; +typedef std::list SRWBackendList; + class RWBackend: public mxs::Backend { RWBackend(const RWBackend&); RWBackend& operator=(const RWBackend&); public: + + static SRWBackendList from_servers(SERVER_REF* servers); + RWBackend(SERVER_REF* ref); ~RWBackend(); @@ -85,7 +92,4 @@ private: uint8_t m_command; }; -typedef std::tr1::shared_ptr SRWBackend; -typedef std::list SRWBackendList; - }