From 97ef0845440f723702f9c7a2b4006305afbda56a Mon Sep 17 00:00:00 2001 From: Yehuda Sadeh Date: Wed, 30 Sep 2009 15:24:45 -0700 Subject: [PATCH] auth: don't wait if already authenticated, fix unitest --- src/librados.cc | 17 +++++++++++------ src/mon/MonClient.cc | 13 ++++++++----- 2 files changed, 19 insertions(+), 11 deletions(-) diff --git a/src/librados.cc b/src/librados.cc index e1bbf8344bdb4..9b9b069d68bed 100644 --- a/src/librados.cc +++ b/src/librados.cc @@ -300,17 +300,22 @@ bool RadosClient::init() rank.set_policy(entity_name_t::TYPE_CLIENT, SimpleMessenger::Policy::lossless()); // mds does its own timeout/markdown rank.start(1); + messenger->add_dispatcher_head(this); + + monclient.auth.set_want_keys(CEPHX_PRINCIPAL_MON | CEPHX_PRINCIPAL_OSD); + monclient.init(); + + if (monclient.get_monmap() < 0) + return false; + + monclient.wait_authenticate(30.0); + + monclient.mount(g_conf.client_mount_timeout); objecter = new Objecter(messenger, &monclient, &osdmap, lock); if (!objecter) return false; - monclient.init(); - dout(0) << "librados: before monclient.authenticate()" << dendl; - monclient.auth.set_want_keys(CEPHX_PRINCIPAL_MON | CEPHX_PRINCIPAL_OSD); - monclient.authenticate(g_conf.client_mount_timeout); - monclient.authorize(g_conf.client_mount_timeout); - monclient.mount(g_conf.client_mount_timeout); lock.Lock(); diff --git a/src/mon/MonClient.cc b/src/mon/MonClient.cc index d408983b709c9..ad1b909606dd1 100644 --- a/src/mon/MonClient.cc +++ b/src/mon/MonClient.cc @@ -312,6 +312,7 @@ void MonClient::handle_auth(MAuthReply *m) if (ret == -EAGAIN) { auth.send_session_request(this, &auth_handler, 30.0); } else { + dout(0) << "done authenticating" << dendl; state = MC_STATE_AUTHENTICATED; authenticate_cond.SignalAll(); _open_session(); @@ -351,10 +352,7 @@ void MonClient::_pick_new_mon() void MonClient::_open_session() { - dout(10) << "_open_session" << dendl; - _pick_new_mon(); - - dout(0) << "_open_session 0" << dendl; + dout(0) << "_open_session" << dendl; if (state == MC_STATE_NONE) { state = MC_STATE_AUTHENTICATING; auth.send_session_request(this, &auth_handler, 30.0); @@ -366,7 +364,6 @@ void MonClient::_open_session() if (g_keyring.need_rotating_secrets()) { _start_auth_rotating(); - //_wait_auth_rotating(KEY_ROTATE_TIME); } dout(0) << "_open_session 2" << dendl; @@ -487,6 +484,12 @@ int MonClient::wait_authenticate(double timeout) utime_t interval; interval += timeout; + if (state == MC_STATE_AUTHENTICATED) + return 0; + + if (cur_mon < 0) + _reopen_session(); + int ret = authenticate_cond.WaitInterval(monc_lock, interval); dout(0) << "wait_authenticate ended, returned " << ret << dendl; -- 2.39.5