From: Joao Eduardo Luis Date: Mon, 25 Feb 2013 17:54:18 +0000 (+0000) Subject: mon: give useful errors to user when store is missing X-Git-Tag: v0.59~96^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=ebf47175c40ee12dda855b0b19517cf988a33353;p=ceph.git mon: give useful errors to user when store is missing We used to assert() instead, which didn't shed enough light on the cause and could confuse the user into believing something *terrible* had happened. Signed-off-by: Joao Eduardo Luis --- diff --git a/src/ceph_mon.cc b/src/ceph_mon.cc index c4ebf6b17fd..6a61f3e4983 100644 --- a/src/ceph_mon.cc +++ b/src/ceph_mon.cc @@ -203,10 +203,16 @@ int main(int argc, const char **argv) // go MonitorDBStore store(g_conf->mon_data); - assert(!store.create_and_open(cerr)); + int r = store.create_and_open(cerr); + if (r < 0) { + cerr << argv[0] << ": error opening mon data directory at '" + << g_conf->mon_data << "': " << cpp_strerror(r) << std::endl; + exit(1); + } + assert(r == 0); Monitor mon(g_ceph_context, g_conf->name.get_id(), &store, 0, &monmap); - int r = mon.mkfs(osdmapbl); + r = mon.mkfs(osdmapbl); if (r < 0) { cerr << argv[0] << ": error creating monfs: " << cpp_strerror(r) << std::endl; exit(1); @@ -223,7 +229,14 @@ int main(int argc, const char **argv) } MonitorDBStore store(g_conf->mon_data); - assert(!store.open(std::cerr)); + err = store.open(std::cerr); + if (err < 0) { + cerr << argv[0] << ": error opening mon data store at '" + << g_conf->mon_data << "': " << cpp_strerror(err) << std::endl; + cerr << "Have you run '--mkfs'?" << std::endl; + exit(1); + } + assert(err == 0); bufferlist magicbl; err = store.get(Monitor::MONITOR_NAME, "magic", magicbl); diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc index 716eeabe63a..60a022bde25 100644 --- a/src/mon/Monitor.cc +++ b/src/mon/Monitor.cc @@ -4067,6 +4067,12 @@ bool Monitor::StoreConverter::needs_conversion() if (db->open(std::cerr) < 0) { dout(1) << "unable to open monitor store at " << g_conf->mon_data << dendl; dout(1) << "check for old monitor store format" << dendl; + int err = store->mount(); + if (err < 0) { + dout(0) << "unable to mount monitor store; are you sure it exists?" << dendl; + dout(0) << "error: " << cpp_strerror(err) << dendl; + assert(0 == "non-existent store in mon data directory"); + } assert(!store->mount()); bufferlist magicbl; if (store->exists_bl_ss("magic", 0)) {