From: Casey Bodley Date: Wed, 31 Jul 2019 21:05:40 +0000 (-0400) Subject: radosgw-admin: 'datalog trim' takes shard-id and loops until done X-Git-Tag: v15.1.0~1853^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=b9af497b2ae445b858fbdf5b7c311770714a58da;p=ceph.git radosgw-admin: 'datalog trim' takes shard-id and loops until done Fixes: https://tracker.ceph.com/issues/41045 Signed-off-by: Casey Bodley --- diff --git a/src/rgw/rgw_admin.cc b/src/rgw/rgw_admin.cc index c983e5e59d97..9cd90916cac3 100644 --- a/src/rgw/rgw_admin.cc +++ b/src/rgw/rgw_admin.cc @@ -7718,8 +7718,20 @@ next: if (ret < 0) return -ret; - ret = store->svc()->datalog_rados->trim_entries(start_time.to_real_time(), end_time.to_real_time(), start_marker, end_marker); - if (ret < 0) { + if (!specified_shard_id) { + cerr << "ERROR: requires a --shard-id" << std::endl; + return EINVAL; + } + + // loop until -ENODATA + do { + auto datalog = store->svc()->datalog_rados; + ret = datalog->trim_entries(shard_id, start_time.to_real_time(), + end_time.to_real_time(), + start_marker, end_marker); + } while (ret == 0); + + if (ret < 0 && ret != -ENODATA) { cerr << "ERROR: trim_entries(): " << cpp_strerror(-ret) << std::endl; return -ret; } diff --git a/src/rgw/rgw_bucket.cc b/src/rgw/rgw_bucket.cc index ece514095b4b..549b75b1a3a3 100644 --- a/src/rgw/rgw_bucket.cc +++ b/src/rgw/rgw_bucket.cc @@ -2310,32 +2310,11 @@ int RGWDataChangesLog::get_info(int shard_id, RGWDataChangesLogInfo *info) int RGWDataChangesLog::trim_entries(int shard_id, const real_time& start_time, const real_time& end_time, const string& start_marker, const string& end_marker) { - int ret; - if (shard_id > num_shards) return -EINVAL; - ret = svc.cls->timelog.trim(oids[shard_id], start_time, end_time, start_marker, end_marker, nullptr, null_yield); - - if (ret == -ENOENT || ret == -ENODATA) - ret = 0; - - return ret; -} - -int RGWDataChangesLog::trim_entries(const real_time& start_time, const real_time& end_time, - const string& start_marker, const string& end_marker) -{ - for (int shard = 0; shard < num_shards; shard++) { - int ret = svc.cls->timelog.trim(oids[shard], start_time, end_time, start_marker, end_marker, nullptr, null_yield); - if (ret == -ENOENT || ret == -ENODATA) { - continue; - } - if (ret < 0) - return ret; - } - - return 0; + return svc.cls->timelog.trim(oids[shard_id], start_time, end_time, + start_marker, end_marker, nullptr, null_yield); } bool RGWDataChangesLog::going_down() diff --git a/src/rgw/rgw_bucket.h b/src/rgw/rgw_bucket.h index aabccafa544d..7b675386a47e 100644 --- a/src/rgw/rgw_bucket.h +++ b/src/rgw/rgw_bucket.h @@ -543,8 +543,6 @@ public: bool *truncated); int trim_entries(int shard_id, const real_time& start_time, const real_time& end_time, const string& start_marker, const string& end_marker); - int trim_entries(const real_time& start_time, const real_time& end_time, - const string& start_marker, const string& end_marker); int get_info(int shard_id, RGWDataChangesLogInfo *info); using LogMarker = RGWDataChangesLogMarker; diff --git a/src/rgw/services/svc_datalog_rados.cc b/src/rgw/services/svc_datalog_rados.cc index a87a1cfcb58d..0be8bb6ac2cf 100644 --- a/src/rgw/services/svc_datalog_rados.cc +++ b/src/rgw/services/svc_datalog_rados.cc @@ -80,10 +80,3 @@ int RGWSI_DataLog_RADOS::trim_entries(int shard_id, const real_time& start_time, { return log->trim_entries(shard_id, start_time, end_time, start_marker, end_marker); } - -int RGWSI_DataLog_RADOS::trim_entries(const real_time& start_time, const real_time& end_time, - const string& start_marker, const string& end_marker) -{ - return log->trim_entries(start_time, end_time, start_marker, end_marker); -} - diff --git a/src/rgw/services/svc_datalog_rados.h b/src/rgw/services/svc_datalog_rados.h index b3d14adfd266..37d4acc8c2e8 100644 --- a/src/rgw/services/svc_datalog_rados.h +++ b/src/rgw/services/svc_datalog_rados.h @@ -68,7 +68,5 @@ public: list& entries, RGWDataChangesLogMarker& marker, bool *ptruncated); int trim_entries(int shard_id, const real_time& start_time, const real_time& end_time, const string& start_marker, const string& end_marker); - int trim_entries(const real_time& start_time, const real_time& end_time, - const string& start_marker, const string& end_marker); };