From: Casey Bodley Date: Fri, 6 May 2016 19:18:46 +0000 (-0400) Subject: rgw: 'period delete' cleans up all period objects X-Git-Tag: v10.2.1~9^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=7ea6e78aa0aa3b86d663dab3f69998e5cd3a5177;p=ceph.git 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) --- 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; }