summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorcostan <costan@google.com>2017-05-23 17:29:44 -0700
committerVictor Costan <pwnall@chromium.org>2017-07-10 14:13:30 -0700
commit69e2bd224b7f11e021527cb95bab18f1ee6e1b3b (patch)
treebadd275cd7f6997294f84d6636a5309369933d81
parenta53934a3ae1244679f812d998a4f16f2c7f309a6 (diff)
downloadleveldb-69e2bd224b7f11e021527cb95bab18f1ee6e1b3b.tar.gz
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
-rw-r--r--db/write_batch.cc4
-rw-r--r--db/write_batch_test.cc17
-rw-r--r--include/leveldb/write_batch.h6
3 files changed, 27 insertions, 0 deletions
diff --git a/db/write_batch.cc b/db/write_batch.cc
index 33f4a42..7f8f3e8 100644
--- a/db/write_batch.cc
+++ b/db/write_batch.cc
@@ -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) {
diff --git a/db/write_batch_test.cc b/db/write_batch_test.cc
index 9064e3d..8d38023 100644
--- a/db/write_batch_test.cc
+++ b/db/write_batch_test.cc
@@ -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) {
diff --git a/include/leveldb/write_batch.h b/include/leveldb/write_batch.h
index ee9aab6..65a76d8 100644
--- a/include/leveldb/write_batch.h
+++ b/include/leveldb/write_batch.h
@@ -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: