From: Radoslaw Zarzynski Date: Sat, 10 Dec 2022 22:28:55 +0000 (+0000) Subject: crimson/osd: dissect head whiteout removal into SnapTrimObjSubEvent::remove_head_whit... X-Git-Tag: v18.1.0~260^2~12 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=dda6d453d1d153d4ce90acee03adad2bc9e4429c;p=ceph.git crimson/osd: dissect head whiteout removal into SnapTrimObjSubEvent::remove_head_whiteout() Signed-off-by: Radoslaw Zarzynski --- diff --git a/src/crimson/osd/osd_operations/snaptrim_event.cc b/src/crimson/osd/osd_operations/snaptrim_event.cc index 0620beb46f12..f1aaa48bf81e 100644 --- a/src/crimson/osd/osd_operations/snaptrim_event.cc +++ b/src/crimson/osd/osd_operations/snaptrim_event.cc @@ -281,6 +281,50 @@ SnapTrimObjSubEvent::remove_clone( return OpsExecuter::snap_map_remove(coid, pg->snap_mapper, pg->osdriver, txn); } +void SnapTrimObjSubEvent::remove_head_whiteout( + ObjectContextRef obc, + ObjectContextRef head_obc, + ceph::os::Transaction& txn, + std::vector& log_entries +) { + // NOTE: this arguably constitutes minor interference with the + // tiering agent if this is a cache tier since a snap trim event + // is effectively evicting a whiteout we might otherwise want to + // keep around. + const auto head_oid = coid.get_head(); + logger().info("{}: {} removing {}", + *this, coid, head_oid); + log_entries.emplace_back( + pg_log_entry_t{ + pg_log_entry_t::DELETE, + head_oid, + osd_op_p.at_version, + head_obc->obs.oi.version, + 0, + osd_reqid_t(), + obc->obs.oi.mtime, // will be replaced in `apply_to()` + 0} + ); + logger().info("{}: remove snap head", *this); + object_info_t& oi = head_obc->obs.oi; + delta_stats.num_objects--; + if (oi.is_dirty()) { + delta_stats.num_objects_dirty--; + } + if (oi.is_omap()) { + delta_stats.num_objects_omap--; + } + if (oi.is_whiteout()) { + logger().debug("{}: trimming whiteout on {}", + *this, oi.soid); + delta_stats.num_whiteouts--; + } + head_obc->obs.exists = false; + head_obc->obs.oi = object_info_t(head_oid); + txn.remove(pg->get_collection_ref()->get_cid(), + ghobject_t{head_oid, ghobject_t::NO_GEN, shard_id_t::NO_SHARD}); +} + SnapTrimObjSubEvent::interruptible_future<> SnapTrimObjSubEvent::adjust_snaps( ObjectContextRef obc, @@ -372,44 +416,10 @@ SnapTrimObjSubEvent::remove_or_update( // save head snapset logger().debug("{}: {} new snapset {} on {}", *this, coid, obc->ssc->snapset, head_obc->obs.oi); - const auto head_oid = coid.get_head(); if (obc->ssc->snapset.clones.empty() && head_obc->obs.oi.is_whiteout()) { - // NOTE: this arguably constitutes minor interference with the - // tiering agent if this is a cache tier since a snap trim event - // is effectively evicting a whiteout we might otherwise want to - // keep around. - logger().info("{}: {} removing {}", - *this, coid, head_oid); - log_entries.emplace_back( - pg_log_entry_t{ - pg_log_entry_t::DELETE, - head_oid, - osd_op_p.at_version, - head_obc->obs.oi.version, - 0, - osd_reqid_t(), - obc->obs.oi.mtime, // will be replaced in `apply_to()` - 0} - ); - logger().info("{}: remove snap head", *this); - object_info_t& oi = head_obc->obs.oi; - delta_stats.num_objects--; - if (oi.is_dirty()) { - delta_stats.num_objects_dirty--; - } - if (oi.is_omap()) { - delta_stats.num_objects_omap--; - } - if (oi.is_whiteout()) { - logger().debug("{}: trimming whiteout on {}", - *this, oi.soid); - delta_stats.num_whiteouts--; - } - head_obc->obs.exists = false; - head_obc->obs.oi = object_info_t(head_oid); - txn.remove(pg->get_collection_ref()->get_cid(), - ghobject_t{head_oid, ghobject_t::NO_GEN, shard_id_t::NO_SHARD}); + remove_head_whiteout(obc, head_obc, txn, log_entries); } else { + const auto head_oid = coid.get_head(); obc->ssc->snapset.snaps.clear(); logger().info("{}: writing updated snapset on {}, snapset is {}", *this, head_oid, obc->ssc->snapset); diff --git a/src/crimson/osd/osd_operations/snaptrim_event.h b/src/crimson/osd/osd_operations/snaptrim_event.h index b2c57f7d0f92..c7509165997e 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); + void remove_head_whiteout( + ObjectContextRef obc, + ObjectContextRef head_obc, + ceph::os::Transaction& txn, + std::vector& log_entries); interruptible_future<> adjust_snaps( ObjectContextRef obc, const std::set& new_snaps,