Merge branch '2.1' into develop
This commit is contained in:
@ -386,21 +386,23 @@ int CacheFilterSession::clientReply(GWBUF* pData)
|
||||
if (m_res.pData)
|
||||
{
|
||||
gwbuf_append(m_res.pData, pData);
|
||||
m_res.length += gwbuf_length(pData); // pData may be a chain, so not GWBUF_LENGTH().
|
||||
}
|
||||
else
|
||||
{
|
||||
m_res.pData = pData;
|
||||
m_res.length = gwbuf_length(pData);
|
||||
}
|
||||
|
||||
if (m_state != CACHE_IGNORING_RESPONSE)
|
||||
{
|
||||
if (cache_max_resultset_size_exceeded(m_pCache->config(), gwbuf_length(m_res.pData)))
|
||||
if (cache_max_resultset_size_exceeded(m_pCache->config(), m_res.length))
|
||||
{
|
||||
if (log_decisions())
|
||||
{
|
||||
MXS_NOTICE("Current size %uB of resultset, at least as much "
|
||||
MXS_NOTICE("Current size %luB of resultset, at least as much "
|
||||
"as maximum allowed size %luKiB. Not caching.",
|
||||
gwbuf_length(m_res.pData),
|
||||
m_res.length,
|
||||
m_pCache->config().max_resultset_size / 1024);
|
||||
}
|
||||
|
||||
@ -466,7 +468,8 @@ int CacheFilterSession::handle_expecting_fields()
|
||||
|
||||
bool insufficient = false;
|
||||
|
||||
size_t buflen = gwbuf_length(m_res.pData);
|
||||
size_t buflen = m_res.length;
|
||||
ss_dassert(m_res.length == gwbuf_length(m_res.pData));
|
||||
|
||||
while (!insufficient && (buflen - m_res.offset >= MYSQL_HEADER_LEN))
|
||||
{
|
||||
@ -528,7 +531,8 @@ int CacheFilterSession::handle_expecting_response()
|
||||
|
||||
int rv = 1;
|
||||
|
||||
size_t buflen = gwbuf_length(m_res.pData);
|
||||
size_t buflen = m_res.length;
|
||||
ss_dassert(m_res.length == gwbuf_length(m_res.pData));
|
||||
|
||||
if (buflen >= MYSQL_HEADER_LEN + 1) // We need the command byte.
|
||||
{
|
||||
@ -601,7 +605,8 @@ int CacheFilterSession::handle_expecting_rows()
|
||||
|
||||
bool insufficient = false;
|
||||
|
||||
size_t buflen = gwbuf_length(m_res.pData);
|
||||
size_t buflen = m_res.length;
|
||||
ss_dassert(m_res.length == gwbuf_length(m_res.pData));
|
||||
|
||||
while (!insufficient && (buflen - m_res.offset >= MYSQL_HEADER_LEN))
|
||||
{
|
||||
@ -661,7 +666,8 @@ int CacheFilterSession::handle_expecting_use_response()
|
||||
|
||||
int rv = 1;
|
||||
|
||||
size_t buflen = gwbuf_length(m_res.pData);
|
||||
size_t buflen = m_res.length;
|
||||
ss_dassert(m_res.length == gwbuf_length(m_res.pData));
|
||||
|
||||
if (buflen >= MYSQL_HEADER_LEN + 1) // We need the command byte.
|
||||
{
|
||||
@ -733,6 +739,7 @@ int CacheFilterSession::send_upstream()
|
||||
void CacheFilterSession::reset_response_state()
|
||||
{
|
||||
m_res.pData = NULL;
|
||||
m_res.length = 0;
|
||||
m_res.nTotalFields = 0;
|
||||
m_res.nFields = 0;
|
||||
m_res.nRows = 0;
|
||||
|
@ -35,6 +35,7 @@ public:
|
||||
struct CACHE_RESPONSE_STATE
|
||||
{
|
||||
GWBUF* pData; /**< Response data, possibly incomplete. */
|
||||
size_t length; /**< Length of pData. */
|
||||
size_t nTotalFields; /**< The number of fields a resultset contains. */
|
||||
size_t nFields; /**< How many fields we have received, <= n_totalfields. */
|
||||
size_t nRows; /**< How many rows we have received. */
|
||||
|
@ -187,6 +187,7 @@ typedef struct maxrows_response_state
|
||||
size_t n_rows; /**< How many rows we have received. */
|
||||
size_t offset; /**< Where we are in the response buffer. */
|
||||
size_t rows_offset; /**< Offset to first row in result set */
|
||||
size_t length; /**< Buffer size. */
|
||||
} MAXROWS_RESPONSE_STATE;
|
||||
|
||||
static void maxrows_response_state_reset(MAXROWS_RESPONSE_STATE *state);
|
||||
@ -354,6 +355,8 @@ static int routeQuery(MXS_FILTER *instance,
|
||||
csdata->state = MAXROWS_IGNORING_RESPONSE;
|
||||
csdata->large_packet = false;
|
||||
csdata->discard_resultset = false;
|
||||
// Set buffer size to 0
|
||||
csdata->res.length = 0;
|
||||
|
||||
switch ((int)MYSQL_GET_COMMAND(data))
|
||||
{
|
||||
@ -414,23 +417,25 @@ static int clientReply(MXS_FILTER *instance,
|
||||
if (csdata->res.data)
|
||||
{
|
||||
gwbuf_append(csdata->res.data, data);
|
||||
csdata->res.length += gwbuf_length(data);
|
||||
}
|
||||
else
|
||||
{
|
||||
csdata->res.data = data;
|
||||
csdata->res.length = gwbuf_length(data);
|
||||
}
|
||||
|
||||
if (csdata->state != MAXROWS_IGNORING_RESPONSE)
|
||||
{
|
||||
if (!csdata->discard_resultset)
|
||||
{
|
||||
if (gwbuf_length(csdata->res.data) > csdata->instance->config.max_resultset_size)
|
||||
if (csdata->res.length > csdata->instance->config.max_resultset_size)
|
||||
{
|
||||
if (csdata->instance->config.debug & MAXROWS_DEBUG_DISCARDING)
|
||||
{
|
||||
MXS_NOTICE("Current size %uB of resultset, at least as much "
|
||||
MXS_NOTICE("Current size %luB of resultset, at least as much "
|
||||
"as maximum allowed size %uKiB. Not returning data.",
|
||||
gwbuf_length(csdata->res.data),
|
||||
csdata->res.length,
|
||||
csdata->instance->config.max_resultset_size / 1024);
|
||||
}
|
||||
|
||||
@ -573,7 +578,7 @@ static int handle_expecting_fields(MAXROWS_SESSION_DATA *csdata)
|
||||
|
||||
bool insufficient = false;
|
||||
|
||||
size_t buflen = gwbuf_length(csdata->res.data);
|
||||
size_t buflen = csdata->res.length;
|
||||
|
||||
while (!insufficient && (buflen - csdata->res.offset >= MYSQL_HEADER_LEN))
|
||||
{
|
||||
@ -650,7 +655,7 @@ static int handle_expecting_response(MAXROWS_SESSION_DATA *csdata)
|
||||
ss_dassert(csdata->res.data);
|
||||
|
||||
int rv = 1;
|
||||
size_t buflen = gwbuf_length(csdata->res.data);
|
||||
size_t buflen = csdata->res.length;
|
||||
|
||||
// Reset field counters
|
||||
csdata->res.n_fields = 0;
|
||||
@ -770,7 +775,7 @@ static int handle_rows(MAXROWS_SESSION_DATA *csdata)
|
||||
|
||||
int rv = 1;
|
||||
bool insufficient = false;
|
||||
size_t buflen = gwbuf_length(csdata->res.data);
|
||||
size_t buflen = csdata->res.length;
|
||||
|
||||
while (!insufficient && (buflen - csdata->res.offset >= MYSQL_HEADER_LEN))
|
||||
{
|
||||
|
Reference in New Issue
Block a user