From 4137ecb0df73f599da954305a45e2d4a215aebe1 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 2 Oct 2017 22:17:54 -0500 Subject: [PATCH] kv: add per-prefix space estimation Signed-off-by: Sage Weil (cherry picked from commit c6da00b418764ca8fec248b768f3744ca1e655ed) --- src/kv/KeyValueDB.h | 5 +++++ src/kv/RocksDBStore.cc | 21 +++++++++++++++++++++ src/kv/RocksDBStore.h | 2 ++ 3 files changed, 28 insertions(+) diff --git a/src/kv/KeyValueDB.h b/src/kv/KeyValueDB.h index 398f1d152b9..131608f3d50 100644 --- a/src/kv/KeyValueDB.h +++ b/src/kv/KeyValueDB.h @@ -419,6 +419,11 @@ public: virtual ~KeyValueDB() {} + /// estimate space utilization for a prefix (in bytes) + virtual int64_t estimate_prefix_size(const string& prefix) { + return 0; + } + /// compact the underlying store virtual void compact() {} diff --git a/src/kv/RocksDBStore.cc b/src/kv/RocksDBStore.cc index d47f6da3720..8a0ef747821 100644 --- a/src/kv/RocksDBStore.cc +++ b/src/kv/RocksDBStore.cc @@ -678,6 +678,27 @@ void RocksDBStore::split_stats(const std::string &s, char delim, std::vectorGetApproximateSizes(cf, &r, 1, &size, flags); + } else { + string limit = prefix + "\xff\xff\xff\xff"; + rocksdb::Range r(prefix, limit); + db->GetApproximateSizes(default_cf, + &r, 1, &size, flags); + } + return size; +} + void RocksDBStore::get_statistics(Formatter *f) { if (!g_conf->rocksdb_perf) { diff --git a/src/kv/RocksDBStore.h b/src/kv/RocksDBStore.h index 34470d5c963..fed340699ac 100644 --- a/src/kv/RocksDBStore.h +++ b/src/kv/RocksDBStore.h @@ -188,6 +188,8 @@ public: return logger; } + int64_t estimate_prefix_size(const string& prefix) override; + struct RocksWBHandler: public rocksdb::WriteBatch::Handler { std::string seen ; int num_seen = 0; -- 2.47.3