MB-20623: Remove unused fields from temporary warmup data structures 42/68042/7
authorDave Rigby <daver@couchbase.com>
Mon, 22 Aug 2016 14:43:29 +0000 (15:43 +0100)
committerDave Rigby <daver@couchbase.com>
Fri, 30 Sep 2016 15:06:56 +0000 (15:06 +0000)
commit050d6e32e712aceec4e15a476cda9106216023b9
tree7ebd464893a34aa48c5409eb130903eb91f08e62
parentbce7b0af0b583d1a5c8231246be45b5a65ecd724
MB-20623: Remove unused fields from temporary warmup data structures

Warmup currently creates three data structures (per vBucket) in memory
when warming up using the access.log:

1. A map of keys -> sequence number at the time the access log was
   generated - MutationLogHarvester::committed

2. A list of {key, hashTable_seqNo} pairs -
   MutationLogHarvester::apply::fetches

3. A map of key -> VBucketBGFetchItem for every key in the list above
- batchWarmupCallback::items2fetch

There are a number of inefficiencies in this implementation, the first
of which is that we record sequence numbers in the first two data
structures which are never actually used - the final BGfetch doesn't
need them.

This patch therefore removes the recording of sequence numbers. This
changes the data structures to:

1. MutationLogHarvester::committed - a set of keys (per vBucket).
2. MutationLogHarvester::apply::fetches - a vector of keys.

Results in a reduction in the memory used by these temporary warmup
data structures - from 4356MB to 3876MB (11%) for the following
workload:

* 1 bucket, 10,000MB quota, 1 node.
* 30M items, 300bytes each. Dataset generated by:
    cbc-pillowfight -U couchbase://localhost:12000 -I 30000000 -m 300 -M 300 -t16

Change-Id: I0666e2d1a8a0d9e996cdbdd61d41118d2c2d6dfc
Reviewed-on: http://review.couchbase.org/68042
Reviewed-by: Daniel Owen <owend@couchbase.com>
Tested-by: buildbot <build@couchbase.com>
src/mutation_log.cc
src/mutation_log.h
src/warmup.cc