]> git.apps.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
ceph-kvstore-tool: 'bluestore-kv' to open bluestore's embedded kv
authorSage Weil <sage@redhat.com>
Fri, 21 Apr 2017 15:47:21 +0000 (11:47 -0400)
committerSage Weil <sage@redhat.com>
Mon, 24 Apr 2017 14:04:00 +0000 (10:04 -0400)
This is usually rocksdb on bluefs, but it should work with whatever kv
backend bluestore is configured to use.

Signed-off-by: Sage Weil <sage@redhat.com>
src/kv/KeyValueDB.cc
src/os/bluestore/BlueStore.cc
src/os/bluestore/BlueStore.h

index 7a917b7a1836f1c9304b3d827359671268feaace..42036e3c593859642b3591cb0555d2cbb0e2100a 100644 (file)
@@ -12,6 +12,9 @@
 #ifdef HAVE_KINETIC
 #include "KineticStore.h"
 #endif
+#ifdef HAVE_LIBAIO
+#include "os/bluestore/BlueStore.h"
+#endif
 
 KeyValueDB *KeyValueDB::create(CephContext *cct, const string& type,
                               const string& dir,
@@ -34,6 +37,18 @@ KeyValueDB *KeyValueDB::create(CephContext *cct, const string& type,
   }
 #endif
 
+#ifdef HAVE_LIBAIO
+  if (type == "bluestore-kv") {
+    // note: we'll leak this!  the only user is ceph-kvstore-tool and
+    // we don't care.
+    BlueStore *bluestore = new BlueStore(cct, dir);
+    KeyValueDB *db = nullptr;
+    int r = bluestore->start_kv_only(&db);
+    if (r < 0)
+      return nullptr;  // yes, we leak.
+    return db;
+  }
+#endif
   if ((type == "memdb") && 
     cct->check_experimental_feature_enabled("memdb")) {
     return new MemDB(cct, dir, p);
index 2c4121f2f1b90ab96a631c7da1e34f67c81fc723..9eeb86dc7c5aaf5e5366df600a42587424eccaae 100644 (file)
@@ -4023,7 +4023,7 @@ bool BlueStore::test_mount_in_use()
   return ret;
 }
 
-int BlueStore::_open_db(bool create)
+int BlueStore::_open_db(bool create, bool kv_no_open)
 {
   int r;
   assert(!db);
@@ -4262,6 +4262,9 @@ int BlueStore::_open_db(bool create)
   if (kv_backend == "rocksdb")
     options = cct->_conf->bluestore_rocksdb_options;
   db->init(options);
+  if (kv_no_open) {
+    return 0;
+  }
   if (create)
     r = db->create_and_open(err);
   else
@@ -4810,7 +4813,7 @@ void BlueStore::set_cache_shards(unsigned num)
   }
 }
 
-int BlueStore::mount()
+int BlueStore::_mount(bool kv_only)
 {
   dout(1) << __func__ << " path " << path << dendl;
 
@@ -4858,10 +4861,13 @@ int BlueStore::mount()
   if (r < 0)
     goto out_fsid;
 
-  r = _open_db(false);
+  r = _open_db(false, kv_only);
   if (r < 0)
     goto out_bdev;
 
+  if (kv_only)
+    return 0;
+
   r = _open_super_meta();
   if (r < 0)
     goto out_db;
index 6a55512f1609fdd960b79208c2cfb33c6fd833da..f2a32b8b2df84937b33fbcb25e93ebf3c06e097f 100644 (file)
@@ -1870,7 +1870,7 @@ private:
 
   int _open_bdev(bool create);
   void _close_bdev();
-  int _open_db(bool create);
+  int _open_db(bool create, bool kv_no_open=false);
   void _close_db();
   int _open_fm(bool create);
   void _close_fm();
@@ -2031,9 +2031,22 @@ public:
 
   bool test_mount_in_use() override;
 
-  int mount() override;
+private:
+  int _mount(bool kv_only);
+public:
+  int mount() override {
+    return _mount(false);
+  }
   int umount() override;
 
+  int start_kv_only(KeyValueDB **pdb) {
+    int r = _mount(true);
+    if (r < 0)
+      return r;
+    *pdb = db;
+    return 0;
+  }
+
   int fsck(bool deep) override;
 
   void set_cache_shards(unsigned num) override;