From 165a729422f5f1b7cc53afc987ec8eaba95765a7 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Sun, 4 Oct 2009 23:32:11 -0700 Subject: [PATCH] uclient: Only connect to offload targets if the mds goes down. --- src/client/Client.cc | 45 ++++++++++++++++++++------------------------ src/client/Client.h | 2 +- 2 files changed, 21 insertions(+), 26 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index cbd4ee368ef5f..601b609230dd8 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -778,28 +778,25 @@ int Client::choose_target_mds(MetaRequest *req) } -void Client::check_mds_sessions() -{ - for (map::iterator p = mds_sessions.begin(); - p != mds_sessions.end(); - p++) { - int mds = p->first; - MDSSession &s = p->second; - if (!s.requests.empty()) { - const MDSMap::mds_info_t& info = mdsmap->get_mds_info(mds); - for (set::const_iterator q = info.export_targets.begin(); - q != info.export_targets.end(); - q++) { - if (mds_sessions.count(*q) == 0 && waiting_for_session.count(mds) == 0) { - dout(10) << "check_mds_sessions opening mds" << mds - << " export target mds" << *q << dendl; - messenger->send_message(new MClientSession(CEPH_SESSION_REQUEST_OPEN), - mdsmap->get_inst(*q)); - waiting_for_session[*q].size(); - } +void Client::connect_mds_targets(int mds) +{ + //this function shouldn't be called unless we lost a connection + assert (mds_sessions.count(mds)); + MDSSession &s = mds_sessions[mds]; + if (!s.requests.empty()) { + const MDSMap::mds_info_t& info = mdsmap->get_mds_info(mds); + for (set::const_iterator q = info.export_targets.begin(); + q != info.export_targets.end(); + q++) { + if (mds_sessions.count(*q) == 0 && waiting_for_session.count(mds) == 0) { + dout(10) << "check_mds_sessions opening mds" << mds + << " export target mds" << *q << dendl; + messenger->send_message(new MClientSession(CEPH_SESSION_REQUEST_OPEN), + mdsmap->get_inst(*q)); + waiting_for_session[*q].size(); } } - } + } } int Client::make_request(MetaRequest *request, @@ -896,9 +893,6 @@ int Client::make_request(MetaRequest *request, // send request. send_request(request, mds); - // make sure we have needed mds sessions open - check_mds_sessions(); - // wait for signal dout(20) << "awaiting reply|forward|kick on " << &cond << dendl; request->kick = false; @@ -1357,8 +1351,6 @@ void Client::handle_mds_map(MMDSMap* m) delete oldmap; delete m; - check_mds_sessions(); - monclient->sub_got("mdsmap", mdsmap->get_epoch()); } @@ -1410,6 +1402,9 @@ void Client::send_reconnect(int mds) // reset my cap seq number mds_sessions[mds].seq = 0; + //connect to the mds' offload targets + connect_mds_targets(mds); + //make sure unsafe requests get saved resend_unsafe_requests(mds); } else { dout(10) << " i had no session with this mds" << dendl; diff --git a/src/client/Client.h b/src/client/Client.h index 4c0c39dfeafd3..690cd306c71e6 100644 --- a/src/client/Client.h +++ b/src/client/Client.h @@ -868,7 +868,7 @@ public: void encode_dentry_release(Dentry *dn, MClientRequest *req, int mds, int drop, int unless); int choose_target_mds(MetaRequest *req); - void check_mds_sessions(); + void connect_mds_targets(int mds); void send_request(MetaRequest *request, int mds); void kick_requests(int mds, bool signal); void handle_client_request_forward(MClientRequestForward *reply); -- 2.39.5