From 4f0fcb78ae685e80527da2034d7101b64d23fa2d Mon Sep 17 00:00:00 2001 From: QingpingWang Date: Tue, 13 Nov 2018 11:50:22 -0800 Subject: [PATCH] Expose num entries and deletions of sst files (#4623) Summary: he ratio of num_deletions to num_entries of a level can be useful to determine if a manual compaction needs to be triggered on a level. Also refer #3980 Pull Request resolved: https://github.com/facebook/rocksdb/pull/4623 Differential Revision: D13045744 Pulled By: sagar0 fbshipit-source-id: 71f3c8e363a8ffd194ec3bb0ed0b69612231f0b3 --- db/c.cc | 12 ++++++++++++ db/version_set.cc | 2 ++ include/rocksdb/c.h | 4 ++++ include/rocksdb/metadata.h | 3 +++ 4 files changed, 21 insertions(+) diff --git a/db/c.cc b/db/c.cc index aa75a8186..87e08f806 100644 --- a/db/c.cc +++ b/db/c.cc @@ -3550,6 +3550,18 @@ const char* rocksdb_livefiles_largestkey( return lf->rep[index].largestkey.data(); } +uint64_t rocksdb_livefiles_entries( + const rocksdb_livefiles_t* lf, + int index) { + return lf->rep[index].num_entries; +} + +uint64_t rocksdb_livefiles_deletions( + const rocksdb_livefiles_t* lf, + int index) { + return lf->rep[index].num_deletions; +} + extern void rocksdb_livefiles_destroy( const rocksdb_livefiles_t* lf) { delete lf; diff --git a/db/version_set.cc b/db/version_set.cc index 3df889a93..5862bd235 100644 --- a/db/version_set.cc +++ b/db/version_set.cc @@ -4405,6 +4405,8 @@ void VersionSet::GetLiveFilesMetaData(std::vector* metadata) { filemetadata.largestkey = file->largest.user_key().ToString(); filemetadata.smallest_seqno = file->fd.smallest_seqno; filemetadata.largest_seqno = file->fd.largest_seqno; + filemetadata.num_entries = file->num_entries; + filemetadata.num_deletions = file->num_deletions; metadata->push_back(filemetadata); } } diff --git a/include/rocksdb/c.h b/include/rocksdb/c.h index 0899ed625..cf46054aa 100644 --- a/include/rocksdb/c.h +++ b/include/rocksdb/c.h @@ -1422,6 +1422,10 @@ extern ROCKSDB_LIBRARY_API const char* rocksdb_livefiles_smallestkey( const rocksdb_livefiles_t*, int index, size_t* size); extern ROCKSDB_LIBRARY_API const char* rocksdb_livefiles_largestkey( const rocksdb_livefiles_t*, int index, size_t* size); +extern ROCKSDB_LIBRARY_API uint64_t rocksdb_livefiles_entries( + const rocksdb_livefiles_t*, int index); +extern ROCKSDB_LIBRARY_API uint64_t rocksdb_livefiles_deletions( + const rocksdb_livefiles_t*, int index); extern ROCKSDB_LIBRARY_API void rocksdb_livefiles_destroy( const rocksdb_livefiles_t*); diff --git a/include/rocksdb/metadata.h b/include/rocksdb/metadata.h index a9773bf40..097d2fde9 100644 --- a/include/rocksdb/metadata.h +++ b/include/rocksdb/metadata.h @@ -93,6 +93,9 @@ struct SstFileMetaData { std::string largestkey; // Largest user defined key in the file. uint64_t num_reads_sampled; // How many times the file is read. bool being_compacted; // true if the file is currently being compacted. + + uint64_t num_entries; + uint64_t num_deletions; }; // The full set of metadata associated with each SST file.