Make packet boundary assertion less costly
mxs::Buffer::iterator is not a random-access iterator and hence will have linear cost. This is too costly to do on every packet with even moderately sized resultsets.
This commit is contained in:
@ -284,6 +284,8 @@ void RWBackend::process_packets(GWBUF* result)
|
|||||||
{
|
{
|
||||||
mxs::Buffer buffer(result);
|
mxs::Buffer buffer(result);
|
||||||
auto it = buffer.begin();
|
auto it = buffer.begin();
|
||||||
|
MXB_AT_DEBUG(size_t total_len = buffer.length());
|
||||||
|
MXB_AT_DEBUG(size_t used_len = 0);
|
||||||
|
|
||||||
while (it != buffer.end())
|
while (it != buffer.end())
|
||||||
{
|
{
|
||||||
@ -293,7 +295,8 @@ void RWBackend::process_packets(GWBUF* result)
|
|||||||
len |= (*it++) << 16;
|
len |= (*it++) << 16;
|
||||||
++it; // Skip the sequence
|
++it; // Skip the sequence
|
||||||
mxb_assert(it != buffer.end());
|
mxb_assert(it != buffer.end());
|
||||||
mxb_assert(std::distance(it, buffer.end()) >= len);
|
mxb_assert(used_len + len < total_len);
|
||||||
|
MXB_AT_DEBUG(used_len += len);
|
||||||
auto end = it;
|
auto end = it;
|
||||||
end.advance(len);
|
end.advance(len);
|
||||||
uint8_t cmd = *it;
|
uint8_t cmd = *it;
|
||||||
|
Reference in New Issue
Block a user