From 37f2bda50cfe5f3af87d905d2e3cc0e8a08ea647 Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Sat, 10 Dec 2022 22:03:11 +0000 Subject: [PATCH] crimson/osd: drop data aliases from SnapTrimObjSubEvent::adjust_snaps() Signed-off-by: Radoslaw Zarzynski --- .../osd/osd_operations/snaptrim_event.cc | 64 +++++++++++-------- .../osd/osd_operations/snaptrim_event.h | 5 ++ 2 files changed, 43 insertions(+), 26 deletions(-) diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index 385de0b337091..0620beb46f12b 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -281,6 +281,43 @@ SnapTrimObjSubEvent::remove_clone( return OpsExecuter::snap_map_remove(coid, pg->snap_mapper, pg->osdriver, txn); } +SnapTrimObjSubEvent::interruptible_future<> +SnapTrimObjSubEvent::adjust_snaps( + ObjectContextRef obc, + const std::set& new_snaps, + ceph::os::Transaction& txn, + std::vector& log_entries +) { + obc->ssc->snapset.clone_snaps[coid.snap] = + std::vector(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( @@ -326,32 +363,7 @@ 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(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 { diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index 5d4a050edb614..b2c57f7d0f92d 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.h +++ b/src/crimson/osd/osd_operations/snaptrim_event.h @@ -133,6 +133,11 @@ private: ObjectContextRef obc, ceph::os::Transaction& txn, std::vector& log_entries); + interruptible_future<> adjust_snaps( + ObjectContextRef obc, + const std::set& new_snaps, + ceph::os::Transaction& txn, + std::vector& log_entries); using remove_or_update_ret_t = std::pair>; -- 2.39.5