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 <ifedotov@suse.com>
(cherry picked from commit
7662fce0439456cc3aa4da23248321a4ff90745e)
}
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";
}
}
(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
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;
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;
}
}
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);