MXS-1366: Validate closed connections before pooling them

When a session is being closed in a controlled manner, i.e. a COM_QUIT is
received from the client, it is possible to deduce from this fact that the
backend connections are very likely to be idle. This can be used as an
additional qualification that must be met by all connections before they
can be candidates for connection pooling.

This assumption will not hold with batched and asynchronous queries. In
this case it is possible that the COM_QUIT is received from the client
before even the first result from the backend is read. For this to work,
the protocol module would need to track the number and state of expected
responses.
This commit is contained in:
Markus Mäkelä
2017-08-21 10:31:07 +03:00
parent b56594470b
commit 5b1f8afcd9
4 changed files with 42 additions and 0 deletions

View File

@ -1662,6 +1662,8 @@ dcb_maybe_add_persistent(DCB *dcb)
&& (dcb->func.established == NULL || dcb->func.established(dcb))
&& strlen(dcb->user)
&& dcb->server
&& dcb->session
&& session_valid_for_pool(dcb->session)
&& dcb->server->persistpoolmax
&& (dcb->server->status & SERVER_RUNNING)
&& !dcb->dcb_errhandle_called