return OpsExecuter::snap_map_remove(coid, pg->snap_mapper, pg->osdriver, txn);
}
+SnapTrimObjSubEvent::interruptible_future<>
+SnapTrimObjSubEvent::adjust_snaps(
+ ObjectContextRef obc,
+ const std::set<snapid_t>& new_snaps,
+ ceph::os::Transaction& txn,
+ std::vector<pg_log_entry_t>& log_entries
+) {
+ obc->ssc->snapset.clone_snaps[coid.snap] =
+ std::vector<snapid_t>(new_snaps.rbegin(), new_snaps.rend());
+ // we still do a 'modify' event on this object just to trigger a
+ // snapmapper.update ... :(
+ obc->obs.oi.prior_version = obc->obs.oi.version;
+ obc->obs.oi.version = osd_op_p.at_version;
+ ceph::bufferlist bl;
+ encode(obc->obs.oi,
+ bl,
+ pg->get_osdmap()->get_features(CEPH_ENTITY_TYPE_OSD, nullptr));
+ txn.setattr(
+ pg->get_collection_ref()->get_cid(),
+ ghobject_t{coid, ghobject_t::NO_GEN, shard_id_t::NO_SHARD},
+ OI_ATTR,
+ bl);
+ log_entries.emplace_back(
+ pg_log_entry_t{
+ pg_log_entry_t::MODIFY,
+ coid,
+ obc->obs.oi.version,
+ obc->obs.oi.prior_version,
+ 0,
+ osd_reqid_t(),
+ obc->obs.oi.mtime,
+ 0}
+ );
+ return OpsExecuter::snap_map_modify(
+ coid, new_snaps, pg->snap_mapper, pg->osdriver, txn);
+}
+
SnapTrimObjSubEvent::interruptible_future<
SnapTrimObjSubEvent::remove_or_update_ret_t>
SnapTrimObjSubEvent::remove_or_update(
// save adjusted snaps for this object
logger().info("{}: {} snaps {} -> {}",
*this, coid, old_snaps, new_snaps);
- obc->ssc->snapset.clone_snaps[coid.snap] =
- std::vector<snapid_t>(new_snaps.rbegin(), new_snaps.rend());
- // we still do a 'modify' event on this object just to trigger a
- // snapmapper.update ... :(
-
- obc->obs.oi.prior_version = obc->obs.oi.version;
- obc->obs.oi.version = osd_op_p.at_version;
- ceph::bufferlist bl;
- encode(obc->obs.oi, bl, pg->get_osdmap()->get_features(CEPH_ENTITY_TYPE_OSD, nullptr));
- txn.setattr(
- pg->get_collection_ref()->get_cid(),
- ghobject_t{coid, ghobject_t::NO_GEN, shard_id_t::NO_SHARD},
- OI_ATTR,
- bl);
- log_entries.emplace_back(
- pg_log_entry_t{
- pg_log_entry_t::MODIFY,
- coid,
- obc->obs.oi.version,
- obc->obs.oi.prior_version,
- 0,
- osd_reqid_t(),
- obc->obs.oi.mtime,
- 0}
- );
- ret = OpsExecuter::snap_map_modify(coid, new_snaps, pg->snap_mapper, pg->osdriver, txn);
+ ret = adjust_snaps(obc, new_snaps, txn, log_entries);
}
return std::move(ret).then_interruptible(
[&txn, obc, num_objects_before_trim, log_entries=std::move(log_entries), head_obc=std::move(head_obc), this]() mutable {