#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,
}
#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);
return ret;
}
-int BlueStore::_open_db(bool create)
+int BlueStore::_open_db(bool create, bool kv_no_open)
{
int r;
assert(!db);
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
}
}
-int BlueStore::mount()
+int BlueStore::_mount(bool kv_only)
{
dout(1) << __func__ << " path " << path << dendl;
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;
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();
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;