Rename and overload adding of session commands
As the session commands are always appended to the end of the list, the name should reflect that action. For this reason, the function was renamed to append_session_command. Readwritesplit supports replacement of slave servers by storing all executed session commands in a list. To make the copying of this list a bit cleaner, an overload for a list of session commands was added. This will allow relatively smooth addition of server replacement to all router modules that use the Backend class.
This commit is contained in:
@ -72,8 +72,9 @@ public:
|
||||
* @param sequence Sequence identifier of this session command, returned when
|
||||
* the session command is completed
|
||||
*/
|
||||
void add_session_command(GWBUF* buffer, uint64_t sequence);
|
||||
void add_session_command(const SSessionCommand& sescmd);
|
||||
void append_session_command(GWBUF* buffer, uint64_t sequence);
|
||||
void append_session_command(const SSessionCommand& sescmd);
|
||||
void append_session_command(const SessionCommandList& sescmdlist);
|
||||
|
||||
/**
|
||||
* @brief Mark the current session command as successfully executed
|
||||
|
@ -111,16 +111,21 @@ bool Backend::execute_session_command()
|
||||
return rval;
|
||||
}
|
||||
|
||||
void Backend::add_session_command(GWBUF* buffer, uint64_t sequence)
|
||||
void Backend::append_session_command(GWBUF* buffer, uint64_t sequence)
|
||||
{
|
||||
m_session_commands.push_back(SSessionCommand(new SessionCommand(buffer, sequence)));
|
||||
}
|
||||
|
||||
void Backend::add_session_command(const SSessionCommand& sescmd)
|
||||
void Backend::append_session_command(const SSessionCommand& sescmd)
|
||||
{
|
||||
m_session_commands.push_back(sescmd);
|
||||
}
|
||||
|
||||
void Backend::append_session_command(const SessionCommandList& sescmdlist)
|
||||
{
|
||||
m_session_commands.insert(m_session_commands.end(), sescmdlist.begin(), sescmdlist.end());
|
||||
}
|
||||
|
||||
uint64_t Backend::complete_session_command()
|
||||
{
|
||||
uint64_t rval = m_session_commands.front()->get_position();
|
||||
|
@ -248,7 +248,7 @@ bool route_session_write(ROUTER_CLIENT_SES *rses, GWBUF *querybuf, uint8_t comma
|
||||
|
||||
if (bref->in_use())
|
||||
{
|
||||
bref->add_session_command(sescmd);
|
||||
bref->append_session_command(sescmd);
|
||||
|
||||
uint64_t current_pos = bref->next_session_command()->get_position();
|
||||
|
||||
|
@ -214,11 +214,22 @@ bool select_connect_backend_servers(int router_nservers,
|
||||
bref && slaves_connected < max_nslaves;
|
||||
bref = get_slave_candidate(rses, master_host, cmpfun))
|
||||
{
|
||||
if (bref->connect(session) &&
|
||||
(bref->session_command_count() == 0 ||
|
||||
bref->execute_session_command()))
|
||||
if (bref->can_connect() && bref->connect(session))
|
||||
{
|
||||
slaves_connected += 1;
|
||||
if (rses->sescmd_list.size())
|
||||
{
|
||||
bref->append_session_command(rses->sescmd_list);
|
||||
|
||||
if (bref->execute_session_command())
|
||||
{
|
||||
rses->expected_responses++;
|
||||
slaves_connected++;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
slaves_connected++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -726,7 +726,7 @@ bool SchemaRouterSession::route_session_write(GWBUF* querybuf, uint8_t command)
|
||||
{
|
||||
GWBUF *buffer = gwbuf_clone(querybuf);
|
||||
|
||||
(*it)->add_session_command(buffer, m_sent_sescmd);
|
||||
(*it)->append_session_command(buffer, m_sent_sescmd);
|
||||
|
||||
if (MXS_LOG_PRIORITY_IS_ENABLED(LOG_INFO))
|
||||
{
|
||||
|
Reference in New Issue
Block a user