MB-17006: [BP] DCP Producer could miss fetching items from a stream 41/57641/5
authorabhinavdangeti <abhinav@couchbase.com>
Mon, 7 Dec 2015 21:02:55 +0000 (13:02 -0800)
committerChiyoung Seo <chiyoung@couchbase.com>
Wed, 9 Dec 2015 23:47:44 +0000 (23:47 +0000)
commitea9701c19b87614a7f00fa75580e4bea9ce2bdd6
tree2fa4432c48f5860af9ca54cd02340ab438a06da6
parent3f7ad6734a9499d3a9bfb9dbaae9ee7b07d06a29
MB-17006: [BP] DCP Producer could miss fetching items from a stream

Here's the scenario:
1. Stream currently in backfill phase
2. When backfill is received, 1 item added to readyQ
    a. itemsReady of stream set to true (Producer notified)
3. Front end op comes in
    a. item added to checkpoint queue
    b. itemsReady not set to true, as it already is (Producer not
      notified)
4. Producer calls stream::next()
    a. stream in backfillPhase(): 1 item popped from readyQ
    b. backfill task still running => no state transition to IN_MEMORY
    c. 1 op returned to producer, producer re-adds vbucket to ready list
5. Backfill completes
6. Producer calls stream::next()
    a. stream in backfillPhase(): no items in readyQ
    b. As backfill task has completed, state transitions to IN_MEMORY
    c. no items in readyQ => NULL returned
    d. As no op obtained, producer doesn't re-add vbucket to ready list

=> Front end item remains stuck in checkpoint queue, until more front
end ops come in - which would notify the producer

The proposed fix here is: In step 6b, when the producer sees the
backfill task has completed, and the state for the stream transitions
to IN_MEMORY, move checkpoint items into readyQ. This way the readyQ
will not be empty, and the producer would re-add the vbucket back into
the ready list.

Change-Id: I3403d3926f97788074990ef0e4c69cac902b2a93
Reviewed-on: http://review.couchbase.org/57516
Tested-by: buildbot <build@couchbase.com>
Reviewed-by: Chiyoung Seo <chiyoung@couchbase.com>
Change-Id: I0821402fefd01f0851572d7c22ccee5fc065778d
Reviewed-on: http://review.couchbase.org/57641
Well-Formed: buildbot <build@couchbase.com>
Reviewed-by: Chiyoung Seo <chiyoung@couchbase.com>
Tested-by: buildbot <build@couchbase.com>
src/dcp-stream.cc
tests/ep_testsuite.cc