From 7ea6e78aa0aa3b86d663dab3f69998e5cd3a5177 Mon Sep 17 00:00:00 2001 From: Casey Bodley Date: Fri, 6 May 2016 15:18:46 -0400 Subject: [PATCH] rgw: 'period delete' cleans up all period objects Fixes: http://tracker.ceph.com/issues/15469 Signed-off-by: Casey Bodley (cherry picked from commit a286b32224d4a9757058415f98a2feff683ac520) --- src/rgw/rgw_rados.cc | 23 +++++++++++++++++------ 1 file changed, 17 insertions(+), 6 deletions(-) diff --git a/src/rgw/rgw_rados.cc b/src/rgw/rgw_rados.cc index 47ba96261c17..021efba8d212 100644 --- a/src/rgw/rgw_rados.cc +++ b/src/rgw/rgw_rados.cc @@ -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; } -- 2.47.3