]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
crimson/osd: use seastar:do_until() when appropriate
authorKefu Chai <kchai@redhat.com>
Wed, 4 Nov 2020 12:59:54 +0000 (20:59 +0800)
committerKefu Chai <kchai@redhat.com>
Wed, 4 Nov 2020 14:48:58 +0000 (22:48 +0800)
a plain boolean is easier to understand than
`seastar::stop_iteration::yes`.

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

index 0040ea2095028b87ab04bb51d9a5e2181b72ea12..bdf0701ccffa39c91744401a26f67ec32ac0c7cd 100644 (file)
@@ -530,31 +530,37 @@ ReplicatedRecoveryBackend::read_omap_for_push_op(
     }
     return omap_iter->lower_bound(progress.omap_recovered_to).then(
       [omap_iter, &new_progress, &max_len, push_op] {
-      return seastar::repeat([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;
-          return seastar::make_ready_future<seastar::stop_iteration>(
-            seastar::stop_iteration::yes);
+          return true;
         }
-        unsigned entry_size = omap_iter->key().size() + omap_iter->value().length();
-        if (!push_op->omap_entries.empty() &&
-            ((crimson::common::local_conf()->osd_recovery_max_omap_entries_per_chunk > 0 &&
-              (push_op->omap_entries.size() >=
-               crimson::common::local_conf()->osd_recovery_max_omap_entries_per_chunk)) ||
-             max_len <= entry_size)) {
+        if (push_op->omap_entries.empty()) {
+          return false;
+        }
+        if (const uint64_t entries_per_chunk =
+            crimson::common::local_conf()->osd_recovery_max_omap_entries_per_chunk;
+            entries_per_chunk > 0 &&
+            push_op->omap_entries.size() >= entries_per_chunk) {
+          new_progress.omap_recovered_to = omap_iter->key();
+          return true;
+        }
+        if (omap_iter->key().size() + omap_iter->value().length() > max_len) {
           new_progress.omap_recovered_to = omap_iter->key();
-          return seastar::make_ready_future<seastar::stop_iteration>(
-            seastar::stop_iteration::yes);
+          return true;
         }
+        return false;
+      },
+      [omap_iter, &max_len, push_op] {
         push_op->omap_entries.emplace(omap_iter->key(), omap_iter->value());
-        if (entry_size >= max_len) {
+        if (const uint64_t entry_size =
+            omap_iter->key().size() + omap_iter->value().length() > max_len;
+            entry_size >= max_len) {
           max_len -= entry_size;
         } else {
           max_len = 0;
         }
-        return omap_iter->next().then([] {
-          return seastar::stop_iteration::no;
-        });
+        return omap_iter->next();
       });
     });
   });
index 4dbc351476b28c55320ae1bf566e33753e13817b..cea890a4c69116785785583b50e9bf04be960544 100644 (file)
@@ -1747,7 +1747,7 @@ public:
                      seastar::stop_iteration::yes);
          }
          process_entry(iter);
-         return iter->next().then([] {
+         return iter->next().then([](int) {
            return seastar::stop_iteration::no;
          });
        });