From: John Spray Date: Mon, 19 Dec 2016 12:38:20 +0000 (+0000) Subject: mds: const methods on SnapRealm X-Git-Tag: v12.0.1~140^2~26 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=6cc01307d3543aaceffc9a63051ec53140b5e1db;p=ceph.git mds: const methods on SnapRealm Signed-off-by: John Spray --- diff --git a/src/mds/SnapRealm.cc b/src/mds/SnapRealm.cc index 0b22b14b694c..df5cb12df7fa 100644 --- a/src/mds/SnapRealm.cc +++ b/src/mds/SnapRealm.cc @@ -27,8 +27,8 @@ #define dout_subsys ceph_subsys_mds #undef dout_prefix #define dout_prefix _prefix(_dout, mdcache->mds->get_nodeid(), inode, srnode.seq, this) -static ostream& _prefix(std::ostream *_dout, int whoami, CInode *inode, - uint64_t seq, SnapRealm *realm) { +static ostream& _prefix(std::ostream *_dout, int whoami, const CInode *inode, + uint64_t seq, const SnapRealm *realm) { return *_dout << " mds." << whoami << ".cache.snaprealm(" << inode->ino() << " seq " << seq << " " << realm << ") "; @@ -223,7 +223,7 @@ void SnapRealm::close_parents() */ void SnapRealm::build_snap_set(set &s, snapid_t& max_seq, snapid_t& max_last_created, snapid_t& max_last_destroyed, - snapid_t first, snapid_t last) + snapid_t first, snapid_t last) const { dout(10) << "build_snap_set [" << first << "," << last << "] on " << *this << dendl; @@ -235,16 +235,16 @@ void SnapRealm::build_snap_set(set &s, max_last_destroyed = srnode.last_destroyed; // include my snaps within interval [first,last] - for (map::iterator p = srnode.snaps.lower_bound(first); // first element >= first + for (map::const_iterator p = srnode.snaps.lower_bound(first); // first element >= first p != srnode.snaps.end() && p->first <= last; ++p) s.insert(p->first); // include snaps for parents during intervals that intersect [first,last] - for (map::iterator p = srnode.past_parents.lower_bound(first); + for (map::const_iterator p = srnode.past_parents.lower_bound(first); p != srnode.past_parents.end() && p->first >= first && p->second.first <= last; ++p) { - CInode *oldparent = mdcache->get_inode(p->second.ino); + const CInode *oldparent = mdcache->get_inode(p->second.ino); assert(oldparent); // call open_parents first! assert(oldparent->snaprealm); oldparent->snaprealm->build_snap_set(s, max_seq, max_last_created, max_last_destroyed, @@ -257,7 +257,7 @@ void SnapRealm::build_snap_set(set &s, } -void SnapRealm::check_cache() +void SnapRealm::check_cache() const { assert(open); if (cached_seq >= srnode.seq) @@ -283,7 +283,7 @@ void SnapRealm::check_cache() << ")" << dendl; } -const set& SnapRealm::get_snaps() +const set& SnapRealm::get_snaps() const { check_cache(); dout(10) << "get_snaps " << cached_snaps @@ -295,7 +295,7 @@ const set& SnapRealm::get_snaps() /* * build vector in reverse sorted order */ -const SnapContext& SnapRealm::get_snap_context() +const SnapContext& SnapRealm::get_snap_context() const { check_cache(); @@ -505,7 +505,7 @@ const bufferlist& SnapRealm::get_snap_trace() return cached_snap_trace; } -void SnapRealm::build_snap_trace(bufferlist& snapbl) +void SnapRealm::build_snap_trace(bufferlist& snapbl) const { SnapRealmInfo info(inode->ino(), srnode.created, srnode.seq, srnode.current_parent_since); @@ -526,7 +526,7 @@ void SnapRealm::build_snap_trace(bufferlist& snapbl) info.h.parent = 0; info.my_snaps.reserve(srnode.snaps.size()); - for (map::reverse_iterator p = srnode.snaps.rbegin(); + for (map::const_reverse_iterator p = srnode.snaps.rbegin(); p != srnode.snaps.rend(); ++p) info.my_snaps.push_back(p->first); diff --git a/src/mds/SnapRealm.h b/src/mds/SnapRealm.h index 5d6f42194e50..4a99d639140a 100644 --- a/src/mds/SnapRealm.h +++ b/src/mds/SnapRealm.h @@ -24,8 +24,19 @@ class MDSInternalContextBase; struct SnapRealm { - // realm state +protected: + // cache + mutable snapid_t cached_seq; // max seq over self and all past+present parents. + mutable snapid_t cached_last_created; // max last_created over all past+present parents + mutable snapid_t cached_last_destroyed; + mutable set cached_snaps; + mutable SnapContext cached_snap_context; + mutable bufferlist cached_snap_trace; + + void check_cache() const; +public: + // realm state sr_t srnode; // in-memory state @@ -39,14 +50,7 @@ struct SnapRealm { map > > open_past_parents; // these are explicitly pinned. unsigned num_open_past_parents; - // cache - snapid_t cached_seq; // max seq over self and all past+present parents. - snapid_t cached_last_created; // max last_created over all past+present parents - snapid_t cached_last_destroyed; - set cached_snaps; - SnapContext cached_snap_context; - bufferlist cached_snap_trace; elist inodes_with_caps; // for efficient realm splits map* > client_caps; // to identify clients who need snap notifications @@ -84,18 +88,17 @@ struct SnapRealm { void build_snap_set(set& s, snapid_t& max_seq, snapid_t& max_last_created, snapid_t& max_last_destroyed, - snapid_t first, snapid_t last); + snapid_t first, snapid_t last) const; void get_snap_info(map& infomap, snapid_t first=0, snapid_t last=CEPH_NOSNAP); const bufferlist& get_snap_trace(); - void build_snap_trace(bufferlist& snapbl); + void build_snap_trace(bufferlist& snapbl) const; const string& get_snapname(snapid_t snapid, inodeno_t atino); snapid_t resolve_snapname(const string &name, inodeno_t atino, snapid_t first=0, snapid_t last=CEPH_NOSNAP); - void check_cache(); - const set& get_snaps(); - const SnapContext& get_snap_context(); + const set& get_snaps() const; + const SnapContext& get_snap_context() const; void invalidate_cached_snaps() { cached_seq = 0; }