From: Sage Weil Date: Tue, 3 Oct 2017 03:17:54 +0000 (-0500) Subject: kv: add per-prefix space estimation X-Git-Tag: v13.2.7~271^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=4137ecb0df73f599da954305a45e2d4a215aebe1;p=ceph.git kv: add per-prefix space estimation Signed-off-by: Sage Weil (cherry picked from commit c6da00b418764ca8fec248b768f3744ca1e655ed) --- diff --git a/src/kv/KeyValueDB.h b/src/kv/KeyValueDB.h index 398f1d152b982..131608f3d50c5 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 d47f6da372025..8a0ef74782119 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 34470d5c96317..fed340699ac12 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;