]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
radosgw-admin: 'datalog trim' takes shard-id and loops until done
authorCasey Bodley <cbodley@redhat.com>
Wed, 31 Jul 2019 21:05:40 +0000 (17:05 -0400)
committerNathan Cutler <ncutler@suse.com>
Fri, 11 Oct 2019 13:08:37 +0000 (15:08 +0200)
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

src/rgw/rgw_admin.cc
src/rgw/rgw_bucket.cc
src/rgw/rgw_bucket.h

index 084aaa9cf54e38c37c8af9ff2ed63a2cf07a90bc..809cfc0b8720c5034756c36bfbfed6871ace16f6 100644 (file)
@@ -7651,9 +7651,20 @@ next:
     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;
     }
index 087403befd51075a9ec4ef2500c7e932cdbb813a..853c8aba500cafc7a87835fa2a60d04f8d7da75a 100644 (file)
@@ -2389,32 +2389,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 = 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);
 }
 
 int RGWDataChangesLog::lock_exclusive(int shard_id, timespan duration, string& zone_id, string& owner_id) {
index fec77ba39b3cd6692d574a651765fa15ba67515c..b32049639d446804013eff0a54b6d94ac3ef3d90 100644 (file)
@@ -542,8 +542,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);
   int lock_exclusive(int shard_id, timespan duration, string& zone_id, string& owner_id);
   int unlock(int shard_id, string& zone_id, string& owner_id);