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:
parent
6ef9e1fd9a
commit
d5643bc14d
@ -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.
|
||||
|
@ -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;
|
||||
}
|
||||
|
||||
}
|
||||
|
@ -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;
|
||||
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user