MB-24294: Stop couch-kvstore changing the file revision 24/78024/8
authorJim Walker <jim@couchbase.com>
Thu, 11 May 2017 15:38:35 +0000 (16:38 +0100)
committerDave Rigby <daver@couchbase.com>
Mon, 22 May 2017 08:33:24 +0000 (08:33 +0000)
commit191c1efacbcac3113ac1d5637754fb3730ca3370
tree46c011c28c59987e1eb554db55da764a2b4c71b9
parent41c8ca3a39613d10598f1a24823c5579b975c07f
MB-24294: Stop couch-kvstore changing the file revision

There's a lot of code around the open paths which may open a different
file-revision to the one requested, which is the cause of MB-24294.

In summary we asked for 0.couch.6, which doesn't yet exist and the
checkNewRevNum function (now removed) would then look for 0.couch.*
files and depending on the async delete task's progress may find
0.couch.5 and direct saveDocs into that VB, which is about to be
deleted...

The main fix here is to remove checkNewRevNum, if we have a
dbFileRevMap value of n, we should open/create 0.couch.n and never
anything else.

This lead onto finding an issue where the RO instance of CouchKVStore
was relying on populating it's "copy" of the revision map via failing
to open 0.couch.0 and then looking for 0.couch.* and updating the map
from what it finds. So this is fixed by having a single dbFileRevMap
which is now referenced by the RW/RO pair.

Change-Id: I03dbb0c0a3e635397a12d85ea6092aa1312354b7
Reviewed-on: http://review.couchbase.org/78024
Reviewed-by: Dave Rigby <daver@couchbase.com>
Tested-by: Build Bot <build@couchbase.com>
src/couch-kvstore/couch-kvstore.cc
src/couch-kvstore/couch-kvstore.h
src/kvshard.cc
src/kvstore.cc
src/kvstore.h
tests/module_tests/collections/evp_store_collections_test.cc
tests/module_tests/kvstore_test.cc