MB-21540: Refactor VBucketVisitor to remove need for abort 71/69371/5
authorDave Rigby <daver@couchbase.com>
Tue, 1 Nov 2016 15:42:12 +0000 (15:42 +0000)
committerDave Rigby <daver@couchbase.com>
Fri, 4 Nov 2016 13:29:48 +0000 (13:29 +0000)
commit027e594be704a8372f4494df94d049dd823f2f8b
tree24f762d7038a3e09ec3ea4bcaa4fc0fa8c1cbef1
parenteafab68a2731db75bdfa772ac3e2e358873a6cfb
MB-21540: Refactor VBucketVisitor to remove need for abort

VBucketVisitor is used to visit all VBuckets in a Bucket, and is
currently implemented as a derived class of HashTableVisitor - as the
intent is that concrete classes will iterate at two levels - first
over each VBucket, and then for all StoredValues within the HashTable
of that VBucket.

However, not all derived classes actually visit the individual
StoredValues - many just operate at the VBucket level. As such, these
classes do not expect the visit(StoredValue*) method to be called, and
have abort()s on these code paths.

This is undesirable - it should be possible to statically (i.e. at
compile-time) ensure that such functions are never called.

To address this (and remove the abort() calls), modify VBucketVisitor
so it doesn't inherit from HashTableVisitor - essentially it just
deals with visiting at the VBucket level, which *is* true for all
derived classes. For those derived classes which /do/ wish to perform
recursive visiting of StoredValue, the derived class itself can
inherit from HashTableVisitor.

Additionally, as VBucketVisitor only deals with VBucket visiting,
simpify the visiting logic to a "classic" Visitor pattern, making
visitBucket return void (instead of bool), and let the visitBucket()
method itself handle what do with the VBucket is it passed. This means
that the caller (e.g. EventuallyPersistentStore::visit()) no longer
chooses if the HashTable::visit method is called - the derived class
can call that itself if it chooses.

Change-Id: I1dc8724db9e89daff261bccfe22dc6e2db885b22
Reviewed-on: http://review.couchbase.org/69371
Tested-by: buildbot <build@couchbase.com>
Reviewed-by: Daniel Owen <owend@couchbase.com>
src/access_scanner.cc
src/backfill.cc
src/backfill.h
src/checkpoint_remover.cc
src/ep.cc
src/ep.h
src/ep_engine.cc
src/ep_engine.h
src/htresizer.cc
src/item_pager.cc
src/warmup.cc