Skip to content

Commit

Permalink
os/bluestore/bluefs: add inspection of bluefs files
Browse files Browse the repository at this point in the history
Add command "bluefs files list" that lists files in bluefs
and allows to see on which device they are located.

Signed-off-by: Adam Kupczyk <akupczyk@redhat.com>
  • Loading branch information
aclamk committed Feb 12, 2020
1 parent c9e6fd5 commit 1c52de3
Showing 1 changed file with 30 additions and 0 deletions.
30 changes: 30 additions & 0 deletions src/os/bluestore/BlueFS.cc
Original file line number Diff line number Diff line change
Expand Up @@ -68,6 +68,9 @@ class BlueFS::SocketHook : public AdminSocketHook {
"Dump internal statistics for bluefs."
"");
ceph_assert(r == 0);
r = admin_socket->register_command("bluefs files list", hook,
"print files in bluefs");
ceph_assert(r == 0);
}
}
return hook;
Expand Down Expand Up @@ -112,6 +115,33 @@ class BlueFS::SocketHook : public AdminSocketHook {
} else if (command == "bluestore bluefs stats") {
bluefs->dump_block_extents(ss);
bluefs->dump_volume_selector(ss);
} else if (command == "bluefs files list") {
const char* devnames[3] = {"wal","db","slow"};
std::lock_guard l(bluefs->lock);
f->open_array_section("files");
for (auto &d : bluefs->dir_map) {
std::string dir = d.first;
for (auto &r : d.second->file_map) {
f->open_object_section("file");
f->dump_string("name", (dir + "/" + r.first).c_str());
std::vector<size_t> sizes;
sizes.resize(bluefs->bdev.size());
for(auto& i : r.second->fnode.extents) {
sizes[i.bdev] += i.length;
}
for (size_t i = 0; i < sizes.size(); i++) {
if (sizes[i]>0) {
if (i < sizeof(devnames) / sizeof(*devnames))
f->dump_int(devnames[i], sizes[i]);
else
f->dump_int(("dev-"+to_string(i)).c_str(), sizes[i]);
}
}
f->close_section();
}
}
f->close_section();
f->flush(out);
} else {
ss << "Invalid command" << std::endl;
return -ENOSYS;
Expand Down

0 comments on commit 1c52de3

Please sign in to comment.