LevelDB: Add WriteBatch::ApproximateSize().

This can be used to report metrics on LevelDB usage.

-------------
Created by MOE: https://github.com/google/moe
MOE_MIGRATED_REVID=156934930
This commit is contained in:
costan 2017-05-23 17:29:44 -07:00 committed by Victor Costan
parent a53934a3ae
commit 69e2bd224b
3 changed files with 27 additions and 0 deletions

View File

@ -39,6 +39,10 @@ void WriteBatch::Clear() {
rep_.resize(kHeader);
}
size_t WriteBatch::ApproximateSize() {
return rep_.size();
}
Status WriteBatch::Iterate(Handler* handler) const {
Slice input(rep_);
if (input.size() < kHeader) {

View File

@ -113,6 +113,23 @@ TEST(WriteBatchTest, Append) {
PrintContents(&b1));
}
TEST(WriteBatchTest, ApproximateSize) {
WriteBatch batch;
size_t empty_size = batch.ApproximateSize();
batch.Put(Slice("foo"), Slice("bar"));
size_t one_key_size = batch.ApproximateSize();
ASSERT_LT(empty_size, one_key_size);
batch.Put(Slice("baz"), Slice("boo"));
size_t two_keys_size = batch.ApproximateSize();
ASSERT_LT(one_key_size, two_keys_size);
batch.Delete(Slice("box"));
size_t post_delete_size = batch.ApproximateSize();
ASSERT_LT(two_keys_size, post_delete_size);
}
} // namespace leveldb
int main(int argc, char** argv) {

View File

@ -42,6 +42,12 @@ class WriteBatch {
// Clear all updates buffered in this batch.
void Clear();
// The size of the database changes caused by this batch.
//
// This number is tied to implementation details, and may change across
// releases. It is intended for LevelDB usage metrics.
size_t ApproximateSize();
// Support for iterating over the contents of a batch.
class Handler {
public: