MB-23767: Notify vb high priority requests in a separate task 59/76659/12
authorManu Dhundi <manu@couchbase.com>
Thu, 13 Apr 2017 16:31:19 +0000 (09:31 -0700)
committerManu Dhundi <manu@couchbase.com>
Thu, 13 Apr 2017 17:34:39 +0000 (17:34 +0000)
commit8e346ccbea9ad4d7a60b2237e3f66db2834aed6d
tree6de78db1dc7e8fc745b5d32830fbacd6d1c5741f
parent292cd811efe94f497d691c561cc3ba67df95a1de
MB-23767: Notify vb high priority requests in a separate task

Vbucket high priority requests are made by ns server during rebalance
wherein it expects a notification when the vbucket receives upto a
particular seqno.

We must send this notification in a separate task rather than in
front end thread to avoid deadlocks due to lock inversion.
That is, a front end thread generally makes call down the stack and
acquires locks in the order top to down (in our software stack).
But a notification path is up the software stack and hence must be
done as a separate task.

This commit creates a daemon task per Ephemeral Bucket to notify
vb high priority reuqests. When the task runs it notifies all the
connections to be notified as goes to sleep. When a new connection
is to be notified the task is woken again.

The current deadlock that was hit is captured in MB-23767.

Change-Id: Id114bedb5cd4de8b493ae6885734c3d440c8bea3
Reviewed-on: http://review.couchbase.org/76659
Reviewed-by: Dave Rigby <daver@couchbase.com>
Tested-by: Build Bot <build@couchbase.com>
src/ep_vb.cc
src/ephemeral_bucket.cc
src/ephemeral_bucket.h
src/ephemeral_vb.cc
src/tasks.def.h
src/vbucket.cc
src/vbucket.h