Add name and uri helpers to Backend
Providing helper functions for the commonly used parts of the server makes code easier to read. It also removes any possibility for formatting problems by moving the URI and name string handling inside the Backend class.
This commit is contained in:
parent
d7543988ee
commit
c7520a2156
@ -15,6 +15,7 @@
|
||||
#include <maxscale/cppdefs.hh>
|
||||
|
||||
#include <list>
|
||||
#include <string>
|
||||
#include <tr1/memory>
|
||||
|
||||
#include <maxscale/service.h>
|
||||
@ -251,6 +252,21 @@ public:
|
||||
*/
|
||||
bool has_failed() const;
|
||||
|
||||
|
||||
/**
|
||||
* @brief Get the object name of this server
|
||||
*
|
||||
* @return The unique object name of this server
|
||||
*/
|
||||
const char* name() const;
|
||||
|
||||
/**
|
||||
* @brief Get the address and port as a string
|
||||
*
|
||||
* @return The address and port combined into one string
|
||||
*/
|
||||
const char* uri() const;
|
||||
|
||||
private:
|
||||
/**
|
||||
* Internal state of the backend
|
||||
@ -284,6 +300,7 @@ private:
|
||||
int m_state; /**< State of the backend */
|
||||
SessionCommandList m_session_commands; /**< List of session commands that are
|
||||
* to be executed on this backend server */
|
||||
std::string m_uri; /**< The combined address and port */
|
||||
};
|
||||
|
||||
typedef std::tr1::shared_ptr<Backend> SBackend;
|
||||
|
@ -12,6 +12,9 @@
|
||||
*/
|
||||
|
||||
#include <maxscale/backend.hh>
|
||||
|
||||
#include <sstream>
|
||||
|
||||
#include <maxscale/protocol/mysql.h>
|
||||
#include <maxscale/debug.h>
|
||||
|
||||
@ -23,6 +26,9 @@ Backend::Backend(SERVER_REF *ref):
|
||||
m_dcb(NULL),
|
||||
m_state(0)
|
||||
{
|
||||
std::stringstream ss;
|
||||
ss << "[" << server()->name << "]:" << server()->port;
|
||||
m_uri = ss.str();
|
||||
}
|
||||
|
||||
Backend::~Backend()
|
||||
@ -298,3 +304,13 @@ bool Backend::has_failed() const
|
||||
{
|
||||
return m_state & FATAL_FAILURE;
|
||||
}
|
||||
|
||||
const char* Backend::name() const
|
||||
{
|
||||
return m_backend->server->unique_name;
|
||||
}
|
||||
|
||||
const char* Backend::uri() const
|
||||
{
|
||||
return m_uri.c_str();
|
||||
}
|
||||
|
@ -360,7 +360,7 @@ static bool reroute_stored_statement(ROUTER_CLIENT_SES *rses, const SRWBackend&
|
||||
/** Found a valid candidate; a non-master slave that's in use */
|
||||
if (backend->write(stored))
|
||||
{
|
||||
MXS_INFO("Retrying failed read at '%s'.", backend->server()->unique_name);
|
||||
MXS_INFO("Retrying failed read at '%s'.", backend->name());
|
||||
ss_dassert(backend->get_reply_state() == REPLY_STATE_DONE);
|
||||
LOG_RS(backend, REPLY_STATE_START);
|
||||
backend->set_reply_state(REPLY_STATE_START);
|
||||
@ -379,7 +379,7 @@ static bool reroute_stored_statement(ROUTER_CLIENT_SES *rses, const SRWBackend&
|
||||
*/
|
||||
if (rses->current_master->write(stored))
|
||||
{
|
||||
MXS_INFO("Retrying failed read at '%s'.", rses->current_master->server()->unique_name);
|
||||
MXS_INFO("Retrying failed read at '%s'.", rses->current_master->name());
|
||||
LOG_RS(rses->current_master, REPLY_STATE_START);
|
||||
ss_dassert(rses->current_master->get_reply_state() == REPLY_STATE_DONE);
|
||||
rses->current_master->set_reply_state(REPLY_STATE_START);
|
||||
@ -1178,8 +1178,8 @@ static void clientReply(MXS_ROUTER *instance,
|
||||
/** Check pending session commands */
|
||||
else if (!queue_routed && backend->session_command_count())
|
||||
{
|
||||
MXS_INFO("Backend [%s]:%d processed reply and starts to execute active cursor.",
|
||||
backend->server()->name, backend->server()->port);
|
||||
MXS_INFO("Backend %s processed reply and starts to execute active cursor.",
|
||||
backend->uri());
|
||||
|
||||
if (backend->execute_session_command())
|
||||
{
|
||||
@ -1331,7 +1331,7 @@ static void handleError(MXS_ROUTER *instance,
|
||||
{
|
||||
ss_dassert(false);
|
||||
MXS_ERROR("Backend '%s' is still in use and points to the problem DCB.",
|
||||
backend->server()->unique_name);
|
||||
backend->name());
|
||||
}
|
||||
}
|
||||
else
|
||||
|
@ -292,9 +292,8 @@ void check_session_command_reply(GWBUF *buffer, SRWBackend backend)
|
||||
err.append(replybuf + 8, 5);
|
||||
msg.append(replybuf + 13, replylen - 4 - 5);
|
||||
|
||||
MXS_ERROR("Failed to execute session command in [%s]:%d. Error was: %s %s",
|
||||
backend->server()->name, backend->server()->port,
|
||||
err.c_str(), msg.c_str());
|
||||
MXS_ERROR("Failed to execute session command in %s. Error was: %s %s",
|
||||
backend->uri(), err.c_str(), msg.c_str());
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -84,7 +84,7 @@ void handle_connection_keepalive(ROUTER_INSTANCE *inst, ROUTER_CLIENT_SES *rses,
|
||||
if (diff > keepalive)
|
||||
{
|
||||
MXS_INFO("Pinging %s, idle for %d seconds",
|
||||
backend->server()->unique_name, diff / 10);
|
||||
backend->name(), diff / 10);
|
||||
modutil_ignorable_ping(backend->dcb());
|
||||
}
|
||||
}
|
||||
@ -268,14 +268,13 @@ bool route_session_write(ROUTER_CLIENT_SES *rses, GWBUF *querybuf, uint8_t comma
|
||||
rses->expected_responses++;
|
||||
}
|
||||
|
||||
MXS_INFO("Route query to %s \t[%s]:%d",
|
||||
MXS_INFO("Route query to %s \t%s",
|
||||
backend->is_master() ? "master" : "slave",
|
||||
backend->server()->name, backend->server()->port);
|
||||
backend->uri());
|
||||
}
|
||||
else
|
||||
{
|
||||
MXS_ERROR("Failed to execute session command in [%s]:%d",
|
||||
backend->server()->name, backend->server()->port);
|
||||
MXS_ERROR("Failed to execute session command in %s", backend->uri());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -335,7 +334,7 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
|
||||
if (rses->target_node && session_trx_is_read_only(rses->client_dcb->session))
|
||||
{
|
||||
MXS_DEBUG("In READ ONLY transaction, using server '%s'",
|
||||
rses->target_node->server()->unique_name);
|
||||
rses->target_node->name());
|
||||
return rses->target_node;
|
||||
}
|
||||
|
||||
@ -354,7 +353,7 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
|
||||
/** The server must be a valid slave, relay server, or master */
|
||||
|
||||
if (backend->in_use() && backend->is_active() &&
|
||||
(strcasecmp(name, backend->server()->unique_name) == 0) &&
|
||||
(strcasecmp(name, backend->name()) == 0) &&
|
||||
(backend->is_slave() ||
|
||||
backend->is_relay() ||
|
||||
backend->is_master()))
|
||||
@ -443,10 +442,9 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
|
||||
}
|
||||
else
|
||||
{
|
||||
MXS_INFO("Server [%s]:%d is too much behind the master "
|
||||
MXS_INFO("Server %s is too much behind the master "
|
||||
"(%d seconds) and can't be chosen",
|
||||
backend->server()->name, backend->server()->port,
|
||||
backend->server()->rlag);
|
||||
backend->uri(), backend->server()->rlag);
|
||||
}
|
||||
}
|
||||
} /*< for */
|
||||
@ -475,14 +473,14 @@ SRWBackend get_target_backend(ROUTER_CLIENT_SES *rses, backend_type_t btype,
|
||||
{
|
||||
MXS_ERROR("Server '%s' should be master but is %s instead "
|
||||
"and can't be chosen as the master.",
|
||||
master->server()->unique_name,
|
||||
master->name(),
|
||||
STRSRVSTATUS(&server));
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
MXS_ERROR("Server '%s' is not in use and can't be chosen as the master.",
|
||||
master->server()->unique_name);
|
||||
master->name());
|
||||
}
|
||||
}
|
||||
}
|
||||
@ -908,24 +906,24 @@ static void log_master_routing_failure(ROUTER_CLIENT_SES *rses, bool found,
|
||||
{
|
||||
/** We found a master but it's not the same connection */
|
||||
ss_dassert(old_master != curr_master);
|
||||
if (old_master->server() != curr_master->server())
|
||||
if (old_master != curr_master)
|
||||
{
|
||||
sprintf(errmsg, "Master server changed from '%s' to '%s'",
|
||||
old_master->server()->unique_name,
|
||||
curr_master->server()->unique_name);
|
||||
old_master->name(),
|
||||
curr_master->name());
|
||||
}
|
||||
else
|
||||
{
|
||||
ss_dassert(false); // Currently we don't reconnect to the master
|
||||
sprintf(errmsg, "Connection to master '%s' was recreated",
|
||||
curr_master->server()->unique_name);
|
||||
curr_master->name());
|
||||
}
|
||||
}
|
||||
else if (old_master)
|
||||
{
|
||||
/** We have an original master connection but we couldn't find it */
|
||||
sprintf(errmsg, "The connection to master server '%s' is not available",
|
||||
old_master->server()->unique_name);
|
||||
old_master->name());
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -1024,12 +1022,11 @@ handle_got_target(ROUTER_INSTANCE *inst, ROUTER_CLIENT_SES *rses,
|
||||
{
|
||||
rses->target_node = target;
|
||||
MXS_DEBUG("Setting forced_node SLAVE to %s within an opened READ ONLY transaction",
|
||||
target->server()->unique_name);
|
||||
target->name());
|
||||
}
|
||||
|
||||
MXS_INFO("Route query to %s \t[%s]:%d <",
|
||||
(target->is_master() ? "master" : "slave"),
|
||||
target->server()->name, target->server()->port);
|
||||
MXS_INFO("Route query to %s \t%s <", target->is_master() ? "master" : "slave",
|
||||
target->uri());
|
||||
|
||||
/** The session command cursor must not be active */
|
||||
ss_dassert(target->session_command_count() == 0);
|
||||
|
@ -419,8 +419,8 @@ bool select_connect_backend_servers(int router_nservers,
|
||||
SRWBackend& backend = *it;
|
||||
if (backend->in_use())
|
||||
{
|
||||
MXS_INFO("Selected %s in \t[%s]:%d", STRSRVSTATUS(backend->server()),
|
||||
backend->server()->name, backend->server()->port);
|
||||
MXS_INFO("Selected %s in \t%s", STRSRVSTATUS(backend->server()),
|
||||
backend->uri());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -61,7 +61,7 @@ void process_sescmd_response(ROUTER_CLIENT_SES* rses, SRWBackend& backend,
|
||||
{
|
||||
MXS_ERROR("Slave server '%s': response differs from master's response. "
|
||||
"Closing connection due to inconsistent session state.",
|
||||
backend->server()->unique_name);
|
||||
backend->name());
|
||||
backend->close(mxs::Backend::CLOSE_FATAL);
|
||||
*pReconnect = true;
|
||||
}
|
||||
|
Loading…
x
Reference in New Issue
Block a user