]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: give useful errors to user when store is missing
authorJoao Eduardo Luis <joao.luis@inktank.com>
Mon, 25 Feb 2013 17:54:18 +0000 (17:54 +0000)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Tue, 26 Feb 2013 23:47:51 +0000 (23:47 +0000)
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 <joao.luis@inktank.com>
src/ceph_mon.cc
src/mon/Monitor.cc

index c4ebf6b17fd0a04ca76672b8ace28515f04797ad..6a61f3e4983a1f082ceff0f8af4113d7cc44d6bc 100644 (file)
@@ -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);
index 716eeabe63a40f0d3df062bd6de2a464861ac8a9..60a022bde2563a22557df61e5614c38af13bb730 100644 (file)
@@ -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)) {