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:
@ -356,18 +356,6 @@ void RRRouter::handle_error(RRRouterSession* rses,
|
|||||||
mxs_error_action_t action,
|
mxs_error_action_t action,
|
||||||
bool* succp)
|
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;
|
MXS_SESSION* session = problem_dcb->session;
|
||||||
DCB* client_dcb = session->client_dcb;
|
DCB* client_dcb = session->client_dcb;
|
||||||
mxs_session_state_t sesstate = session->state;
|
mxs_session_state_t sesstate = session->state;
|
||||||
|
@ -182,11 +182,9 @@ struct DCB : public MXB_POLL_DATA
|
|||||||
int fd = DCBFD_CLOSED; /**< The descriptor */
|
int fd = DCBFD_CLOSED; /**< The descriptor */
|
||||||
dcb_state_t state = DCB_STATE_ALLOC; /**< Current descriptor state */
|
dcb_state_t state = DCB_STATE_ALLOC; /**< Current descriptor state */
|
||||||
SSL_STATE ssl_state = SSL_HANDSHAKE_UNKNOWN; /**< Current state of SSL if in use */
|
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* remote = nullptr; /**< Address of remote end */
|
||||||
char* user = nullptr; /**< User name for connection */
|
char* user = nullptr; /**< User name for connection */
|
||||||
struct sockaddr_storage ip; /**< remote IPv4/IPv6 address */
|
struct sockaddr_storage ip; /**< remote IPv4/IPv6 address */
|
||||||
char* protoname = nullptr; /**< Name of the protocol */
|
|
||||||
void* protocol = nullptr; /**< The protocol specific state */
|
void* protocol = nullptr; /**< The protocol specific state */
|
||||||
size_t protocol_packet_length = 0; /**< protocol packet length */
|
size_t protocol_packet_length = 0; /**< protocol packet length */
|
||||||
size_t protocol_bytes_processed = 0; /**< How many bytes have been read */
|
size_t protocol_bytes_processed = 0; /**< How many bytes have been read */
|
||||||
|
@ -195,7 +195,6 @@ DCB::~DCB()
|
|||||||
SSL_free(ssl);
|
SSL_free(ssl);
|
||||||
}
|
}
|
||||||
|
|
||||||
MXS_FREE(protoname);
|
|
||||||
MXS_FREE(remote);
|
MXS_FREE(remote);
|
||||||
MXS_FREE(user);
|
MXS_FREE(user);
|
||||||
MXS_FREE(path);
|
MXS_FREE(path);
|
||||||
@ -371,7 +370,6 @@ DCB* dcb_connect(SERVER* server, MXS_SESSION* session, const char* protocol)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
memcpy(&(dcb->func), funcs, sizeof(MXS_PROTOCOL));
|
memcpy(&(dcb->func), funcs, sizeof(MXS_PROTOCOL));
|
||||||
dcb->protoname = MXS_STRDUP_A(protocol);
|
|
||||||
|
|
||||||
if (session->client_dcb->remote)
|
if (session->client_dcb->remote)
|
||||||
{
|
{
|
||||||
@ -1252,7 +1250,6 @@ static bool dcb_maybe_add_persistent(DCB* dcb)
|
|||||||
&& dcb->server->persistpoolmax
|
&& dcb->server->persistpoolmax
|
||||||
&& (dcb->server->status & SERVER_RUNNING)
|
&& (dcb->server->status & SERVER_RUNNING)
|
||||||
&& !dcb->dcb_errhandle_called
|
&& !dcb->dcb_errhandle_called
|
||||||
&& !(dcb->flags & DCBF_HUNG)
|
|
||||||
&& dcb_persistent_clean_count(dcb, owner->id(), false) < dcb->server->persistpoolmax
|
&& dcb_persistent_clean_count(dcb, owner->id(), false) < dcb->server->persistpoolmax
|
||||||
&& mxb::atomic::load(&dcb->server->stats.n_persistent) < 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);
|
mxb::atomic::add(&dcb->server->stats.n_current, -1, mxb::atomic::RELAXED);
|
||||||
return true;
|
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;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -1329,9 +1314,9 @@ void printDCB(DCB* dcb)
|
|||||||
{
|
{
|
||||||
printf("\tUsername: %s\n", dcb->user);
|
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)
|
if (dcb->writeq)
|
||||||
{
|
{
|
||||||
@ -1437,11 +1422,9 @@ void dprintOneDCB(DCB* pdcb, DCB* dcb)
|
|||||||
"\tUsername: %s\n",
|
"\tUsername: %s\n",
|
||||||
dcb->user);
|
dcb->user);
|
||||||
}
|
}
|
||||||
if (dcb->protoname)
|
if (dcb->listener)
|
||||||
{
|
{
|
||||||
dcb_printf(pdcb,
|
dcb_printf(pdcb, "\tProtocol: %s\n", dcb->listener->protocol());
|
||||||
"\tProtocol: %s\n",
|
|
||||||
dcb->protoname);
|
|
||||||
}
|
}
|
||||||
if (dcb->writeq)
|
if (dcb->writeq)
|
||||||
{
|
{
|
||||||
@ -1595,11 +1578,9 @@ void dprintDCB(DCB* pdcb, DCB* dcb)
|
|||||||
"\tUsername: %s\n",
|
"\tUsername: %s\n",
|
||||||
dcb->user);
|
dcb->user);
|
||||||
}
|
}
|
||||||
if (dcb->protoname)
|
if (dcb->listener)
|
||||||
{
|
{
|
||||||
dcb_printf(pdcb,
|
dcb_printf(pdcb, "\tProtocol: %s\n", dcb->listener->protocol());
|
||||||
"\tProtocol: %s\n",
|
|
||||||
dcb->protoname);
|
|
||||||
}
|
}
|
||||||
|
|
||||||
if (dcb->session && dcb->session->state != SESSION_STATE_DUMMY)
|
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)
|
for (DCB* dcb = this_unit.all_dcbs[id]; dcb; dcb = dcb->thread.next)
|
||||||
{
|
{
|
||||||
if (dcb->state == DCB_STATE_POLLING && dcb->server
|
if (dcb->state == DCB_STATE_POLLING && dcb->server && dcb->server == server)
|
||||||
&& dcb->server == server)
|
|
||||||
{
|
{
|
||||||
dcb->flags |= DCBF_HUNG;
|
dcb->dcb_errhandle_called = true;
|
||||||
dcb->func.hangup(dcb);
|
dcb->func.hangup(dcb);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@ -3084,9 +3064,10 @@ static uint32_t dcb_process_poll_events(DCB* dcb, uint32_t events)
|
|||||||
eno,
|
eno,
|
||||||
strerror_r(eno, errbuf, sizeof(errbuf)));
|
strerror_r(eno, errbuf, sizeof(errbuf)));
|
||||||
rc |= MXB_POLL_HUP;
|
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"))
|
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)));
|
strerror_r(eno, errbuf, sizeof(errbuf)));
|
||||||
rc |= MXB_POLL_HUP;
|
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"))
|
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)
|
while (dcb)
|
||||||
{
|
{
|
||||||
if (dcb->user
|
if (dcb->user
|
||||||
&& dcb->protoname
|
|
||||||
&& dcb->remote
|
&& dcb->remote
|
||||||
&& ip
|
&& ip
|
||||||
&& !dcb->dcb_errhandle_called
|
&& !dcb->dcb_errhandle_called
|
||||||
&& !(dcb->flags & DCBF_HUNG)
|
|
||||||
&& 0 == strcmp(dcb->user, user)
|
&& 0 == strcmp(dcb->user, user)
|
||||||
&& 0 == strcmp(dcb->remote, ip)
|
&& 0 == strcmp(dcb->remote, ip)
|
||||||
&& 0 == strcmp(dcb->protoname, protocol))
|
&& 0 == strcmp(dcb->listener->protocol(), protocol))
|
||||||
{
|
{
|
||||||
if (NULL == previous)
|
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);
|
mxb::atomic::add(&server->stats.n_current, 1, mxb::atomic::RELAXED);
|
||||||
return dcb;
|
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;
|
previous = dcb;
|
||||||
dcb = dcb->nextpersistent;
|
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
|
/** If a DCB gets a read event when it's in the persistent pool, it is
|
||||||
* treated as if it were an error. */
|
* treated as if it were an error. */
|
||||||
dcb->dcb_errhandle_called = true;
|
poll_fake_hangup_event(dcb);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -603,7 +603,6 @@ static void do_handle_error(DCB* dcb, mxs_error_action_t action, const char* err
|
|||||||
&succp);
|
&succp);
|
||||||
|
|
||||||
gwbuf_free(errbuf);
|
gwbuf_free(errbuf);
|
||||||
dcb->dcb_errhandle_called = true;
|
|
||||||
}
|
}
|
||||||
/**
|
/**
|
||||||
* If error handler fails it means that routing session can't continue
|
* If error handler fails it means that routing session can't continue
|
||||||
@ -1352,11 +1351,9 @@ static int gw_backend_hangup(DCB* dcb)
|
|||||||
{
|
{
|
||||||
MXS_SESSION* session = dcb->session;
|
MXS_SESSION* session = dcb->session;
|
||||||
|
|
||||||
if (dcb->persistentstart)
|
if (!dcb->persistentstart)
|
||||||
{
|
{
|
||||||
dcb->dcb_errhandle_called = true;
|
if (session->state != SESSION_STATE_ROUTER_READY)
|
||||||
}
|
|
||||||
else if (session->state != SESSION_STATE_ROUTER_READY)
|
|
||||||
{
|
{
|
||||||
int error;
|
int error;
|
||||||
int len = sizeof(error);
|
int len = sizeof(error);
|
||||||
@ -1374,6 +1371,7 @@ static int gw_backend_hangup(DCB* dcb)
|
|||||||
{
|
{
|
||||||
do_handle_error(dcb, ERRACT_NEW_CONNECTION, "Lost connection to backend server.");
|
do_handle_error(dcb, ERRACT_NEW_CONNECTION, "Lost connection to backend server.");
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
return 1;
|
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;
|
MySQLProtocol* proto = (MySQLProtocol*)dcb->protocol;
|
||||||
int return_code = 0;
|
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)
|
if (rcap_type_required(capabilities, RCAP_TYPE_STMT_INPUT)
|
||||||
|| proto->current_command == MXS_COM_CHANGE_USER)
|
|| proto->current_command == MXS_COM_CHANGE_USER)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user