MB-23714: Make VBucketPtr deletion schedule the delete of the VBucket 00/77100/14
authorJim Walker <jim@couchbase.com>
Thu, 20 Apr 2017 16:06:46 +0000 (17:06 +0100)
committerDave Rigby <daver@couchbase.com>
Thu, 27 Apr 2017 15:46:13 +0000 (15:46 +0000)
commit890dfcd957a797110da36b031d69ee3ab6f4e279
tree0094417711da66957bba57093f047a5a79b50bd3
parent5123752ee98f6c3e0faac43633baba6ecc209531
MB-23714: Make VBucketPtr deletion schedule the delete of the VBucket

Using the std::shared_ptr Deleter this patch hooks into the deletion
of the VBucket so that a specific AUXIO (for persistent buckets) or a
NONIO (for ephemeral buckets) task performs the removal of VBucket
resources. This to ensure that no front-end thread runs the removal of
memory and more specifically the deletion of the disk data.

The aim of this commit is also to ensure there's no "race" between a
background task deleting the VB disk file when the VB has itself been
recreated. This is achieved now by having the creation of a VB to
increment the revision of the file and ensuring a delete can only
delete the older revision of the VB.

This has a few subtle changes, as only compaction or creation are
moving the revision forward, no code paths move the revision back.

1. A flush of the bucket which calls KVStore::reset would previously
return all vbuckets to a revision of 1. Again to ensure a delete task
cannot delete a "live" file, the flush doesn't reset the revision
number. So a flush of the bucket will result in deleted data, but
with x.couch.4 etc...

2. A delete of an individual vbucket has the same change. Previously
after a delete, the revision was reset to 1. This is no longer the
case and after the delete completes the revision is left unchanged.

Change-Id: I40d2f5fd658d9f8dd28a671028544831518a90d0
Reviewed-on: http://review.couchbase.org/77100
Tested-by: Build Bot <build@couchbase.com>
Reviewed-by: Dave Rigby <daver@couchbase.com>
33 files changed:
CMakeLists.txt
src/couch-kvstore/couch-kvstore.cc
src/couch-kvstore/couch-kvstore.h
src/ep_bucket.cc
src/ep_vb.cc
src/ep_vb.h
src/ephemeral_bucket.cc
src/ephemeral_vb.cc
src/ephemeral_vb.h
src/globaltask.cc
src/hash_table.cc
src/hash_table.h
src/kv_bucket.cc
src/kv_bucket.h
src/kv_bucket_iface.h
src/kvshard.cc
src/kvshard.h
src/kvstore.h
src/tasks.cc
src/tasks.def.h
src/tasks.h
src/vbucket.cc
src/vbucket.h
src/vbucketdeletiontask.cc [new file with mode: 0644]
src/vbucketdeletiontask.h [new file with mode: 0644]
src/vbucketmap.cc
src/vbucketmap.h
src/vbucketmemorydeletiontask.cc [deleted file]
src/vbucketmemorydeletiontask.h [deleted file]
tests/ep_testsuite_basic.cc
tests/module_tests/evp_store_single_threaded_test.cc
tests/module_tests/evp_store_test.cc
tests/module_tests/kv_bucket_test.cc