From 9cfc37807971b491176c1e8060e04d253071341e Mon Sep 17 00:00:00 2001 From: Matt Benjamin Date: Sun, 3 Apr 2022 16:36:22 -0400 Subject: [PATCH] rgwlc: don't incorrectly expire delete markers when !next_key_name This is a fencepost case when operating on the last element of a listing, apparently masked before Mark Kogan's segfault fix). Fixes: https://tracker.ceph.com/issues/55168 Signed-off-by: Matt Benjamin --- src/rgw/rgw_lc.cc | 24 +++++++++++++----------- 1 file changed, 13 insertions(+), 11 deletions(-) diff --git a/src/rgw/rgw_lc.cc b/src/rgw/rgw_lc.cc index 7b76f4e0b029d..669a65d20a69d 100644 --- a/src/rgw/rgw_lc.cc +++ b/src/rgw/rgw_lc.cc @@ -1025,20 +1025,22 @@ public: return false; } if (o.is_delete_marker()) { - std::string nkn; - if (oc.next_key_name) nkn = *oc.next_key_name; - if (oc.next_has_same_name(o.key.name)) { - ldpp_dout(dpp, 7) << __func__ << "(): dm-check SAME: key=" << o.key - << " next_key_name: %%" << nkn << "%% " - << oc.wq->thr_name() << dendl; - return false; - } else { - ldpp_dout(dpp, 7) << __func__ << "(): dm-check DELE: key=" << o.key - << " next_key_name: %%" << nkn << "%% " - << oc.wq->thr_name() << dendl; + if (oc.next_key_name) { + std::string nkn = *oc.next_key_name; + if (oc.next_has_same_name(o.key.name)) { + ldpp_dout(dpp, 7) << __func__ << "(): dm-check SAME: key=" << o.key + << " next_key_name: %%" << nkn << "%% " + << oc.wq->thr_name() << dendl; + return false; + } else { + ldpp_dout(dpp, 7) << __func__ << "(): dm-check DELE: key=" << o.key + << " next_key_name: %%" << nkn << "%% " + << oc.wq->thr_name() << dendl; *exp_time = real_clock::now(); return true; + } } + return false; } auto& mtime = o.meta.mtime; -- 2.39.5