]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix a bug thart lifecycle expiraton generates delete marker continuously. 30037/head
authorzhang Shaowen <zhangshaowen@cmss.chinamobile.com>
Mon, 17 Jun 2019 08:51:20 +0000 (16:51 +0800)
committerNathan Cutler <ncutler@suse.com>
Fri, 30 Aug 2019 12:20:27 +0000 (14:20 +0200)
Fixes: http://tracker.ceph.com/issues/40393
Signed-off-by: zhang Shaowen <zhangshaowen@cmss.chinamobile.com>
(cherry picked from commit fea035e038436a3021f12660a12f789c561b3279)

src/rgw/rgw_lc.cc

index 6fc0af0ec59c7396945106c7d7e5a6207c5a4caf..61ab1ad2afdfbdfa77e3d74c59a00090ba9d4875 100644 (file)
@@ -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;