void usage()
{
- cerr << "usage: cosd -i osdid [--osd-data=path] [--osd-journal=path] [--mkfs]" << std::endl;
+ cerr << "usage: cosd -i osdid [--osd-data=path] [--osd-journal=path] [--mkfs] [--mkjournal]" << std::endl;
cerr << " --debug_osd N set debug level (e.g. 10)" << std::endl;
generic_server_usage();
}
if (g_conf.clock_tare) g_clock.tare();
// osd specific args
- bool mkfs = 0;
+ bool mkfs = false;
+ bool mkjournal = false;
FOR_EACH_ARG(args) {
if (CONF_ARG_EQ("mkfs", '\0')) {
- mkfs = 1;
+ mkfs = true;
+ } else if (CONF_ARG_EQ("mkjournal", '\0')) {
+ mkjournal = true;
} else {
cerr << "unrecognized arg " << args[i] << std::endl;
ARGS_USAGE();
rank.start();
// start osd
- OSD *osd = new OSD(whoami, m, hbm, &mc, g_conf.osd_data, g_conf.osd_journal);
+ OSD *osd = new OSD(whoami, m, hbm, &mc, g_conf.osd_data, g_conf.osd_journal, mkjournal);
if (osd->init() < 0) {
cout << "error initializing osd" << std::endl;
return 1;
dout(10) << "mkfs fsid is " << fsid << dendl;
// journal?
- open_journal();
- if (journal) {
- if (journal->create() < 0) {
- dout(0) << "mkfs error creating journal on " << fn << dendl;
- } else {
- dout(0) << "mkfs created journal on " << fn << dendl;
- }
- delete journal;
- journal = 0;
- } else {
- dout(10) << "mkfs no journal at " << fn << dendl;
- }
+ int err = mkjournal();
+ if (err)
+ return err;
if (g_conf.filestore_dev) {
char cmd[PATH_MAX];
}
dout(1) << "mkfs done in " << basedir << dendl;
-
return 0;
}
+int FileStore::mkjournal()
+{
+ int err;
+
+ open_journal();
+ if (journal) {
+ err = journal->create();
+ if (err < 0) {
+ dout(0) << "mkjournal error creating journal on " << journalpath << dendl;
+ } else {
+ dout(0) << "mkjournal created journal on " << journalpath << dendl;
+ }
+ delete journal;
+ journal = 0;
+ } else {
+ err = -ENOENT;
+ dout(10) << "mkjournal no journal at " << journalpath << dendl;
+ }
+ return err;
+}
+
+
Mutex sig_lock("FileStore.cc sig_lock");
Cond sig_cond;
bool sig_installed = false;
int mount();
int umount();
int mkfs();
+ int mkjournal();
int statfs(struct statfs *buf);
virtual int mount() = 0;
virtual int umount() = 0;
virtual int mkfs() = 0; // wipe
+ virtual int mkjournal() = 0; // journal only
virtual int statfs(struct statfs *buf) = 0;
// cons/des
-OSD::OSD(int id, Messenger *m, Messenger *hbm, MonClient *mc, const char *dev, const char *jdev) :
+OSD::OSD(int id, Messenger *m, Messenger *hbm, MonClient *mc, const char *dev, const char *jdev, bool newjournal) :
osd_lock("OSD::osd_lock"),
timer(osd_lock),
messenger(m),
{
monc->set_messenger(messenger);
+ mknewjournal = newjournal;
osdmap = 0;
memset(&my_stat, 0, sizeof(my_stat));
dout(0) << " unable to create object store" << dendl;
return -ENODEV;
}
+
+ if (mknewjournal) {
+ int r = store->mkjournal();
+ if (r < 0) {
+ dout(0) << " unable to create new jouranl" << dendl;
+ return r;
+ }
+ }
+
int r = store->mount();
if (r < 0) {
dout(0) << " unable to mount object store" << dendl;
- return -1;
+ return r;
}
dout(2) << "boot" << dendl;
int whoami;
const char *dev_path, *journal_path;
+ bool mknewjournal;
class C_Tick : public Context {
OSD *osd;
void ms_handle_remote_reset(Connection *con) {}
public:
- OSD(int id, Messenger *m, Messenger *hbm, MonClient *mc, const char *dev = 0, const char *jdev = 0);
+ OSD(int id, Messenger *m, Messenger *hbm, MonClient *mc, const char *dev = 0, const char *jdev = 0, bool newjournal=false);
~OSD();
// static bits