From 3ccc8ecf4ded88caff8675d6e4f8af4e1a86782b Mon Sep 17 00:00:00 2001 From: chunmei liu Date: Sun, 30 Mar 2025 00:47:16 -0700 Subject: [PATCH] osd/PGLog.cc: replace omap_get_values by omap_iterate Signed-off-by: chunmei liu --- src/osd/PGLog.cc | 66 +++++++++++++++++++++++------------------------- 1 file changed, 31 insertions(+), 35 deletions(-) diff --git a/src/osd/PGLog.cc b/src/osd/PGLog.cc index 22846c2b68765..39b13beb4dc6e 100644 --- a/src/osd/PGLog.cc +++ b/src/osd/PGLog.cc @@ -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(), - [this](crimson::os::CollectionRef &ch, - ghobject_t &pgmeta_oid, - std::optional &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( - 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 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)); } }; } -- 2.39.5