MB-24151: Implement general range read iterator in seqlist 40/77640/10
authorManu Dhundi <manu@couchbase.com>
Wed, 10 May 2017 00:36:40 +0000 (17:36 -0700)
committerManu Dhundi <manu@couchbase.com>
Wed, 10 May 2017 18:23:06 +0000 (18:23 +0000)
commitd3a497a2350132610b212e4e231b232c1a3aa7c3
treea3afea2d5c2d91936e69c9cfa98cb9480f4453b2
parent526fb7a9b132b6aa64d79eb517b0b16610698dab
MB-24151: Implement general range read iterator in seqlist

This commit implements range read iterator in sequence list, the ordered
data strucuture in Ephemeral buckets.

We need range read iterators because we have more than one client that
needs to do a range read (backfill, tombstone purger). Further the reads
can also have more involved constraints like memory management in backfills.
By having an API of read iterator we can just do the read from the sequence
list and additional stuff like memory management can be done outside by the
clients. That is, iterator clients can make progress at their own pace.

The iterator is unidirectional (forward only) and cannot be invalidated
while in use. That means reading the items in the iterator results in a
valid point-in-time snapshot. But this adds a caveat that while an
iterator instance is active, certain invariants are to be met to get the
snapshot, and this happens at the expense of increased memory usage.

For now, only one iterator can be created at a time.

Change-Id: Idb320a148299255b74b7cf7e92cef35a20f483d4
Reviewed-on: http://review.couchbase.org/77640
Reviewed-by: Dave Rigby <daver@couchbase.com>
Tested-by: Build Bot <build@couchbase.com>
CMakeLists.txt
src/linked_list.cc
src/linked_list.h
src/seqlist.cc [new file with mode: 0644]
src/seqlist.h
tests/module_tests/basic_ll_test.cc