]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: Fix swift object expiry not deleting objects 18821/head
authorPavan Rallabhandi <PRallabhandi@walmartlabs.com>
Wed, 8 Nov 2017 16:05:54 +0000 (21:35 +0530)
committerPavan Rallabhandi <PRallabhandi@walmartlabs.com>
Thu, 9 Nov 2017 16:10:00 +0000 (21:40 +0530)
In cls_timeindex_list() though `to_index` has expired for a timespan, the marker is set for a subsequent index during the time boundary check.
This marker is further returned to RGWObjectExpirer::process_single_shard(), where this out_marker is trimmed from the respective shard,
resulting in a lost removal hint and a leaked object.

Fixes: http://tracker.ceph.com/issues/22084
Signed-off-by: Pavan Rallabhandi <PRallabhandi@walmartlabs.com>
src/cls/timeindex/cls_timeindex.cc

index bed96e5cd74d6e405ed65276d1309b5ac1dc5985..5717471d8c1fafd80c77aec39a539ba835bc0a6d 100644 (file)
@@ -137,7 +137,6 @@ static int cls_timeindex_list(cls_method_context_t hctx,
     const string& index = iter->first;
     bufferlist& bl = iter->second;
 
-    marker = index;
     if (use_time_boundary && index.compare(0, to_index.size(), to_index) >= 0) {
       CLS_LOG(20, "DEBUG: cls_timeindex_list: finishing on to_index=%s",
               to_index.c_str());
@@ -156,6 +155,7 @@ static int cls_timeindex_list(cls_method_context_t hctx,
       e.value = bl;
       entries.push_back(e);
     }
+    marker = index;
   }
 
   ret.marker = marker;