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.
This commit is contained in:
Markus Mäkelä 2018-03-29 10:30:33 +03:00
parent 6ef9e1fd9a
commit d5643bc14d
No known key found for this signature in database
GPG Key ID: 72D48FCE664F7B19
3 changed files with 23 additions and 12 deletions

View File

@ -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.

View File

@ -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;
}
}

View File

@ -33,12 +33,19 @@ enum reply_state_t
typedef std::map<uint32_t, uint32_t> BackendHandleMap; /** Internal ID to external ID */
class RWBackend;
typedef std::tr1::shared_ptr<RWBackend> SRWBackend;
typedef std::list<SRWBackend> 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<RWBackend> SRWBackend;
typedef std::list<SRWBackend> SRWBackendList;
}