From: zhang Shaowen Date: Mon, 17 Jun 2019 08:51:20 +0000 (+0800) Subject: rgw: fix a bug thart lifecycle expiraton generates delete marker continuously. X-Git-Tag: v14.2.5~204^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F30037%2Fhead;p=ceph.git 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) --- 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;