HintRouter: use a subfunction for connecting to backends

Also, removed needless runtime capabilities + other fixes according to
comments.
This commit is contained in:
Esa Korhonen
2017-03-27 18:53:30 +03:00
parent 37e9d74253
commit 88b87aceb5
3 changed files with 37 additions and 41 deletions

View File

@ -106,23 +106,7 @@ HintRouterSession* HintRouter::newSession(MXS_SESSION *pSession)
if (master_ref) if (master_ref)
{ {
// Connect to master // Connect to master
HR_DEBUG("Connecting to %s.", master_ref->server->unique_name); master_Dcb = connect_to_backend(pSession, master_ref, &all_backends);
DCB* master_conn = dcb_connect(master_ref->server, pSession, master_ref->server->protocol);
if (master_conn)
{
HR_DEBUG("Connected.");
atomic_add(&master_ref->connections, 1);
master_conn->service = pSession->service;
master_Dcb = Dcb(master_conn);
string name(master_conn->server->unique_name);
all_backends.insert(HintRouterSession::MapElement(name, master_Dcb));
}
else
{
HR_DEBUG("Connection failed.");
}
} }
/* Different sessions may use different slaves if the 'max_session_slaves'- /* Different sessions may use different slaves if the 'max_session_slaves'-
@ -142,34 +126,22 @@ HintRouterSession* HintRouter::newSession(MXS_SESSION *pSession)
current++) current++)
{ {
SERVER_REF* slave_ref = slave_refs.at(current % size); SERVER_REF* slave_ref = slave_refs.at(current % size);
// Connect to a slave Dcb slave_conn = connect_to_backend(pSession, slave_ref, &all_backends);
HR_DEBUG("Connecting to %s.", slave_ref->server->unique_name); if (slave_conn.get())
DCB* slave_conn = dcb_connect(slave_ref->server, pSession, slave_ref->server->protocol);
if (slave_conn)
{ {
HR_DEBUG("Connected."); slave_arr.push_back(slave_conn);
atomic_add(&slave_ref->connections, 1);
slave_conn->service = pSession->service;
Dcb slave_Dcb(slave_conn);
slave_arr.push_back(slave_Dcb);
string name(slave_conn->server->unique_name);
all_backends.insert(HintRouterSession::MapElement(name, slave_Dcb));
slave_conns++; slave_conns++;
} }
else
{
HR_DEBUG("Connection failed.");
}
} }
m_total_slave_conns += slave_conns; m_total_slave_conns += slave_conns;
} }
HintRouterSession* rval = NULL;
if (all_backends.size() != 0) if (all_backends.size() != 0)
{ {
return new HintRouterSession(pSession, this, all_backends); rval = new HintRouterSession(pSession, this, all_backends);
} }
return NULL; return rval;
} }
void HintRouter::diagnostics(DCB* pOut) void HintRouter::diagnostics(DCB* pOut)
@ -191,10 +163,28 @@ void HintRouter::diagnostics(DCB* pOut)
dcb_printf(pOut, "\tQueries routed to all servers: %d\n", m_routed_to_all); dcb_printf(pOut, "\tQueries routed to all servers: %d\n", m_routed_to_all);
} }
uint64_t HintRouter::getCapabilities() Dcb HintRouter::connect_to_backend(MXS_SESSION* session, SERVER_REF* sref,
HintRouterSession::BackendMap* all_backends)
{ {
HR_ENTRY(); Dcb result(NULL);
return RCAP_TYPE_STMT_INPUT | RCAP_TYPE_RESULTSET_OUTPUT; HR_DEBUG("Connecting to %s.", sref->server->unique_name);
DCB* new_connection = dcb_connect(sref->server, session, sref->server->protocol);
if (new_connection)
{
HR_DEBUG("Connected.");
atomic_add(&sref->connections, 1);
new_connection->service = session->service;
result = Dcb(new_connection);
string name(new_connection->server->unique_name);
all_backends->insert(HintRouterSession::MapElement(name, result));
}
else
{
HR_DEBUG("Connection failed.");
}
return result;
} }
extern "C" MXS_MODULE* MXS_CREATE_MODULE() extern "C" MXS_MODULE* MXS_CREATE_MODULE()

View File

@ -23,7 +23,10 @@ public:
static HintRouter* create(SERVICE* pService, char** pzOptions); static HintRouter* create(SERVICE* pService, char** pzOptions);
HintRouterSession* newSession(MXS_SESSION *pSession); HintRouterSession* newSession(MXS_SESSION *pSession);
void diagnostics(DCB* pOut); void diagnostics(DCB* pOut);
uint64_t getCapabilities(); uint64_t getCapabilities() const
{
return RCAP_TYPE_NONE;
}
HINT_TYPE get_default_action() const HINT_TYPE get_default_action() const
{ {
return m_default_action; return m_default_action;
@ -48,4 +51,7 @@ private:
private: private:
HintRouter(const HintRouter&); HintRouter(const HintRouter&);
HintRouter& operator = (const HintRouter&); HintRouter& operator = (const HintRouter&);
static Dcb connect_to_backend(MXS_SESSION* session, SERVER_REF* sref,
HintRouterSession::BackendMap* all_backends);
}; };

View File

@ -19,7 +19,7 @@
#if defined(SS_DEBUG) #if defined(SS_DEBUG)
#define DEBUG_HINTROUTER #define DEBUG_HINTROUTER
//#undef DEBUG_HINTROUTER #undef DEBUG_HINTROUTER
#else #else
#undef DEBUG_HINTROUTER #undef DEBUG_HINTROUTER
#endif #endif