]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore/ceph-bluestore-tool: Modify show-label for many devs 60258/head
authorAdam Kupczyk <akupczyk@ibm.com>
Fri, 11 Oct 2024 08:21:35 +0000 (08:21 +0000)
committerAdam Kupczyk <akupczyk@ibm.com>
Fri, 11 Oct 2024 08:21:35 +0000 (08:21 +0000)
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/68505
Signed-off-by: Adam Kupczyk <akupczyk@ibm.com>
src/os/bluestore/bluestore_tool.cc

index c24bf2161aa6c5463ac28cdd0b5e0f12e28cc899..d62721b43666ce762deae3666493639bb94db64c 100644 (file)
@@ -746,20 +746,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;