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: v14.2.10~100^2~6 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b92ee73759e785360e49396f21e27f91cddaba10;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 11cd606f589..8b8e9979e95 100644 --- a/src/os/bluestore/BlueFS.cc +++ b/src/os/bluestore/BlueFS.cc @@ -412,12 +412,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 954dffa4531..bcb36a5c384 100644 --- a/src/os/bluestore/BlueStore.cc +++ b/src/os/bluestore/BlueStore.cc @@ -6559,6 +6559,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 b6d62669b54..6f9aec9f847 100644 --- a/src/os/bluestore/BlueStore.h +++ b/src/os/bluestore/BlueStore.h @@ -2531,6 +2531,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 63db8261f54..fc33289bf98 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);