From bb0dcd2cedeae65a0fb54e5a2a3e6498940da765 Mon Sep 17 00:00:00 2001 From: Greg Farnum Date: Thu, 12 Aug 2010 14:11:17 -0700 Subject: [PATCH] mds: add SnapRealm projection methods --- src/mds/snap.cc | 20 ++++++++++++++++++++ src/mds/snap.h | 10 ++++++++++ 2 files changed, 30 insertions(+) diff --git a/src/mds/snap.cc b/src/mds/snap.cc index a04dafb2f29..992b45f3a75 100644 --- a/src/mds/snap.cc +++ b/src/mds/snap.cc @@ -530,3 +530,23 @@ void SnapRealm::prune_past_parents() } } } + +sr_t *SnapRealm::project_snaprealm() +{ + if (projected_srnode.empty()) + projected_srnode.push_back(new sr_t(srnode)); + else + projected_srnode.push_back(new sr_t(*projected_srnode.back())); + dout(0) << "project_snaprealm " << projected_srnode.back() << dendl; + return projected_srnode.back(); +} + +void SnapRealm::pop_projected_snaprealm() +{ + assert(!projected_srnode.empty()); + dout(0) << "pop_projected_snaprealm " << projected_srnode.front() + << " seq" << projected_srnode.front()->seq << dendl; + srnode = *projected_srnode.front(); + delete projected_srnode.front(); + projected_srnode.pop_front(); +} diff --git a/src/mds/snap.h b/src/mds/snap.h index 0dac3438ee6..aec11747b7b 100644 --- a/src/mds/snap.h +++ b/src/mds/snap.h @@ -139,6 +139,7 @@ struct SnapRealm { // realm state sr_t srnode; + list projected_srnode; void encode(bufferlist& bl) const { __u8 struct_v = 2; @@ -273,6 +274,15 @@ struct SnapRealm { if (client_caps[client].empty()) client_caps.erase(client); } + + sr_t *get_projected_snaprealm() { + if (projected_srnode.empty()) + return &srnode; + else + return projected_srnode.back(); + } + sr_t *project_snaprealm(); + void pop_projected_snaprealm(); }; WRITE_CLASS_ENCODER(SnapRealm)