MB-24089: Handle DCP backfill buffers smaller than item size correctly 04/77304/7
authorManu Dhundi <manu@couchbase.com>
Wed, 26 Apr 2017 00:53:16 +0000 (17:53 -0700)
committerManu Dhundi <manu@couchbase.com>
Fri, 28 Apr 2017 18:19:15 +0000 (18:19 +0000)
commita4d9bd281bfdeb950efd762e1a3290e62069b14d
tree90960ffaa1a5ca3d47664f2fbf8b987a59cef1d2
parentc1dbcf067266644857e8b60b1939a27f31e74887
MB-24089: Handle DCP backfill buffers smaller than item size correctly

When items are drained from DCP readyQ, we free up the DCP backfill
buffer (that is, we decrement its memory usage). This commit addresses
2 bugs in that:
1. We never set the backfill buffer full status to false when the
   next read size is larger than max buffer size. This can result in
   backfill hangs with items larger than backfill buffer size.
2. We may never set the backfill buffer full status to false when
   buffer.bytesRead == (buffer.maxBytes * 3 / 4) == 0. In practice
   this may never happen as buffer.maxBytes is generally > 4 :).

This commit has fix for both 1 and 2. Also adds a functional test
and a unit test reproducing the bug 1.

Change-Id: Icf9512bbe6f21296374958b69cfbe851ec8873b3
Reviewed-on: http://review.couchbase.org/77304
Reviewed-by: Dave Rigby <daver@couchbase.com>
Tested-by: Build Bot <build@couchbase.com>
src/dcp/backfill-manager.cc
src/dcp/backfill-manager.h
src/dcp/stream.h
tests/ep_testsuite_dcp.cc
tests/mock/mock_dcp_backfill_mgr.h [new file with mode: 0644]
tests/mock/mock_dcp_producer.h
tests/mock/mock_stream.h
tests/module_tests/dcp_test.cc