MXS-2196: Remove redundant DCB member variables
The variables held duplicate information already present in other parts of the system.
This commit is contained in:
parent
694d4a4003
commit
7a87ff9ce1
@ -356,18 +356,6 @@ void RRRouter::handle_error(RRRouterSession* rses,
|
||||
mxs_error_action_t action,
|
||||
bool* succp)
|
||||
{
|
||||
/* Don't handle same error twice on same DCB */
|
||||
if (problem_dcb->dcb_errhandle_called)
|
||||
{
|
||||
/* Assume that previous call succeed. */
|
||||
*succp = true;
|
||||
return;
|
||||
}
|
||||
else
|
||||
{
|
||||
problem_dcb->dcb_errhandle_called = true;
|
||||
}
|
||||
|
||||
MXS_SESSION* session = problem_dcb->session;
|
||||
DCB* client_dcb = session->client_dcb;
|
||||
mxs_session_state_t sesstate = session->state;
|
||||
|
@ -182,11 +182,9 @@ struct DCB : public MXB_POLL_DATA
|
||||
int fd = DCBFD_CLOSED; /**< The descriptor */
|
||||
dcb_state_t state = DCB_STATE_ALLOC; /**< Current descriptor state */
|
||||
SSL_STATE ssl_state = SSL_HANDSHAKE_UNKNOWN; /**< Current state of SSL if in use */
|
||||
int flags = 0; /**< DCB flags */
|
||||
char* remote = nullptr; /**< Address of remote end */
|
||||
char* user = nullptr; /**< User name for connection */
|
||||
struct sockaddr_storage ip; /**< remote IPv4/IPv6 address */
|
||||
char* protoname = nullptr; /**< Name of the protocol */
|
||||
void* protocol = nullptr; /**< The protocol specific state */
|
||||
size_t protocol_packet_length = 0; /**< protocol packet length */
|
||||
size_t protocol_bytes_processed = 0; /**< How many bytes have been read */
|
||||
|
@ -195,7 +195,6 @@ DCB::~DCB()
|
||||
SSL_free(ssl);
|
||||
}
|
||||
|
||||
MXS_FREE(protoname);
|
||||
MXS_FREE(remote);
|
||||
MXS_FREE(user);
|
||||
MXS_FREE(path);
|
||||
@ -371,7 +370,6 @@ DCB* dcb_connect(SERVER* server, MXS_SESSION* session, const char* protocol)
|
||||
return NULL;
|
||||
}
|
||||
memcpy(&(dcb->func), funcs, sizeof(MXS_PROTOCOL));
|
||||
dcb->protoname = MXS_STRDUP_A(protocol);
|
||||
|
||||
if (session->client_dcb->remote)
|
||||
{
|
||||
@ -1252,7 +1250,6 @@ static bool dcb_maybe_add_persistent(DCB* dcb)
|
||||
&& dcb->server->persistpoolmax
|
||||
&& (dcb->server->status & SERVER_RUNNING)
|
||||
&& !dcb->dcb_errhandle_called
|
||||
&& !(dcb->flags & DCBF_HUNG)
|
||||
&& dcb_persistent_clean_count(dcb, owner->id(), false) < dcb->server->persistpoolmax
|
||||
&& mxb::atomic::load(&dcb->server->stats.n_persistent) < dcb->server->persistpoolmax)
|
||||
{
|
||||
@ -1295,19 +1292,7 @@ static bool dcb_maybe_add_persistent(DCB* dcb)
|
||||
mxb::atomic::add(&dcb->server->stats.n_current, -1, mxb::atomic::RELAXED);
|
||||
return true;
|
||||
}
|
||||
else if (dcb->dcb_role == DCB_ROLE_BACKEND_HANDLER && dcb->server)
|
||||
{
|
||||
MXS_DEBUG("Not adding DCB %p to persistent pool, "
|
||||
"user %s, max for pool %ld, error handle called %s, hung flag %s, "
|
||||
"server status %lu, pool count %d.",
|
||||
dcb,
|
||||
dcb->user ? dcb->user : "",
|
||||
dcb->server->persistpoolmax,
|
||||
dcb->dcb_errhandle_called ? "true" : "false",
|
||||
(dcb->flags & DCBF_HUNG) ? "true" : "false",
|
||||
dcb->server->status,
|
||||
dcb->server->stats.n_persistent);
|
||||
}
|
||||
|
||||
return false;
|
||||
}
|
||||
|
||||
@ -1329,9 +1314,9 @@ void printDCB(DCB* dcb)
|
||||
{
|
||||
printf("\tUsername: %s\n", dcb->user);
|
||||
}
|
||||
if (dcb->protoname)
|
||||
if (dcb->listener)
|
||||
{
|
||||
printf("\tProtocol: %s\n", dcb->protoname);
|
||||
printf("\tProtocol: %s\n", dcb->listener->protocol());
|
||||
}
|
||||
if (dcb->writeq)
|
||||
{
|
||||
@ -1437,11 +1422,9 @@ void dprintOneDCB(DCB* pdcb, DCB* dcb)
|
||||
"\tUsername: %s\n",
|
||||
dcb->user);
|
||||
}
|
||||
if (dcb->protoname)
|
||||
if (dcb->listener)
|
||||
{
|
||||
dcb_printf(pdcb,
|
||||
"\tProtocol: %s\n",
|
||||
dcb->protoname);
|
||||
dcb_printf(pdcb, "\tProtocol: %s\n", dcb->listener->protocol());
|
||||
}
|
||||
if (dcb->writeq)
|
||||
{
|
||||
@ -1595,11 +1578,9 @@ void dprintDCB(DCB* pdcb, DCB* dcb)
|
||||
"\tUsername: %s\n",
|
||||
dcb->user);
|
||||
}
|
||||
if (dcb->protoname)
|
||||
if (dcb->listener)
|
||||
{
|
||||
dcb_printf(pdcb,
|
||||
"\tProtocol: %s\n",
|
||||
dcb->protoname);
|
||||
dcb_printf(pdcb, "\tProtocol: %s\n", dcb->listener->protocol());
|
||||
}
|
||||
|
||||
if (dcb->session && dcb->session->state != SESSION_STATE_DUMMY)
|
||||
@ -1982,10 +1963,9 @@ static void dcb_hangup_foreach_worker(MXB_WORKER* worker, struct server* server)
|
||||
|
||||
for (DCB* dcb = this_unit.all_dcbs[id]; dcb; dcb = dcb->thread.next)
|
||||
{
|
||||
if (dcb->state == DCB_STATE_POLLING && dcb->server
|
||||
&& dcb->server == server)
|
||||
if (dcb->state == DCB_STATE_POLLING && dcb->server && dcb->server == server)
|
||||
{
|
||||
dcb->flags |= DCBF_HUNG;
|
||||
dcb->dcb_errhandle_called = true;
|
||||
dcb->func.hangup(dcb);
|
||||
}
|
||||
}
|
||||
@ -3084,9 +3064,10 @@ static uint32_t dcb_process_poll_events(DCB* dcb, uint32_t events)
|
||||
eno,
|
||||
strerror_r(eno, errbuf, sizeof(errbuf)));
|
||||
rc |= MXB_POLL_HUP;
|
||||
if ((dcb->flags & DCBF_HUNG) == 0)
|
||||
|
||||
if (!dcb->dcb_errhandle_called)
|
||||
{
|
||||
dcb->flags |= DCBF_HUNG;
|
||||
dcb->dcb_errhandle_called = true;
|
||||
|
||||
if (dcb_session_check(dcb, "hangup EPOLLHUP"))
|
||||
{
|
||||
@ -3111,9 +3092,9 @@ static uint32_t dcb_process_poll_events(DCB* dcb, uint32_t events)
|
||||
strerror_r(eno, errbuf, sizeof(errbuf)));
|
||||
rc |= MXB_POLL_HUP;
|
||||
|
||||
if ((dcb->flags & DCBF_HUNG) == 0)
|
||||
if (!dcb->dcb_errhandle_called)
|
||||
{
|
||||
dcb->flags |= DCBF_HUNG;
|
||||
dcb->dcb_errhandle_called = true;
|
||||
|
||||
if (dcb_session_check(dcb, "hangup EPOLLRDHUP"))
|
||||
{
|
||||
|
@ -265,14 +265,12 @@ DCB* server_get_persistent(SERVER* server, const char* user, const char* ip, con
|
||||
while (dcb)
|
||||
{
|
||||
if (dcb->user
|
||||
&& dcb->protoname
|
||||
&& dcb->remote
|
||||
&& ip
|
||||
&& !dcb->dcb_errhandle_called
|
||||
&& !(dcb->flags & DCBF_HUNG)
|
||||
&& 0 == strcmp(dcb->user, user)
|
||||
&& 0 == strcmp(dcb->remote, ip)
|
||||
&& 0 == strcmp(dcb->protoname, protocol))
|
||||
&& 0 == strcmp(dcb->listener->protocol(), protocol))
|
||||
{
|
||||
if (NULL == previous)
|
||||
{
|
||||
@ -288,20 +286,7 @@ DCB* server_get_persistent(SERVER* server, const char* user, const char* ip, con
|
||||
mxb::atomic::add(&server->stats.n_current, 1, mxb::atomic::RELAXED);
|
||||
return dcb;
|
||||
}
|
||||
else
|
||||
{
|
||||
MXS_DEBUG("%lu [server_get_persistent] Rejected dcb "
|
||||
"%p from pool, user %s looking for %s, protocol %s "
|
||||
"looking for %s, hung flag %s, error handle called %s.",
|
||||
pthread_self(),
|
||||
dcb,
|
||||
dcb->user ? dcb->user : "NULL",
|
||||
user,
|
||||
dcb->protoname ? dcb->protoname : "NULL",
|
||||
protocol,
|
||||
(dcb->flags & DCBF_HUNG) ? "true" : "false",
|
||||
dcb->dcb_errhandle_called ? "true" : "false");
|
||||
}
|
||||
|
||||
previous = dcb;
|
||||
dcb = dcb->nextpersistent;
|
||||
}
|
||||
|
@ -482,7 +482,7 @@ static int gw_read_backend_event(DCB* dcb)
|
||||
{
|
||||
/** If a DCB gets a read event when it's in the persistent pool, it is
|
||||
* treated as if it were an error. */
|
||||
dcb->dcb_errhandle_called = true;
|
||||
poll_fake_hangup_event(dcb);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@ -603,7 +603,6 @@ static void do_handle_error(DCB* dcb, mxs_error_action_t action, const char* err
|
||||
&succp);
|
||||
|
||||
gwbuf_free(errbuf);
|
||||
dcb->dcb_errhandle_called = true;
|
||||
}
|
||||
/**
|
||||
* If error handler fails it means that routing session can't continue
|
||||
@ -1352,27 +1351,26 @@ static int gw_backend_hangup(DCB* dcb)
|
||||
{
|
||||
MXS_SESSION* session = dcb->session;
|
||||
|
||||
if (dcb->persistentstart)
|
||||
if (!dcb->persistentstart)
|
||||
{
|
||||
dcb->dcb_errhandle_called = true;
|
||||
}
|
||||
else if (session->state != SESSION_STATE_ROUTER_READY)
|
||||
{
|
||||
int error;
|
||||
int len = sizeof(error);
|
||||
if (getsockopt(dcb->fd, SOL_SOCKET, SO_ERROR, &error, (socklen_t*) &len) == 0)
|
||||
if (session->state != SESSION_STATE_ROUTER_READY)
|
||||
{
|
||||
if (error != 0 && session->state != SESSION_STATE_STOPPING)
|
||||
int error;
|
||||
int len = sizeof(error);
|
||||
if (getsockopt(dcb->fd, SOL_SOCKET, SO_ERROR, &error, (socklen_t*) &len) == 0)
|
||||
{
|
||||
MXS_ERROR("Hangup in session that is not ready for routing, "
|
||||
"Error reported is '%s'.",
|
||||
mxs_strerror(errno));
|
||||
if (error != 0 && session->state != SESSION_STATE_STOPPING)
|
||||
{
|
||||
MXS_ERROR("Hangup in session that is not ready for routing, "
|
||||
"Error reported is '%s'.",
|
||||
mxs_strerror(errno));
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
do_handle_error(dcb, ERRACT_NEW_CONNECTION, "Lost connection to backend server.");
|
||||
else
|
||||
{
|
||||
do_handle_error(dcb, ERRACT_NEW_CONNECTION, "Lost connection to backend server.");
|
||||
}
|
||||
}
|
||||
|
||||
return 1;
|
||||
|
@ -1194,9 +1194,6 @@ static int gw_read_finish_processing(DCB* dcb, GWBUF* read_buffer, uint64_t capa
|
||||
MySQLProtocol* proto = (MySQLProtocol*)dcb->protocol;
|
||||
int return_code = 0;
|
||||
|
||||
/** Reset error handler when routing of the new query begins */
|
||||
dcb->dcb_errhandle_called = false;
|
||||
|
||||
if (rcap_type_required(capabilities, RCAP_TYPE_STMT_INPUT)
|
||||
|| proto->current_command == MXS_COM_CHANGE_USER)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user