]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mon: Monitor: propagate return for functions called for admin socket
authorJoao Eduardo Luis <joao.luis@inktank.com>
Fri, 18 Jul 2014 15:26:01 +0000 (16:26 +0100)
committerJoao Eduardo Luis <joao.luis@inktank.com>
Wed, 27 Aug 2014 18:02:04 +0000 (19:02 +0100)
Signed-off-by: Joao Eduardo Luis <joao.luis@inktank.com>
src/mon/Monitor.cc
src/mon/Monitor.h

index 972f5dd4853f11ed2cf481f4a6cdf9e4aa62e5b0..b5c4d6ed9f138dbdd4109bde39b901a4440c2a5c 100644 (file)
@@ -302,9 +302,11 @@ void Monitor::do_admin_command(string command, cmdmap_t& cmdmap, string format,
     }
     sync_force(f.get(), ss);
   } else if (command.find("add_bootstrap_peer_hint") == 0) {
-    _add_bootstrap_peer_hint(command, cmdmap, ss);
+    if (!_add_bootstrap_peer_hint(command, cmdmap, ss))
+      goto abort;
   } else if (command.find("osdmonitor_prepare_command") == 0) {
-    _osdmonitor_prepare_command(cmdmap, ss);
+    if (!_osdmonitor_prepare_command(cmdmap, ss))
+      goto abort;
   } else if (command == "quorum enter") {
     elector.start_participating();
     start_election();
@@ -956,33 +958,37 @@ void Monitor::bootstrap()
   }
 }
 
-void Monitor::_osdmonitor_prepare_command(cmdmap_t& cmdmap, ostream& ss)
+bool Monitor::_osdmonitor_prepare_command(cmdmap_t& cmdmap, ostream& ss)
 {
   if (!is_leader()) {
     ss << "mon must be a leader";
-    return;
+    return false;
   }
 
   string cmd;
   cmd_getval(g_ceph_context, cmdmap, "prepare", cmd);
   cmdmap["prefix"] = cmdmap["prepare"];
-  
+
   OSDMonitor *monitor = osdmon();
   MMonCommand *m = static_cast<MMonCommand *>((new MMonCommand())->get());
-  if (monitor->prepare_command_impl(m, cmdmap))
+  bool r = true;
+  if (monitor->prepare_command_impl(m, cmdmap)) {
     ss << "true";
-  else
+  } else {
     ss << "false";
+    r = false;
+  }
   m->put();
+  return r;
 }
 
-void Monitor::_add_bootstrap_peer_hint(string cmd, cmdmap_t& cmdmap, ostream& ss)
+bool Monitor::_add_bootstrap_peer_hint(string cmd, cmdmap_t& cmdmap, ostream& ss)
 {
   string addrstr;
   if (!cmd_getval(g_ceph_context, cmdmap, "addr", addrstr)) {
     ss << "unable to parse address string value '"
          << cmd_vartype_stringify(cmdmap["addr"]) << "'";
-    return;
+    return false;
   }
   dout(10) << "_add_bootstrap_peer_hint '" << cmd << "' '"
            << addrstr << "'" << dendl;
@@ -991,12 +997,12 @@ void Monitor::_add_bootstrap_peer_hint(string cmd, cmdmap_t& cmdmap, ostream& ss
   const char *end = 0;
   if (!addr.parse(addrstr.c_str(), &end)) {
     ss << "failed to parse addr '" << addrstr << "'; syntax is 'add_bootstrap_peer_hint ip[:port]'";
-    return;
+    return false;
   }
 
   if (is_leader() || is_peon()) {
     ss << "mon already active; ignoring bootstrap hint";
-    return;
+    return true;
   }
 
   if (addr.get_port() == 0)
@@ -1004,6 +1010,7 @@ void Monitor::_add_bootstrap_peer_hint(string cmd, cmdmap_t& cmdmap, ostream& ss
 
   extra_probe_peers.insert(addr);
   ss << "adding peer " << addr << " to list: " << extra_probe_peers;
+  return true;
 }
 
 // called by bootstrap(), or on leader|peon -> electing
index 8a523aec37f47694534ed0d39137bdcf1b1bf957..cbac351b7096f4fb0474dc949ca6d0951b59aa5a 100644 (file)
@@ -647,8 +647,8 @@ public:
                         const MonCommand *this_cmd);
   void get_mon_status(Formatter *f, ostream& ss);
   void _quorum_status(Formatter *f, ostream& ss);
-  void _osdmonitor_prepare_command(cmdmap_t& cmdmap, ostream& ss);
-  void _add_bootstrap_peer_hint(string cmd, cmdmap_t& cmdmap, ostream& ss);
+  bool _osdmonitor_prepare_command(cmdmap_t& cmdmap, ostream& ss);
+  bool _add_bootstrap_peer_hint(string cmd, cmdmap_t& cmdmap, ostream& ss);
   void handle_command(class MMonCommand *m);
   void handle_route(MRoute *m);