ENCODE_START(3, 2, bl);
encode(seq, bl);
encode(true, bl); // head_exists
+ std::vector<snapid_t> snaps;
encode(snaps, bl);
encode(clones, bl);
encode(clone_overlap, bl);
DECODE_START_LEGACY_COMPAT_LEN(3, 2, 2, bl);
decode(seq, bl);
bl += 1u; // skip legacy head_exists (always true)
+ std::vector<snapid_t> snaps;
decode(snaps, bl);
decode(clones, bl);
decode(clone_overlap, bl);
o.push_back(new SnapSet);
o.push_back(new SnapSet);
o.back()->seq = 123;
- o.back()->snaps.push_back(123);
- o.back()->snaps.push_back(12);
o.push_back(new SnapSet);
o.back()->seq = 123;
- o.back()->snaps.push_back(123);
- o.back()->snaps.push_back(12);
o.back()->clones.push_back(12);
o.back()->clone_size[12] = 12345;
o.back()->clone_overlap[12];
ostream& operator<<(ostream& out, const SnapSet& cs)
{
- return out << cs.seq << "=" << cs.snaps << ":"
- << cs.clone_snaps;
+ return out << cs.seq << "=" << cs.clone_snaps;
}
void SnapSet::from_snap_set(const librados::snap_set_t& ss, bool legacy)
clones.reserve(_clones.size());
for (auto p = _clones.begin(); p != _clones.end(); ++p)
clones.push_back(*p);
-
- // descending
- snaps.clear();
- snaps.reserve(_snaps.size());
- for (auto p = _snaps.rbegin();
- p != _snaps.rend(); ++p)
- snaps.push_back(*p);
}
uint64_t SnapSet::get_clone_bytes(snapid_t clone) const
return size - overlap.size();
}
-void SnapSet::filter(const pg_pool_t &pinfo)
-{
- vector<snapid_t> oldsnaps;
- oldsnaps.swap(snaps);
- for (auto i = oldsnaps.cbegin(); i != oldsnaps.cend(); ++i) {
- if (!pinfo.is_removed_snap(*i))
- snaps.push_back(*i);
- }
-}
-
-SnapSet SnapSet::get_filtered(const pg_pool_t &pinfo) const
-{
- SnapSet ss = *this;
- ss.filter(pinfo);
- return ss;
-}
-
// -- watch_info_t --
void watch_info_t::encode(ceph::buffer::list& bl, uint64_t features) const
*/
struct SnapSet {
snapid_t seq;
- // NOTE: this is for pre-octopus compatibility only! remove in Q release
- std::vector<snapid_t> snaps; // descending
std::vector<snapid_t> clones; // ascending
std::map<snapid_t, interval_set<uint64_t> > clone_overlap; // overlap w/ next newest
std::map<snapid_t, uint64_t> clone_size;
return out;
}
-
- SnapSet get_filtered(const pg_pool_t &pinfo) const;
- void filter(const pg_pool_t &pinfo);
};
WRITE_CLASS_ENCODER(SnapSet)