From: Igor Fedotov Date: Mon, 16 Mar 2020 13:40:54 +0000 (+0300) Subject: os/bluestore: show space available from bluestore when dumping bluefs devices. X-Git-Tag: v15.2.2~30^2~7 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6feabc9c7d69d7e9ebf681061ee563de05d1f52e;p=ceph.git os/bluestore: show space available from bluestore when dumping bluefs devices. This effectively allows ceph-bluestore-tool to report space available from bluestore for bluefs-bdev-sizes command, i.e. estimate how utilized main device is. Signed-off-by: Igor Fedotov (cherry picked from commit 7662fce0439456cc3aa4da23248321a4ff90745e) --- diff --git a/src/os/bluestore/BlueFS.cc b/src/os/bluestore/BlueFS.cc index 16a5b223f561..fa0c465d3060 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -431,12 +431,22 @@ void BlueFS::dump_block_extents(ostream& out) } auto owned = get_total(i); auto free = get_free(i); + out << i << " : device size 0x" << std::hex << bdev[i]->get_size() << " : own 0x" << block_all[i] << " = 0x" << owned << " : using 0x" << owned - free - << std::dec << "(" << byte_u_t(owned - free) << ")" - << "\n"; + << std::dec << "(" << byte_u_t(owned - free) << ")"; + if (i == BDEV_SLOW) { + ceph_assert(slow_dev_expander); + int id = _get_slow_device_id(); + ceph_assert(alloc[id]); + free = slow_dev_expander->available_freespace(alloc_size[id]); + out << std::hex + << " : bluestore has 0x" << free + << std::dec << "(" << byte_u_t(free) << ") available"; + } + out << "\n"; } } diff --git a/src/os/bluestore/BlueStore.cc b/src/os/bluestore/BlueStore.cc index 14c20bc01698..e2c6c70196e0 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -5670,8 +5670,7 @@ int BlueStore::_open_db(bool create, bool to_repair_db, bool read_only) (void)r; } env = new rocksdb::EnvMirror(b, a, false, true); - } - else { + } else { env = new BlueRocksEnv(bluefs); // simplify the dir names, too, as "seen" by rocksdb @@ -6878,6 +6877,15 @@ int BlueStore::expand_devices(ostream& out) return r; } +int BlueStore::dump_bluefs_sizes(ostream& out) +{ + int r = _mount(true); + ceph_assert(r == 0); + bluefs->dump_block_extents(out); + umount(); + return r; +} + void BlueStore::set_cache_shards(unsigned num) { dout(10) << __func__ << " " << num << dendl; diff --git a/src/os/bluestore/BlueStore.h b/src/os/bluestore/BlueStore.h index 1185a1b775a6..cf1e994465a8 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2572,6 +2572,8 @@ public: int expand_devices(ostream& out); string get_device_path(unsigned id); + int dump_bluefs_sizes(ostream& out); + public: int statfs(struct store_statfs_t *buf, osd_alert_list_t* alerts = nullptr) override; diff --git a/src/os/bluestore/bluestore_tool.cc b/src/os/bluestore/bluestore_tool.cc index 66b5a796dde2..b5f005797321 100644 --- a/src/os/bluestore/bluestore_tool.cc +++ b/src/os/bluestore/bluestore_tool.cc @@ -561,9 +561,8 @@ int main(int argc, char **argv) } } else if (action == "bluefs-bdev-sizes") { - BlueFS *fs = open_bluefs(cct.get(), path, devs); - fs->dump_block_extents(cout); - delete fs; + BlueStore bluestore(cct.get(), path); + bluestore.dump_bluefs_sizes(cout); } else if (action == "bluefs-bdev-expand") { BlueStore bluestore(cct.get(), path);