From 6537a8fe7c840e65127d5ac344544c06c95836ad Mon Sep 17 00:00:00 2001 From: Patrick Donnelly Date: Tue, 11 Sep 2018 18:59:03 -0700 Subject: [PATCH] mds: use common send message mechanisms Fixes: http://tracker.ceph.com/issues/26961 Signed-off-by: Patrick Donnelly --- src/mds/MDCache.cc | 5 +++-- src/mds/MDSRank.cc | 3 ++- src/mds/Server.cc | 25 ++++++++++++++----------- 3 files changed, 19 insertions(+), 14 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index 462bd2957f183..b5622e7819c76 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -8828,6 +8828,7 @@ void MDCache::handle_open_ino(const MMDSOpenIno::const_ref &m, int err) dout(10) << "handle_open_ino " << *m << " err " << err << dendl; + auto from = mds_rank_t(m->get_source().num()); inodeno_t ino = m->ino; MMDSOpenInoReply::ref reply; CInode *in = get_inode(ino); @@ -8857,7 +8858,7 @@ void MDCache::handle_open_ino(const MMDSOpenIno::const_ref &m, int err) return; reply = MMDSOpenInoReply::create(m->get_tid(), ino, hint, ret); } - m->get_connection()->send_message2(reply); /* FIXME, why not send_client? */ + mds->send_message_mds(reply, from); } void MDCache::handle_open_ino_reply(const MMDSOpenInoReply::const_ref &m) @@ -9046,7 +9047,7 @@ void MDCache::handle_find_ino(const MMDSFindIno::const_ref &m) in->make_path(r->path); dout(10) << " have " << r->path << " " << *in << dendl; } - m->get_connection()->send_message2(r); + mds->send_message_mds(r, mds_rank_t(m->get_source().num())); } diff --git a/src/mds/MDSRank.cc b/src/mds/MDSRank.cc index 00ba9e44d198b..a365ed8223a87 100644 --- a/src/mds/MDSRank.cc +++ b/src/mds/MDSRank.cc @@ -966,8 +966,9 @@ void MDSRank::forward_message_mds(const MClientRequest::const_ref& m, mds_rank_t bool client_must_resend = true; //!creq->can_forward(); // tell the client where it should go + auto session = get_session(m); auto f = MClientRequestForward::create(m->get_tid(), mds, m->get_num_fwd()+1, client_must_resend); - messenger->send_message(f.detach(), m->get_source_inst()); + send_message_client(f, session); } void MDSRank::send_message_client_counted(const Message::ref& m, client_t client) diff --git a/src/mds/Server.cc b/src/mds/Server.cc index ae49000e57fe6..bd071baa773aa 100644 --- a/src/mds/Server.cc +++ b/src/mds/Server.cc @@ -431,15 +431,15 @@ void Server::handle_client_session(const MClientSession::const_ref &m) break; case CEPH_SESSION_REQUEST_RENEWCAPS: - if (session->is_open() || - session->is_stale()) { + if (session->is_open() || session->is_stale()) { mds->sessionmap.touch_session(session); if (session->is_stale()) { mds->sessionmap.set_state(session, Session::STATE_OPEN); mds->locker->resume_stale_caps(session); mds->sessionmap.touch_session(session); } - m->get_connection()->send_message2(MClientSession::create(CEPH_SESSION_RENEWCAPS, m->get_seq())); + auto reply = MClientSession::create(CEPH_SESSION_RENEWCAPS, m->get_seq()); + mds->send_message_client(reply, session); } else { dout(10) << "ignoring renewcaps on non open|stale session (" << session->get_state_name() << ")" << dendl; } @@ -543,9 +543,11 @@ void Server::_session_logged(Session *session, uint64_t state_seq, bool open, ve auto reply = MClientSession::create(CEPH_SESSION_OPEN); if (session->info.has_feature(CEPHFS_FEATURE_MIMIC)) reply->supported_features = supported_features; - session->get_connection()->send_message2(reply); - if (mdcache->is_readonly()) - session->get_connection()->send_message2(MClientSession::create(CEPH_SESSION_FORCE_RO)); + mds->send_message_client(reply, session); + if (mdcache->is_readonly()) { + auto m = MClientSession::create(CEPH_SESSION_FORCE_RO); + mds->send_message_client(m, session); + } } else if (session->is_closing() || session->is_killing()) { // kill any lingering capabilities, leases, requests @@ -1017,7 +1019,8 @@ void Server::handle_client_reconnect(const MClientReconnect::const_ref &m) } if (deny) { - m->get_connection()->send_message2(MClientSession::create(CEPH_SESSION_CLOSE)); + auto m = MClientSession::create(CEPH_SESSION_CLOSE); + mds->send_message_client(m, session); if (session->is_open()) kill_session(session, nullptr); return; @@ -1034,7 +1037,7 @@ void Server::handle_client_reconnect(const MClientReconnect::const_ref &m) auto reply = MClientSession::create(CEPH_SESSION_OPEN); if (session->info.has_feature(CEPHFS_FEATURE_MIMIC)) reply->supported_features = supported_features; - m->get_connection()->send_message2(reply); + mds->send_message_client(reply, session); session->last_cap_renew = clock::now(); mds->clog->debug() << "reconnect by " << session->info.inst << " after " << delay; @@ -1536,7 +1539,7 @@ void Server::early_reply(MDRequestRef& mdr, CInode *tracei, CDentry *tracedn) } reply->set_extra_bl(mdr->reply_extra_bl); - req->get_connection()->send_message2(reply); + mds->send_message_client(reply, mdr->session); mdr->did_early_reply = true; @@ -1639,7 +1642,7 @@ void Server::reply_client_request(MDRequestRef& mdr, const MClientReply::ref &re reply->set_extra_bl(mdr->reply_extra_bl); reply->set_mdsmap_epoch(mds->mdsmap->get_epoch()); - req->get_connection()->send_message2(reply); + mds->send_message_client(reply, session); } if (req->is_queued_for_replay() && @@ -1809,7 +1812,7 @@ void Server::handle_client_request(const MClientRequest::const_ref &req) encode(created, extra); reply->set_extra_bl(extra); } - req->get_connection()->send_message2(reply); + mds->send_message_client(reply, session); if (req->is_queued_for_replay()) mds->queue_one_replay(); -- 2.39.5