From 792b04ba1ec57f0dc949c573b7161fb2910265a8 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Wed, 1 Dec 2010 09:44:58 -0800 Subject: [PATCH] client: connect to export targets on cap EXPORT Also unconditionally connect on reconnect, even when there aren't any outstanding requests. Signed-off-by: Sage Weil --- src/client/Client.cc | 32 ++++++++++++++++---------------- 1 file changed, 16 insertions(+), 16 deletions(-) diff --git a/src/client/Client.cc b/src/client/Client.cc index 99ebc2af328a6..c9876fc5b1b47 100644 --- a/src/client/Client.cc +++ b/src/client/Client.cc @@ -918,20 +918,18 @@ out: 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(); - } + dout(10) << "connect_mds_targets for mds" << mds << dendl; + assert(mds_sessions.count(mds)); + 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(); } } } @@ -2715,8 +2713,7 @@ void Client::handle_cap_import(Inode *in, MClientCaps *m) m->put(); } -void Client::handle_cap_export(Inode *in, MClientCaps *m, - bool& open_target_sessions) +void Client::handle_cap_export(Inode *in, MClientCaps *m) { int mds = m->get_source().num(); InodeCap *cap = NULL; @@ -2744,6 +2741,9 @@ void Client::handle_cap_export(Inode *in, MClientCaps *m, in->exporting_issued = cap->issued; in->exporting_mseq = m->get_mseq(); in->exporting_mds = mds; + + // open export targets, so we'll get the matching IMPORT + connect_mds_targets(mds); } else dout(5) << "handle_cap_export ino " << m->get_ino() << " mseq " << m->get_mseq() << " EXPORT from mds" << mds -- 2.39.5