usage();
}
+ // the store
+ ObjectStore *store = ObjectStore::create(g_conf->osd_objectstore,
+ g_conf->osd_data,
+ g_conf->osd_journal);
+ if (!store) {
+ derr << "unable to create object store" << dendl;
+ return -ENODEV;
+ }
+
if (mkfs) {
common_init_finish(g_ceph_context);
MonClient mc(g_ceph_context);
if (mc.get_monmap_privately() < 0)
return -1;
- int err = OSD::mkfs(g_ceph_context, g_conf->osd_data, g_conf->osd_journal, mc.monmap.fsid, whoami);
+ int err = OSD::mkfs(g_ceph_context, store, g_conf->osd_data,
+ mc.monmap.fsid, whoami);
if (err < 0) {
derr << TEXT_RED << " ** ERROR: error creating empty object store in "
<< g_conf->osd_data << ": " << cpp_strerror(-err) << TEXT_NORMAL << dendl;
exit(0);
if (mkjournal) {
common_init_finish(g_ceph_context);
- int err = OSD::mkjournal(g_ceph_context, g_conf->osd_data, g_conf->osd_journal);
+ int err = store->mkjournal();
if (err < 0) {
derr << TEXT_RED << " ** ERROR: error creating fresh journal " << g_conf->osd_journal
<< " for object store " << g_conf->osd_data
}
if (flushjournal) {
common_init_finish(g_ceph_context);
- int err = OSD::flushjournal(g_ceph_context, g_conf->osd_data, g_conf->osd_journal);
+ int err = store->mount();
if (err < 0) {
derr << TEXT_RED << " ** ERROR: error flushing journal " << g_conf->osd_journal
<< " for object store " << g_conf->osd_data
<< ": " << cpp_strerror(-err) << TEXT_NORMAL << dendl;
exit(1);
}
+ store->sync_and_flush();
+ store->umount();
derr << "flushed journal " << g_conf->osd_journal
<< " for object store " << g_conf->osd_data
<< dendl;
}
if (dump_journal) {
common_init_finish(g_ceph_context);
- int err = OSD::dump_journal(g_ceph_context, g_conf->osd_data, g_conf->osd_journal, cout);
+ int err = store->dump_journal(cout);
if (err < 0) {
derr << TEXT_RED << " ** ERROR: error dumping journal " << g_conf->osd_journal
<< " for object store " << g_conf->osd_data
if (convertfilestore) {
- int err = OSD::convertfs(g_ceph_context);
+ int err = OSD::do_convertfs(store);
if (err < 0) {
derr << TEXT_RED << " ** ERROR: error converting store " << g_conf->osd_data
<< ": " << cpp_strerror(-err) << TEXT_NORMAL << dendl;
common_init_finish(g_ceph_context);
if (g_conf->filestore_update_to >= (int)FileStore::target_version) {
- int err = OSD::convertfs(g_ceph_context);
+ int err = OSD::do_convertfs(store);
if (err < 0) {
derr << TEXT_RED << " ** ERROR: error converting store " << g_conf->osd_data
<< ": " << cpp_strerror(-err) << TEXT_NORMAL << dendl;
return -1;
global_init_chdir(g_ceph_context);
- osd = new OSD(g_ceph_context, whoami,
+ osd = new OSD(g_ceph_context,
+ store,
+ whoami,
ms_cluster,
ms_public,
ms_hbclient,
return store->umount();
}
-int OSD::convertfs(CephContext *cct)
-{
- boost::scoped_ptr<ObjectStore> store(ObjectStore::create(cct->_conf->osd_objectstore,
- cct->_conf->osd_data,
- cct->_conf->osd_journal));
- int r = do_convertfs(store.get());
- return r;
-}
-
-int OSD::mkfs(CephContext *cct, const std::string &dev, const std::string &jdev, uuid_d fsid, int whoami)
+int OSD::mkfs(CephContext *cct, ObjectStore *store, const string &dev,
+ uuid_d fsid, int whoami)
{
int ret;
- ObjectStore *store = NULL;
try {
- store = ObjectStore::create(cct->_conf->osd_objectstore, dev, jdev);
- if (!store) {
- ret = -ENOENT;
- goto out;
- }
-
// if we are fed a uuid for this osd, use it.
store->set_fsid(cct->_conf->osd_uuid);
store->umount();
free_store:
delete store;
-out:
return ret;
}
-int OSD::mkjournal(CephContext *cct, const std::string &dev, const std::string &jdev)
-{
- ObjectStore *store = ObjectStore::create(cct->_conf->osd_objectstore, dev, jdev);
- if (!store)
- return -ENOENT;
- return store->mkjournal();
-}
-
-int OSD::flushjournal(CephContext *cct, const std::string &dev, const std::string &jdev)
-{
- ObjectStore *store = ObjectStore::create(cct->_conf->osd_objectstore, dev, jdev);
- if (!store)
- return -ENOENT;
- int err = store->mount();
- if (!err) {
- store->sync_and_flush();
- store->umount();
- }
- delete store;
- return err;
-}
-
-int OSD::dump_journal(CephContext *cct, const std::string &dev, const std::string &jdev, ostream& out)
-{
- ObjectStore *store = ObjectStore::create(cct->_conf->osd_objectstore, dev, jdev);
- if (!store)
- return -ENOENT;
- int err = store->dump_journal(out);
- delete store;
- return err;
-}
-
int OSD::write_meta(const std::string &base, uuid_d& cluster_fsid, uuid_d& osd_fsid, int whoami)
{
char val[80];
// cons/des
-OSD::OSD(CephContext *cct_, int id, Messenger *internal_messenger, Messenger *external_messenger,
+OSD::OSD(CephContext *cct_, ObjectStore *store_,
+ int id, Messenger *internal_messenger, Messenger *external_messenger,
Messenger *hb_clientm,
Messenger *hb_front_serverm,
Messenger *hb_back_serverm,
monc(mc),
logger(NULL),
recoverystate_perf(NULL),
- store(NULL),
+ store(store_),
clog(cct, client_messenger, &mc->monmap, LogClient::NO_FLAGS),
whoami(id),
dev_path(dev), journal_path(jdev),
if (is_stopping())
return 0;
- assert(!store);
- store = ObjectStore::create(cct->_conf->osd_objectstore, dev_path, journal_path);
- if (!store) {
- derr << "OSD::pre_init: unable to create object store" << dendl;
- return -ENODEV;
- }
-
if (store->test_mount_in_use()) {
derr << "OSD::pre_init: object store '" << dev_path << "' is "
<< "currently in use. (Is ceph-osd already running?)" << dendl;
/* internal and external can point to the same messenger, they will still
* be cleaned up properly*/
OSD(CephContext *cct_,
+ ObjectStore *store_,
int id,
Messenger *internal,
Messenger *external,
// static bits
static int find_osd_dev(char *result, int whoami);
- static int convertfs(CephContext *cct);
static int do_convertfs(ObjectStore *store);
static int convert_collection(ObjectStore *store, coll_t cid);
- static int mkfs(CephContext *cct, const std::string &dev, const std::string &jdev,
+ static int mkfs(CephContext *cct, ObjectStore *store,
+ const string& dev,
uuid_d fsid, int whoami);
- static int mkjournal(CephContext *cct, const std::string &dev, const std::string &jdev);
- static int flushjournal(CephContext *cct, const std::string &dev, const std::string &jdev);
- static int dump_journal(CephContext *cct, const std::string &dev, const std::string &jdev, ostream& out);
/* remove any non-user xattrs from a map of them */
void filter_xattrs(map<string, bufferptr>& attrs) {
for (map<string, bufferptr>::iterator iter = attrs.begin();