Move OSV::stale back to StoredValue 74/76774/5
authorDave Rigby <daver@couchbase.com>
Thu, 13 Apr 2017 13:01:56 +0000 (14:01 +0100)
committerDave Rigby <daver@couchbase.com>
Wed, 19 Apr 2017 07:28:42 +0000 (07:28 +0000)
commit24a96c7df25d4169b0f657c0c790e4d79e46dec0
tree3ac1cf6c637f66bc30509da15fab576fc1b253fa
parente23a2acac1e6829e64384f209f455c1af2c5860e
Move OSV::stale back to StoredValue

As part of MB-23795 it was necessary to move the OrderedStoredValue
{stale} flag out of the packed bitfields in StoredValue so it didn't
share its byte with any other data not guarded by writeLock. This was
to prevent any data races, as C++/x86_64 only exposes byte-level
addressing and if it remained in the bitfield we'd see races when
other elements in the bitfield (e.g. deleted) were changed.

While fixing the correctness issue, this had the consequence of
bloating the size of OrderedStoredValue by 8 bytes; as OSV was
previously an exact multiple of 8 bytes in size, and adding one more
byte for the bitfield forced the object size to increase by 8 bytes to
maintain ABI alignment rules.

However, we actually /do/ have a spare byte in StoredValue after the
bitfields. If we move the stale flag back to SV, but in its own byte
then we recover the size bloat of OSV - we are back to the original SV
and OSV sizes before MB-23795.

Change-Id: I15d299dcdd0107915c8b50c717305e2ecb9960a4
Reviewed-on: http://review.couchbase.org/76774
Tested-by: Build Bot <build@couchbase.com>
Reviewed-by: Manu Dhundi <manu@couchbase.com>
src/stored-value.h
tests/module_tests/stored_value_test.cc