From 19589c560c12471ccfedfd163141c999273411bf Mon Sep 17 00:00:00 2001 From: Adam Kupczyk Date: Fri, 11 Oct 2024 08:21:35 +0000 Subject: [PATCH] os/bluestore/ceph-bluestore-tool: Modify show-label for many devs It was possible to give multiple devices to cbt: > ceph-bluestore-tool show-label --dev /dev/sda --dev /dev/sdb But is any of devices cannot provide valid label, nothing was printed. Now, always print results. Non readable labels are output as empty dictionaries. Exit code: - 0 if any label properly read - 1 if all labels failed Fixes: https://tracker.ceph.com/issues/68680 Signed-off-by: Adam Kupczyk (cherry picked from commit 8ebcb2dd46e5dc37a3e1ff6cc073351c4a2b5760) --- src/os/bluestore/bluestore_tool.cc | 15 ++++++++++----- 1 file changed, 10 insertions(+), 5 deletions(-) diff --git a/src/os/bluestore/bluestore_tool.cc b/src/os/bluestore/bluestore_tool.cc index 44129db6785..b3636b5b5c2 100644 --- a/src/os/bluestore/bluestore_tool.cc +++ b/src/os/bluestore/bluestore_tool.cc @@ -696,20 +696,25 @@ int main(int argc, char **argv) else if (action == "show-label") { JSONFormatter jf(true); jf.open_object_section("devices"); + bool any_success = false; for (auto& i : devs) { + jf.open_object_section(i.c_str()); bluestore_bdev_label_t label; int r = BlueStore::read_bdev_label(cct.get(), i, &label); if (r < 0) { - cerr << "unable to read label for " << i << ": " - << cpp_strerror(r) << std::endl; - exit(EXIT_FAILURE); + cerr << "unable to read label for " << i << ": " + << cpp_strerror(r) << std::endl; + } else { + any_success = true; + label.dump(&jf); } - jf.open_object_section(i.c_str()); - label.dump(&jf); jf.close_section(); } jf.close_section(); jf.flush(cout); + if (!any_success) { + exit(EXIT_FAILURE); + } } else if (action == "set-label-key") { bluestore_bdev_label_t label; -- 2.39.5