]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: consume the budget for each push in read_omap_for_push_op()
authorKefu Chai <kchai@redhat.com>
Sun, 20 Dec 2020 13:53:13 +0000 (21:53 +0800)
committerKefu Chai <kchai@redhat.com>
Sun, 20 Dec 2020 13:54:43 +0000 (21:54 +0800)
this change addresses a regression introduced by
26e61a02ec4e3a6d92af5ac8b4f1902244dd697f

Signed-off-by: Kefu Chai <kchai@redhat.com>
src/crimson/osd/replicated_recovery_backend.cc
src/crimson/osd/replicated_recovery_backend.h

index 4e1b46a14cceec454852fd0899a87c2ae0d7998e..0ed5cf9a060f3b3bb4c86aee77df92622c0b6f42 100644 (file)
@@ -388,7 +388,7 @@ seastar::future<PushOp> ReplicatedRecoveryBackend::build_push_op(
       return read_omap_for_push_op(recovery_info.soid,
                                    progress,
                                    new_progress,
-                                   available, &pop);
+                                   &available, &pop);
     }).then([this, &recovery_info, &progress, &available, &pop]() mutable {
       logger().debug("build_push_op: available: {}, copy_subset: {}",
                     available, recovery_info.copy_subset);
@@ -477,16 +477,16 @@ ReplicatedRecoveryBackend::read_omap_for_push_op(
     const hobject_t& oid,
     const ObjectRecoveryProgress& progress,
     ObjectRecoveryProgress& new_progress,
-    uint64_t max_len,
+    uint64_t* max_len,
     PushOp* push_op)
 {
   if (progress.omap_complete) {
     return seastar::make_ready_future<>();
   }
   return shard_services.get_store().get_omap_iterator(coll, ghobject_t{oid})
-    .then([&progress, &new_progress, &max_len, push_op](auto omap_iter) {
+    .then([&progress, &new_progress, max_len, push_op](auto omap_iter) {
     return omap_iter->lower_bound(progress.omap_recovered_to).then(
-      [omap_iter, &new_progress, &max_len, push_op] {
+      [omap_iter, &new_progress, max_len, push_op] {
       return seastar::do_until([omap_iter, &new_progress, max_len, push_op] {
         if (!omap_iter->valid()) {
           new_progress.omap_complete = true;
@@ -502,20 +502,20 @@ ReplicatedRecoveryBackend::read_omap_for_push_op(
           new_progress.omap_recovered_to = omap_iter->key();
           return true;
         }
-        if (omap_iter->key().size() + omap_iter->value().length() > max_len) {
+        if (omap_iter->key().size() + omap_iter->value().length() > *max_len) {
           new_progress.omap_recovered_to = omap_iter->key();
           return true;
         }
         return false;
       },
-      [omap_iter, &max_len, push_op] {
+      [omap_iter, max_len, push_op] {
         push_op->omap_entries.emplace(omap_iter->key(), omap_iter->value());
         if (const uint64_t entry_size =
-           omap_iter->key().size() + omap_iter->value().length();
-            entry_size > max_len) {
-          max_len -= entry_size;
+            omap_iter->key().size() + omap_iter->value().length();
+            entry_size > *max_len) {
+          *max_len -= entry_size;
         } else {
-          max_len = 0;
+          *max_len = 0;
         }
         return omap_iter->next();
       });
index 98f63ca73ad2c5f9a69e1d583d1ac3faf027ce79..6a4ed9802ab1d684fa1f9ff182ba591c43ebc7d0 100644 (file)
@@ -136,6 +136,6 @@ private:
     const hobject_t& oid,
     const ObjectRecoveryProgress& progress,
     ObjectRecoveryProgress& new_progress,
-    uint64_t max_len,
+    uint64_t* max_len,
     PushOp* push_op);
 };