]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: allow get_devices() to run without bluestore started
authorSage Weil <sage@redhat.com>
Fri, 4 Jan 2019 17:33:27 +0000 (11:33 -0600)
committerSage Weil <sage@redhat.com>
Fri, 4 Jan 2019 19:08:03 +0000 (13:08 -0600)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index 220d1c07f9579592140bc7ee8e405b5e9e189515..cdb922d16c624e54ad1fe766a9f30bd0cf3ccf4b 100644 (file)
@@ -4907,7 +4907,7 @@ bool BlueStore::test_mount_in_use()
   return ret;
 }
 
-int BlueStore::_open_bluefs(bool create)
+int BlueStore::_minimal_open_bluefs(bool create)
 {
   int r;
   bluefs = new BlueFS(cct);
@@ -5030,30 +5030,43 @@ int BlueStore::_open_bluefs(bool create)
       goto free_bluefs;
     }
   }
+  return 0;
 
+free_bluefs:
+  ceph_assert(bluefs);
+  delete bluefs;
+  bluefs = NULL;
+  return r;
+}
+
+int BlueStore::_open_bluefs(bool create)
+{
+  int r = _minimal_open_bluefs(create);
+  if (r < 0) {
+    return r;
+  }
   if (create) {
     bluefs->mkfs(fsid);
   }
   r = bluefs->mount();
   if (r < 0) {
     derr << __func__ << " failed bluefs mount: " << cpp_strerror(r) << dendl;
-    goto free_bluefs;
   }
-  
-  return 0;
-free_bluefs:
-  ceph_assert(bluefs);
-  delete bluefs;
-  bluefs = NULL;
   return r;
 }
 
 void BlueStore::_close_bluefs()
 {
   bluefs->umount();
+  _minimal_close_bluefs();
+}
+
+void BlueStore::_minimal_close_bluefs()
+{
   delete bluefs;
   bluefs = NULL;
 }
+
 int BlueStore::_open_db(bool create, bool to_repair_db)
 {
   int r;
@@ -7763,11 +7776,47 @@ void BlueStore::collect_metadata(map<string,string> *pm)
 
 int BlueStore::get_devices(set<string> *ls)
 {
+  if (bdev) {
+    bdev->get_devices(ls);
+    if (bluefs) {
+      bluefs->get_devices(ls);
+    }
+    return 0;
+  }
+  
+  // grumble, we haven't started up yet.
+  int r = _open_path();
+  if (r < 0)
+    goto out;
+  r = _open_fsid(false);
+  if (r < 0)
+    goto out_path;
+  r = _read_fsid(&fsid);
+  if (r < 0)
+    goto out_fsid;
+  r = _lock_fsid();
+  if (r < 0)
+    goto out_fsid;
+  r = _open_bdev(false);
+  if (r < 0)
+    goto out_fsid;
+  r = _minimal_open_bluefs(false);
+  if (r < 0)
+    goto out_bdev;
   bdev->get_devices(ls);
   if (bluefs) {
     bluefs->get_devices(ls);
   }
-  return 0;
+  r = 0;
+  _minimal_close_bluefs();
+ out_bdev:
+  _close_bdev();
+ out_fsid:
+  _close_fsid();
+ out_path:
+  _close_path();
+ out:
+  return r;
 }
 
 void BlueStore::_get_statfs_overall(struct store_statfs_t *buf)
index a263257785dc71fbc64746954540f6da1326c6fb..42f5cbb051fa112f59b4c5012e35e24028b99294 100644 (file)
@@ -2165,6 +2165,8 @@ private:
   void _validate_bdev();
   void _close_bdev();
 
+  int _minimal_open_bluefs(bool create);
+  void _minimal_close_bluefs();
   int _open_bluefs(bool create);
   void _close_bluefs();
 
@@ -2358,6 +2360,13 @@ public:
     return device_class;
   }
 
+  int get_numa_node(
+    int *numa_node,
+    size_t *cpu_set_size,
+    cpu_set_t *cpu_set,
+    set<int> *nodes,
+    set<string> *failed) override;
+
   static int get_block_device_fsid(CephContext* cct, const string& path,
                                   uuid_d *fsid);