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);
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);
{
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;
}