From 0eacee9576265a9fa6a2ccb9db95a05436009487 Mon Sep 17 00:00:00 2001 From: "Yan, Zheng" Date: Sun, 22 Apr 2018 18:27:52 +0800 Subject: [PATCH] mds: combine MDCache::{cap_exports,cap_export_targets} this change saves a map lookup Signed-off-by: "Yan, Zheng" (cherry picked from commit ea72863b2b8ab5c387b70687300f6f7cff2019db) --- src/mds/MDCache.cc | 21 ++++++++++----------- src/mds/MDCache.h | 8 ++++---- 2 files changed, 14 insertions(+), 15 deletions(-) diff --git a/src/mds/MDCache.cc b/src/mds/MDCache.cc index c10cc2fe4f8d5..f801dff71b787 100644 --- a/src/mds/MDCache.cc +++ b/src/mds/MDCache.cc @@ -3955,12 +3955,11 @@ void MDCache::rejoin_send_rejoins() if (mds->is_rejoin()) { map > client_exports; for (auto p = cap_exports.begin(); p != cap_exports.end(); ++p) { - assert(cap_export_targets.count(p->first)); - mds_rank_t target = cap_export_targets[p->first]; + mds_rank_t target = p->second.first; if (rejoins.count(target) == 0) continue; - rejoins[target]->cap_exports[p->first] = p->second; - for (auto q = p->second.begin(); q != p->second.end(); ++q) + rejoins[target]->cap_exports[p->first] = p->second.second; + for (auto q = p->second.second.begin(); q != p->second.second.end(); ++q) client_exports[q->first].insert(target); } for (map >::iterator p = client_exports.begin(); @@ -5062,13 +5061,13 @@ void MDCache::handle_cache_rejoin_ack(MMDSCacheRejoin *ack) for (map >::iterator p = peer_imported.begin(); p != peer_imported.end(); ++p) { - assert(cap_exports.count(p->first)); - assert(cap_export_targets.count(p->first)); - assert(cap_export_targets[p->first] == from); + auto& ex = cap_exports.at(p->first); + assert(ex.first == from); for (map::iterator q = p->second.begin(); q != p->second.end(); ++q) { - assert(cap_exports[p->first].count(q->first)); + auto r = ex.second.find(q->first); + assert(r != ex.second.end()); dout(10) << " exporting caps for client." << q->first << " ino " << p->first << dendl; Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(q->first.v)); @@ -5076,15 +5075,15 @@ void MDCache::handle_cache_rejoin_ack(MMDSCacheRejoin *ack) // mark client caps stale. MClientCaps *m = new MClientCaps(CEPH_CAP_OP_EXPORT, p->first, 0, - cap_exports[p->first][q->first].capinfo.cap_id, 0, + r->second.capinfo.cap_id, 0, mds->get_osd_epoch_barrier()); m->set_cap_peer(q->second.cap_id, q->second.issue_seq, q->second.mseq, (q->second.cap_id > 0 ? from : -1), 0); mds->send_message_client_counted(m, session); - cap_exports[p->first].erase(q->first); + ex.second.erase(r); } - assert(cap_exports[p->first].empty()); + assert(ex.second.empty()); } // done? diff --git a/src/mds/MDCache.h b/src/mds/MDCache.h index 3d3f9686414b3..c40c2452e65c6 100644 --- a/src/mds/MDCache.h +++ b/src/mds/MDCache.h @@ -548,8 +548,7 @@ protected: map > > rejoin_slave_exports; map rejoin_client_map; - map > cap_exports; // ino -> client -> capex - map cap_export_targets; // ino -> auth mds + map > > cap_exports; // ino -> target, client -> capex map > > cap_imports; // ino -> client -> frommds -> capex set cap_imports_missing; @@ -589,8 +588,9 @@ public: void rejoin_send_rejoins(); void rejoin_export_caps(inodeno_t ino, client_t client, const cap_reconnect_t& icr, int target=-1) { - cap_exports[ino][client] = icr; - cap_export_targets[ino] = target; + auto& ex = cap_exports[ino]; + ex.first = target; + ex.second[client] = icr; } void rejoin_recovered_caps(inodeno_t ino, client_t client, const cap_reconnect_t& icr, mds_rank_t frommds=MDS_RANK_NONE) { -- 2.39.5