]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: fix a bug thart lifecycle expiraton generates delete marker continuously. 28587/head
authorzhang Shaowen <zhangshaowen@cmss.chinamobile.com>
Mon, 17 Jun 2019 08:51:20 +0000 (16:51 +0800)
committerzhang Shaowen <zhangshaowen@cmss.chinamobile.com>
Tue, 9 Jul 2019 05:59:44 +0000 (13:59 +0800)
Fixes: http://tracker.ceph.com/issues/40393
Signed-off-by: zhang Shaowen <zhangshaowen@cmss.chinamobile.com>
src/rgw/rgw_lc.cc

index d51556a54cdbe7b1bb61513791ae62ddfa6fd244..07452147fff3d32d3df751245aea37f481a45208 100644 (file)
@@ -726,6 +726,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;
@@ -747,7 +755,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;