if (!is_preboot() ||
m->last < superblock.purged_snaps_last) {
goto out;
+ } else {
+ OSDriver osdriver{store.get(), service.meta_ch, make_purged_snaps_oid()};
+ SnapMapper::record_purged_snaps(
+ cct,
+ osdriver,
+ osdriver.get_transaction(&t),
+ m->purged_snaps);
}
- SnapMapper::record_purged_snaps(cct, store.get(), service.meta_ch,
- make_purged_snaps_oid(), &t,
- m->purged_snaps);
superblock.purged_snaps_last = m->last;
write_superblock(t);
store->queue_transaction(
// record new purged_snaps
if (superblock.purged_snaps_last == start - 1) {
- SnapMapper::record_purged_snaps(cct, store.get(), service.meta_ch,
- make_purged_snaps_oid(), &t,
- purged_snaps);
+ OSDriver osdriver{store.get(), service.meta_ch, make_purged_snaps_oid()};
+ SnapMapper::record_purged_snaps(
+ cct,
+ osdriver,
+ osdriver.get_transaction(&t),
+ purged_snaps);
superblock.purged_snaps_last = last;
} else {
dout(10) << __func__ << " superblock purged_snaps_last is "
void SnapMapper::record_purged_snaps(
CephContext *cct,
- ObjectStore *store,
- ObjectStore::CollectionHandle& ch,
- ghobject_t hoid,
- ObjectStore::Transaction *t,
+ OSDriver& backend,
+ OSDriver::OSTransaction&& txn,
map<epoch_t,mempool::osdmap::map<int64_t,snap_interval_set_t>> purged_snaps)
{
dout(10) << __func__ << " purged_snaps " << purged_snaps << dendl;
- OSDriver backend(store, ch, hoid);
map<string,ceph::buffer::list> m;
set<string> rm;
for (auto& [epoch, bypool] : purged_snaps) {
}
}
}
- auto txn = backend.get_transaction(t);
txn.remove_keys(rm);
txn.set_keys(m);
dout(10) << __func__ << " rm " << rm.size() << " keys, set " << m.size()
static void record_purged_snaps(
CephContext *cct,
- ObjectStore *store,
- ObjectStore::CollectionHandle& ch,
- ghobject_t hoid,
- ObjectStore::Transaction *t,
+ OSDriver& backend,
+ OSDriver::OSTransaction&& txn,
std::map<epoch_t,mempool::osdmap::map<int64_t,snap_interval_set_t>> purged_snaps);
static void scrub_purged_snaps(
CephContext *cct,