]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph-ci.git/commitdiff
osd/PGLog.cc: replace omap_get_values by omap_iterate
authorchunmei liu <chunmei.liu@ibm.com>
Sun, 30 Mar 2025 07:47:16 +0000 (00:47 -0700)
committerchunmei liu <chunmei.liu@ibm.com>
Tue, 15 Jul 2025 02:58:30 +0000 (19:58 -0700)
Signed-off-by: chunmei liu <chunmei.liu@ibm.com>
src/osd/PGLog.cc

index 22846c2b68765de06351c47d086879a63958f3db..39b13beb4dc6e8717e5bcd8888b0f207a8bb54aa 100644 (file)
@@ -1155,41 +1155,37 @@ namespace {
       on_disk_can_rollback_to = info.last_update;
       missing.may_include_deletes = false;
 
-      return seastar::do_with(
-        std::move(ch),
-        std::move(pgmeta_oid),
-        std::make_optional<std::string>(),
-        [this](crimson::os::CollectionRef &ch,
-               ghobject_t &pgmeta_oid,
-               std::optional<std::string> &start) {
-          return seastar::repeat([this, &ch, &pgmeta_oid, &start]() {
-            return store.omap_get_values(
-              ch, pgmeta_oid, start
-            ).safe_then([this, &start](const auto& ret) {
-              const auto& [done, kvs] = ret;
-              for (const auto& [key, value] : kvs) {
-                process_entry(key, value);
-                start = key;
-              }
-              return seastar::make_ready_future<seastar::stop_iteration>(
-                done ? seastar::stop_iteration::yes : seastar::stop_iteration::no
-              );
-            }, crimson::os::FuturizedStore::Shard::read_errorator::assert_all{});
-          }).then([this] {
-            if (info.pgid.is_no_shard()) {
-              // replicated pool pg does not persist this key
-              ceph_assert(on_disk_rollback_info_trimmed_to == eversion_t());
-              on_disk_rollback_info_trimmed_to = info.last_update;
-            }
-            log = PGLog::IndexedLog(
-                 info.last_update,
-                 info.log_tail,
-                 on_disk_can_rollback_to,
-                 on_disk_rollback_info_trimmed_to,
-                 std::move(entries),
-                 std::move(dups));
-          });
-        });
+      ObjectStore::omap_iter_seek_t start_from{"", ObjectStore::omap_iter_seek_t::UPPER_BOUND};
+
+      std::function<ObjectStore::omap_iter_ret_t(std::string_view, std::string_view)> callback =
+        [this] (std::string_view key, std::string_view value)
+      {
+        ceph::bufferlist bl;
+        bl.append(value);
+        process_entry(key, bl);
+        return ObjectStore::omap_iter_ret_t::NEXT;
+      };
+
+      co_await store.omap_iterate(
+        ch, pgmeta_oid, start_from, callback
+      ).safe_then([] (auto ret) {
+        ceph_assert (ret == ObjectStore::omap_iter_ret_t::NEXT);
+      }).handle_error(
+        crimson::os::FuturizedStore::Shard::read_errorator::assert_all{}
+      );
+
+      if (info.pgid.is_no_shard()) {
+        // replicated pool pg does not persist this key
+        ceph_assert(on_disk_rollback_info_trimmed_to == eversion_t());
+        on_disk_rollback_info_trimmed_to = info.last_update;
+      }
+      log = PGLog::IndexedLog(
+        info.last_update,
+        info.log_tail,
+        on_disk_can_rollback_to,
+        on_disk_rollback_info_trimmed_to,
+        std::move(entries),
+        std::move(dups));
     }
   };
 }