if (mds->is_rejoin()) {
map<client_t, set<mds_rank_t> > client_exports;
- for (map<inodeno_t,map<client_t,ceph_mds_cap_reconnect> >::iterator p = cap_exports.begin();
- p != cap_exports.end();
- ++p) {
+ 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];
if (rejoins.count(target) == 0)
continue;
rejoins[target]->cap_exports[p->first] = p->second;
- for (map<client_t,ceph_mds_cap_reconnect>::iterator q = p->second.begin();
- q != p->second.end();
- ++q)
+ for (auto q = p->second.begin(); q != p->second.end(); ++q)
client_exports[q->first].insert(target);
}
for (map<client_t, set<mds_rank_t> >::iterator p = client_exports.begin();
map<inodeno_t,map<client_t,Capability::Import> > imported_caps;
// check cap exports
- for (map<inodeno_t,map<client_t,ceph_mds_cap_reconnect> >::iterator p = weak->cap_exports.begin();
- p != weak->cap_exports.end();
- ++p) {
+ for (auto p = weak->cap_exports.begin(); p != weak->cap_exports.end(); ++p) {
CInode *in = get_inode(p->first);
assert(!in || in->is_auth());
- for (map<client_t,ceph_mds_cap_reconnect>::iterator q = p->second.begin();
- q != p->second.end();
- ++q) {
+ for (auto q = p->second.begin(); q != p->second.end(); ++q) {
dout(10) << " claiming cap import " << p->first << " client." << q->first << " on " << *in << dendl;
Capability *cap = rejoin_import_cap(in, q->first, q->second, from);
Capability::Import& im = imported_caps[p->first][q->first];
// check cap exports.
rejoin_client_map.insert(weak->client_map.begin(), weak->client_map.end());
- for (map<inodeno_t,map<client_t,ceph_mds_cap_reconnect> >::iterator p = weak->cap_exports.begin();
- p != weak->cap_exports.end();
- ++p) {
+ for (auto p = weak->cap_exports.begin(); p != weak->cap_exports.end(); ++p) {
CInode *in = get_inode(p->first);
assert(in && in->is_auth());
// note
- for (map<client_t,ceph_mds_cap_reconnect>::iterator q = p->second.begin();
- q != p->second.end();
- ++q) {
+ for (auto q = p->second.begin(); q != p->second.end(); ++q) {
dout(10) << " claiming cap import " << p->first << " client." << q->first << dendl;
cap_imports[p->first][q->first][from] = q->second;
}
// mark client caps stale.
MClientCaps *m = new MClientCaps(CEPH_CAP_OP_EXPORT, p->first, 0,
- cap_exports[p->first][q->first].cap_id, 0,
+ cap_exports[p->first][q->first].capinfo.cap_id, 0,
mds->get_osd_epoch_barrier());
m->set_cap_peer(q->second.cap_id, q->second.issue_seq, q->second.mseq, from, 0);
mds->send_message_client_counted(m, session);
} else if (ret == mds->get_nodeid()) {
assert(get_inode(ino));
} else {
- map<inodeno_t,map<client_t,map<mds_rank_t,ceph_mds_cap_reconnect> > >::iterator p;
- p = cap_imports.find(ino);
+ auto p = cap_imports.find(ino);
assert(p != cap_imports.end());
- for (map<client_t,map<mds_rank_t,ceph_mds_cap_reconnect> >::iterator q = p->second.begin();
- q != p->second.end();
- ++q) {
+ for (auto q = p->second.begin(); q != p->second.end(); ++q) {
assert(q->second.count(MDS_RANK_NONE));
assert(q->second.size() == 1);
rejoin_export_caps(p->first, q->first, q->second[MDS_RANK_NONE], ret);
{
dout(10) << "process_imported_caps" << dendl;
- for (map<inodeno_t,map<client_t, map<mds_rank_t,ceph_mds_cap_reconnect> > >::iterator p = cap_imports.begin();
- p != cap_imports.end();
- ++p) {
+ for (auto p = cap_imports.begin(); p != cap_imports.end(); ++p) {
CInode *in = get_inode(p->first);
if (in) {
assert(in->is_auth());
// process cap imports
// ino -> client -> frommds -> capex
- for (map<inodeno_t,map<client_t, map<mds_rank_t,ceph_mds_cap_reconnect> > >::iterator p = cap_imports.begin();
- p != cap_imports.end(); ) {
+ for (auto p = cap_imports.begin(); p != cap_imports.end(); ) {
CInode *in = get_inode(p->first);
if (!in) {
dout(10) << " still missing ino " << p->first
continue;
}
assert(in->is_auth());
- for (map<client_t,map<mds_rank_t,ceph_mds_cap_reconnect> >::iterator q = p->second.begin();
- q != p->second.end();
- ++q) {
+ for (auto q = p->second.begin(); q != p->second.end(); ++q) {
Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(q->first.v));
assert(session);
- for (map<mds_rank_t,ceph_mds_cap_reconnect>::iterator r = q->second.begin();
- r != q->second.end();
- ++r) {
- add_reconnected_cap(in, q->first, inodeno_t(r->second.snaprealm));
+ for (auto r = q->second.begin(); r != q->second.end(); ++r) {
+ add_reconnected_cap(in, q->first, inodeno_t(r->second.capinfo.snaprealm));
Capability *cap = in->reconnect_cap(q->first, r->second, session);
if (r->first >= 0) {
if (cap->get_last_seq() == 0) // don't increase mseq if cap already exists
cap->inc_mseq();
- do_cap_import(session, in, cap, r->second.cap_id, 0, 0, r->first, 0);
+ do_cap_import(session, in, cap, r->second.capinfo.cap_id, 0, 0, r->first, 0);
Capability::Import& im = rejoin_imported_caps[r->first][p->first][q->first];
im.cap_id = cap->get_cap_id();
-Capability* MDCache::rejoin_import_cap(CInode *in, client_t client, ceph_mds_cap_reconnect& icr, mds_rank_t frommds)
+Capability* MDCache::rejoin_import_cap(CInode *in, client_t client, const cap_reconnect_t& icr, mds_rank_t frommds)
{
dout(10) << "rejoin_import_cap for client." << client << " from mds." << frommds
<< " on " << *in << dendl;
if (frommds >= 0) {
if (cap->get_last_seq() == 0) // don't increase mseq if cap already exists
cap->inc_mseq();
- do_cap_import(session, in, cap, icr.cap_id, 0, 0, frommds, 0);
+ do_cap_import(session, in, cap, icr.capinfo.cap_id, 0, 0, frommds, 0);
}
return cap;
stringstream warn_str;
- for (map<inodeno_t,map<client_t,map<mds_rank_t,ceph_mds_cap_reconnect> > >::iterator p = cap_imports.begin();
- p != cap_imports.end();
- ++p) {
+ for (auto p = cap_imports.begin(); p != cap_imports.end(); ++p) {
warn_str << " ino " << p->first << "\n";
- for (map<client_t,map<mds_rank_t,ceph_mds_cap_reconnect> >::iterator q = p->second.begin();
- q != p->second.end();
- ++q) {
+ for (auto q = p->second.begin(); q != p->second.end(); ++q) {
Session *session = mds->sessionmap.get_session(entity_name_t::CLIENT(q->first.v));
if (session) {
// mark client caps stale.
void MDCache::try_reconnect_cap(CInode *in, Session *session)
{
client_t client = session->info.get_client();
- ceph_mds_cap_reconnect *rc = get_replay_cap_reconnect(in->ino(), client);
+ const cap_reconnect_t *rc = get_replay_cap_reconnect(in->ino(), client);
if (rc) {
in->reconnect_cap(client, *rc, session);
dout(10) << "try_reconnect_cap client." << client
- << " reconnect wanted " << ccap_string(rc->wanted)
- << " issue " << ccap_string(rc->issued)
+ << " reconnect wanted " << ccap_string(rc->capinfo.wanted)
+ << " issue " << ccap_string(rc->capinfo.issued)
<< " on " << *in << dendl;
remove_replay_cap_reconnect(in->ino(), client);
map<inodeno_t,pair<mds_rank_t,map<client_t,Capability::Export> > > rejoin_slave_exports;
map<client_t,entity_inst_t> rejoin_client_map;
- map<inodeno_t,map<client_t,ceph_mds_cap_reconnect> > cap_exports; // ino -> client -> capex
+ map<inodeno_t,map<client_t,cap_reconnect_t> > cap_exports; // ino -> client -> capex
map<inodeno_t,mds_rank_t> cap_export_targets; // ino -> auth mds
- map<inodeno_t,map<client_t,map<mds_rank_t,ceph_mds_cap_reconnect> > > cap_imports; // ino -> client -> frommds -> capex
+ map<inodeno_t,map<client_t,map<mds_rank_t,cap_reconnect_t> > > cap_imports; // ino -> client -> frommds -> capex
map<inodeno_t,int> cap_imports_dirty;
set<inodeno_t> cap_imports_missing;
map<inodeno_t, list<MDSInternalContextBase*> > cap_reconnect_waiters;
void rejoin_start(MDSInternalContext *rejoin_done_);
void rejoin_gather_finish();
void rejoin_send_rejoins();
- void rejoin_export_caps(inodeno_t ino, client_t client, ceph_mds_cap_reconnect& capinfo,
+ void rejoin_export_caps(inodeno_t ino, client_t client, const cap_reconnect_t& icr,
int target=-1) {
- cap_exports[ino][client] = capinfo;
+ cap_exports[ino][client] = icr;
cap_export_targets[ino] = target;
}
- void rejoin_recovered_caps(inodeno_t ino, client_t client, cap_reconnect_t& icr,
+ void rejoin_recovered_caps(inodeno_t ino, client_t client, const cap_reconnect_t& icr,
mds_rank_t frommds=MDS_RANK_NONE) {
- cap_imports[ino][client][frommds] = icr.capinfo;
+ cap_imports[ino][client][frommds] = icr;
}
- ceph_mds_cap_reconnect *get_replay_cap_reconnect(inodeno_t ino, client_t client) {
+ const cap_reconnect_t *get_replay_cap_reconnect(inodeno_t ino, client_t client) {
if (cap_imports.count(ino) &&
cap_imports[ino].count(client) &&
cap_imports[ino][client].count(MDS_RANK_NONE)) {
map<client_t,MClientSnap*>& splits);
void do_realm_invalidate_and_update_notify(CInode *in, int snapop, bool nosend=false);
void send_snaps(map<client_t,MClientSnap*>& splits);
- Capability* rejoin_import_cap(CInode *in, client_t client, ceph_mds_cap_reconnect& icr, mds_rank_t frommds);
+ Capability* rejoin_import_cap(CInode *in, client_t client, const cap_reconnect_t& icr, mds_rank_t frommds);
void finish_snaprealm_reconnect(client_t client, SnapRealm *realm, snapid_t seq);
void try_reconnect_cap(CInode *in, Session *session);
void export_remaining_imported_caps();