From 7a2b4ae18d75c12bdcfeb26e7a55cb9c0543e3a0 Mon Sep 17 00:00:00 2001 From: zhang Shaowen Date: Mon, 17 Jun 2019 16:51:20 +0800 Subject: [PATCH] rgw: fix a bug thart lifecycle expiraton generates delete marker continuously. Fixes: http://tracker.ceph.com/issues/40393 Signed-off-by: zhang Shaowen (cherry picked from commit fea035e038436a3021f12660a12f789c561b3279) --- src/rgw/rgw_lc.cc | 15 ++++++++++++++- 1 file changed, 14 insertions(+), 1 deletion(-) diff --git a/src/rgw/rgw_lc.cc b/src/rgw/rgw_lc.cc index 6fc0af0ec59..61ab1ad2afd 100644 --- a/src/rgw/rgw_lc.cc +++ b/src/rgw/rgw_lc.cc @@ -672,6 +672,14 @@ public: ldout(oc.cct, 20) << __func__ << "(): key=" << o.key << ": not current, skipping" << dendl; return false; } + if (o.is_delete_marker()) { + if (oc.ol.next_has_same_name()) { + return false; + } else { + *exp_time = real_clock::now(); + return true; + } + } auto& mtime = o.meta.mtime; bool is_expired; @@ -693,7 +701,12 @@ public: int process(lc_op_ctx& oc) { auto& o = oc.o; - int r = remove_expired_obj(oc, !oc.bucket_info.versioned()); + int r; + if (o.is_delete_marker()) { + r = remove_expired_obj(oc, true); + } else { + r = remove_expired_obj(oc, !oc.bucket_info.versioned()); + } if (r < 0) { ldout(oc.cct, 0) << "ERROR: remove_expired_obj " << dendl; return r; -- 2.47.3