summaryrefslogtreecommitdiff
path: root/src/mon
diff options
context:
space:
mode:
authorSage Weil <sage@inktank.com>2012-05-30 20:37:19 -0700
committerSage Weil <sage@inktank.com>2012-05-30 22:22:34 -0700
commitea1c0698cd195ebcf26b9ece280c3b9bf552e3e3 (patch)
treece99a389e5491a37266fcef192ea6b0a23568289 /src/mon
parentfa2f1deaaa86854c84e0d651cdded2e5985af1b9 (diff)
downloadceph-ea1c0698cd195ebcf26b9ece280c3b9bf552e3e3.tar.gz
mon: fix admin socket lock dependency
Signed-off-by: Sage Weil <sage@inktank.com>
Diffstat (limited to 'src/mon')
-rw-r--r--src/mon/Monitor.cc21
1 files changed, 10 insertions, 11 deletions
diff --git a/src/mon/Monitor.cc b/src/mon/Monitor.cc
index a6dba594926..846a310b2c4 100644
--- a/src/mon/Monitor.cc
+++ b/src/mon/Monitor.cc
@@ -340,6 +340,9 @@ int Monitor::init()
admin_hook = new AdminHook(this);
AdminSocket* admin_socket = cct->get_admin_socket();
+
+ // unlock while registering to avoid mon_lock -> admin socket lock dependency.
+ lock.Unlock();
r = admin_socket->register_command("mon_status", admin_hook,
"show current monitor status");
assert(r == 0);
@@ -349,6 +352,7 @@ int Monitor::init()
r = admin_socket->register_command("add_bootstrap_peer_hint", admin_hook,
"add peer address as potential bootstrap peer for cluster bringup");
assert(r == 0);
+ lock.Lock();
// i'm ready!
messenger->add_dispatcher_tail(this);
@@ -498,20 +502,15 @@ void Monitor::_add_bootstrap_peer_hint(string cmd, string args, ostream& ss)
{
dout(10) << "_add_bootstrap_peer_hint '" << cmd << "' '" << args << "'" << dendl;
- if (is_leader() || is_peon()) {
- ss << "mon already active; ignoring bootstrap hint";
- return;
- }
-
- if (args.length() == 0) {
- ss << "syntax is 'add_bootstrap_peer_hint ip[:port]'";
- return;
- }
-
entity_addr_t addr;
const char *end = 0;
if (!addr.parse(args.c_str(), &end)) {
- ss << "failed to parse addr '" << args << "'";
+ ss << "failed to parse addr '" << args << "'; syntax is 'add_bootstrap_peer_hint ip[:port]'";
+ return;
+ }
+
+ if (is_leader() || is_peon()) {
+ ss << "mon already active; ignoring bootstrap hint";
return;
}