Slaves are set to unregistered state once disconnected
It was possible that the same slave was disconnected multiple times before the slave DCB was closed.
This commit is contained in:

committed by
Johan Wikman

parent
9a3aae64ce
commit
000a044da6
@ -2656,7 +2656,8 @@ blr_slave_disconnect_server(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, int se
|
|||||||
while (sptr)
|
while (sptr)
|
||||||
{
|
{
|
||||||
/* don't examine slaves with state = 0 */
|
/* don't examine slaves with state = 0 */
|
||||||
if (sptr->state != 0 && sptr->serverid == server_id)
|
if ((sptr->state == BLRS_REGISTERED || sptr->state == BLRS_DUMPING) &&
|
||||||
|
sptr->serverid == server_id)
|
||||||
{
|
{
|
||||||
/* server_id found */
|
/* server_id found */
|
||||||
server_found = 1;
|
server_found = 1;
|
||||||
@ -2670,6 +2671,7 @@ blr_slave_disconnect_server(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave, int se
|
|||||||
/* send server_id with disconnect state to client */
|
/* send server_id with disconnect state to client */
|
||||||
n = blr_slave_send_disconnected_server(router, slave, server_id, 1);
|
n = blr_slave_send_disconnected_server(router, slave, server_id, 1);
|
||||||
|
|
||||||
|
sptr->state = BLRS_UNREGISTERED;
|
||||||
dcb_close(sptr->dcb);
|
dcb_close(sptr->dcb);
|
||||||
|
|
||||||
break;
|
break;
|
||||||
@ -2731,7 +2733,7 @@ blr_slave_disconnect_all(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave)
|
|||||||
while (sptr)
|
while (sptr)
|
||||||
{
|
{
|
||||||
/* skip servers with state = 0 */
|
/* skip servers with state = 0 */
|
||||||
if (sptr->state != 0)
|
if (sptr->state == BLRS_REGISTERED || sptr->state == BLRS_DUMPING)
|
||||||
{
|
{
|
||||||
sprintf(server_id, "%d", sptr->serverid);
|
sprintf(server_id, "%d", sptr->serverid);
|
||||||
sprintf(state, "disconnected");
|
sprintf(state, "disconnected");
|
||||||
@ -2768,6 +2770,7 @@ blr_slave_disconnect_all(ROUTER_INSTANCE *router, ROUTER_SLAVE *slave)
|
|||||||
|
|
||||||
slave->dcb->func.write(slave->dcb, pkt);
|
slave->dcb->func.write(slave->dcb, pkt);
|
||||||
|
|
||||||
|
sptr->state = BLRS_UNREGISTERED;
|
||||||
dcb_close(sptr->dcb);
|
dcb_close(sptr->dcb);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user