mds: add SnapRealm projection methods

This commit is contained in:
Greg Farnum 2010-08-12 14:11:17 -07:00
parent 6289b3e409
commit bb0dcd2ced
2 changed files with 30 additions and 0 deletions

View File

@ -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();
}

View File

@ -139,6 +139,7 @@ struct SnapRealm {
// realm state
sr_t srnode;
list<sr_t*> 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)