From ebf47175c40ee12dda855b0b19517cf988a33353 Mon Sep 17 00:00:00 2001 From: Joao Eduardo Luis Date: Mon, 25 Feb 2013 17:54:18 +0000 Subject: [PATCH] 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 --- src/ceph_mon.cc | 19 ++++++++++++++++--- src/mon/Monitor.cc | 6 ++++++ 2 files changed, 22 insertions(+), 3 deletions(-) diff --git a/src/ceph_mon.cc b/src/ceph_mon.cc index c4ebf6b17fd0a..6a61f3e4983a1 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 716eeabe63a40..60a022bde2563 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)) { -- 2.39.5