Fixes: https://tracker.ceph.com/issues/41045
Signed-off-by: Casey Bodley <cbodley@redhat.com>
(cherry picked from commit
b9af497b2ae445b858fbdf5b7c311770714a58da)
Conflicts: store->data_log instead of store->svc()->datalog_rados
src/rgw/rgw_admin.cc
src/rgw/rgw_bucket.cc no null_yield
src/rgw/services/svc_datalog_rados.cc (not present in luminous)
src/rgw/services/svc_datalog_rados.h
if (ret < 0)
return -ret;
- RGWDataChangesLog *log = store->data_log;
- ret = log->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->data_log;
+ 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;
}
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 = store->time_log_trim(oids[shard_id], start_time, end_time, start_marker, end_marker);
-
- 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 = store->time_log_trim(oids[shard], start_time, end_time, start_marker, end_marker);
- if (ret == -ENOENT || ret == -ENODATA) {
- continue;
- }
- if (ret < 0)
- return ret;
- }
-
- return 0;
+ return store->time_log_trim(oids[shard_id], start_time, end_time,
+ start_marker, end_marker, nullptr);
}
bool RGWDataChangesLog::going_down()
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);
int lock_exclusive(int shard_id, timespan duration, string& zone_id, string& owner_id) {
return store->lock_exclusive(store->get_zone_params().log_pool, oids[shard_id], duration, zone_id, owner_id);