OSD snapshot metadata
---------------------
+ -- starting with mimic --
+
"removed_epoch_%llu_%08lx" % (pool, epoch)
-> interval_set<snapid_t>
interval. e.g., to test if epoch N is removed/purged, we'll find a key
>= N that either does or doesn't contain the given snap.
+
+ -- starting with octopus --
+
+ "purged_epoch_%08lx" % epoch
+ -> map<int64_t,interval_set<snapid_t>>
+
*/
namespace {
t);
}
}
+ if (tmp.require_osd_release >= ceph_release_t::octopus &&
+ !pending_inc.new_purged_snaps.empty()) {
+ // all snaps purged this epoch (across all pools)
+ string k = make_purged_snap_epoch_key(pending_inc.epoch);
+ bufferlist v;
+ encode(pending_inc.new_purged_snaps, v);
+ t->put(OSD_SNAP_PREFIX, k, v);
+ }
for (auto& i : pending_inc.new_purged_snaps) {
for (auto q = i.second.begin();
q != i.second.end();
return k;
}
+string OSDMonitor::make_purged_snap_epoch_key(epoch_t epoch)
+{
+ char k[80];
+ snprintf(k, sizeof(k), "purged_epoch_%08lx", (unsigned long)epoch);
+ return k;
+}
+
string OSDMonitor::_make_snap_key(bool purged, int64_t pool, snapid_t snap)
{
char k[80];
bool _is_pending_removed_snap(int64_t pool_id, snapid_t snapid);
string make_removed_snap_epoch_key(int64_t pool, epoch_t epoch);
+ string make_purged_snap_epoch_key(epoch_t epoch);
+
string _make_snap_key(bool purged, int64_t pool, snapid_t snap);
string _make_snap_key_value(bool purged,
int64_t pool, snapid_t snap, snapid_t num,