diff options
author | Yan, Zheng <zheng.z.yan@intel.com> | 2013-05-25 14:38:54 +0800 |
---|---|---|
committer | Yan, Zheng <zheng.z.yan@intel.com> | 2013-06-17 19:14:05 +0800 |
commit | 18b9e63b4df643e1f2fb8f17416089e5d970bf60 (patch) | |
tree | 1792712b42a788075118a09f8158e6a2bb988f39 | |
parent | e3fb095d8aa88556e4356c76b848fa61b09acbc0 (diff) | |
download | ceph-18b9e63b4df643e1f2fb8f17416089e5d970bf60.tar.gz |
mds: don't update migrate_seq when importing non-auth cap
We use migrate_seq to distinguish old and new auth MDS. So we should
not change migrate_seq when importing non-auth cap.
Signed-off-by: Yan, Zheng <zheng.z.yan@intel.com>
-rw-r--r-- | src/mds/Capability.h | 5 | ||||
-rw-r--r-- | src/mds/Migrator.cc | 8 | ||||
-rw-r--r-- | src/mds/Migrator.h | 3 |
3 files changed, 9 insertions, 7 deletions
diff --git a/src/mds/Capability.h b/src/mds/Capability.h index 54d2312daeb..fdecb9090b3 100644 --- a/src/mds/Capability.h +++ b/src/mds/Capability.h @@ -273,7 +273,7 @@ public: return Export(_wanted, issued(), pending(), client_follows, mseq+1, last_issue_stamp); } void rejoin_import() { mseq++; } - void merge(Export& other) { + void merge(Export& other, bool auth_cap) { // issued + pending int newpending = other.pending | pending(); if (other.issued & ~newpending) @@ -286,7 +286,8 @@ public: // wanted _wanted = _wanted | other.wanted; - mseq = other.mseq; + if (auth_cap) + mseq = other.mseq; } void merge(int otherwanted, int otherissued) { // issued + pending diff --git a/src/mds/Migrator.cc b/src/mds/Migrator.cc index 6ea28c9386a..0647448c40c 100644 --- a/src/mds/Migrator.cc +++ b/src/mds/Migrator.cc @@ -2223,7 +2223,7 @@ void Migrator::import_logged_start(dirfrag_t df, CDir *dir, int from, for (map<CInode*, map<client_t,Capability::Export> >::iterator p = import_caps[dir].begin(); p != import_caps[dir].end(); ++p) { - finish_import_inode_caps(p->first, from, p->second); + finish_import_inode_caps(p->first, true, p->second); } // send notify's etc. @@ -2398,7 +2398,7 @@ void Migrator::decode_import_inode_caps(CInode *in, } } -void Migrator::finish_import_inode_caps(CInode *in, int from, +void Migrator::finish_import_inode_caps(CInode *in, bool auth_cap, map<client_t,Capability::Export> &cap_map) { for (map<client_t,Capability::Export>::iterator it = cap_map.begin(); @@ -2412,7 +2412,7 @@ void Migrator::finish_import_inode_caps(CInode *in, int from, if (!cap) { cap = in->add_client_cap(it->first, session); } - cap->merge(it->second); + cap->merge(it->second, auth_cap); mds->mdcache->do_cap_import(session, in, cap); } @@ -2688,7 +2688,7 @@ void Migrator::logged_import_caps(CInode *in, mds->server->finish_force_open_sessions(client_map, sseqmap); assert(cap_imports.count(in)); - finish_import_inode_caps(in, from, cap_imports[in]); + finish_import_inode_caps(in, false, cap_imports[in]); mds->locker->eval(in, CEPH_CAP_LOCKS, true); mds->send_message_mds(new MExportCapsAck(in->ino()), from); diff --git a/src/mds/Migrator.h b/src/mds/Migrator.h index 70b59bc0f97..afe2e6cd65a 100644 --- a/src/mds/Migrator.h +++ b/src/mds/Migrator.h @@ -256,7 +256,8 @@ public: void decode_import_inode_caps(CInode *in, bufferlist::iterator &blp, map<CInode*, map<client_t,Capability::Export> >& cap_imports); - void finish_import_inode_caps(CInode *in, int from, map<client_t,Capability::Export> &cap_map); + void finish_import_inode_caps(CInode *in, bool auth_cap, + map<client_t,Capability::Export> &cap_map); int decode_import_dir(bufferlist::iterator& blp, int oldauth, CDir *import_root, |