]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
rgw: 'period delete' cleans up all period objects
authorCasey Bodley <cbodley@redhat.com>
Fri, 6 May 2016 19:18:46 +0000 (15:18 -0400)
committerYehuda Sadeh <yehuda@redhat.com>
Tue, 10 May 2016 16:49:46 +0000 (09:49 -0700)
Fixes: http://tracker.ceph.com/issues/15469
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit a286b32224d4a9757058415f98a2feff683ac520)

src/rgw/rgw_rados.cc

index 47ba96261c17d5dbe5c760e53fccd465d4fee15d..021efba8d212dfcaaecaf8ce1ac00333ab2b8dbd 100644 (file)
@@ -1009,15 +1009,26 @@ int RGWPeriod::set_latest_epoch(epoch_t epoch, bool exclusive)
 
 int RGWPeriod::delete_obj()
 {
-  string pool_name = get_pool_name(cct);
-  rgw_bucket pool(pool_name.c_str());
+  rgw_bucket pool(get_pool_name(cct));
 
-  rgw_obj object_id(pool, get_period_oid());
-  int ret = store->delete_system_obj(object_id);
-  if (ret < 0) {
-    ldout(cct, 0) << "Error delete object id " << id << ": " << cpp_strerror(-ret) << dendl;
+  // delete the object for each period epoch
+  for (epoch_t e = 1; e <= epoch; e++) {
+    RGWPeriod p{get_id(), e};
+    rgw_obj oid{pool, p.get_period_oid()};
+    int ret = store->delete_system_obj(oid);
+    if (ret < 0) {
+      ldout(cct, 0) << "WARNING: failed to delete period object " << oid
+          << ": " << cpp_strerror(-ret) << dendl;
+    }
   }
 
+  // delete the .latest_epoch object
+  rgw_obj oid{pool, get_period_oid_prefix() + get_latest_epoch_oid()};
+  int ret = store->delete_system_obj(oid);
+  if (ret < 0) {
+    ldout(cct, 0) << "WARNING: failed to delete period object " << oid
+        << ": " << cpp_strerror(-ret) << dendl;
+  }
   return ret;
 }