@@ -1155,41 +1155,37 @@ namespace {
11551155 on_disk_can_rollback_to = info.last_update ;
11561156 missing.may_include_deletes = false ;
11571157
1158- return seastar::do_with (
1159- std::move (ch),
1160- std::move (pgmeta_oid),
1161- std::make_optional<std::string>(),
1162- [this ](crimson::os::CollectionRef &ch,
1163- ghobject_t &pgmeta_oid,
1164- std::optional<std::string> &start) {
1165- return seastar::repeat ([this , &ch, &pgmeta_oid, &start]() {
1166- return store.omap_get_values (
1167- ch, pgmeta_oid, start
1168- ).safe_then ([this , &start](const auto & ret) {
1169- const auto & [done, kvs] = ret;
1170- for (const auto & [key, value] : kvs) {
1171- process_entry (key, value);
1172- start = key;
1173- }
1174- return seastar::make_ready_future<seastar::stop_iteration>(
1175- done ? seastar::stop_iteration::yes : seastar::stop_iteration::no
1176- );
1177- }, crimson::os::FuturizedStore::Shard::read_errorator::assert_all{});
1178- }).then ([this ] {
1179- if (info.pgid .is_no_shard ()) {
1180- // replicated pool pg does not persist this key
1181- ceph_assert (on_disk_rollback_info_trimmed_to == eversion_t ());
1182- on_disk_rollback_info_trimmed_to = info.last_update ;
1183- }
1184- log = PGLog::IndexedLog (
1185- info.last_update ,
1186- info.log_tail ,
1187- on_disk_can_rollback_to,
1188- on_disk_rollback_info_trimmed_to,
1189- std::move (entries),
1190- std::move (dups));
1191- });
1192- });
1158+ ObjectStore::omap_iter_seek_t start_from{" " , ObjectStore::omap_iter_seek_t ::UPPER_BOUND};
1159+
1160+ std::function<ObjectStore::omap_iter_ret_t (std::string_view, std::string_view)> callback =
1161+ [this ] (std::string_view key, std::string_view value)
1162+ {
1163+ ceph::bufferlist bl;
1164+ bl.append (value);
1165+ process_entry (key, bl);
1166+ return ObjectStore::omap_iter_ret_t ::NEXT;
1167+ };
1168+
1169+ co_await store.omap_iterate (
1170+ ch, pgmeta_oid, start_from, callback
1171+ ).safe_then ([] (auto ret) {
1172+ ceph_assert (ret == ObjectStore::omap_iter_ret_t ::NEXT);
1173+ }).handle_error (
1174+ crimson::os::FuturizedStore::Shard::read_errorator::assert_all{}
1175+ );
1176+
1177+ if (info.pgid .is_no_shard ()) {
1178+ // replicated pool pg does not persist this key
1179+ ceph_assert (on_disk_rollback_info_trimmed_to == eversion_t ());
1180+ on_disk_rollback_info_trimmed_to = info.last_update ;
1181+ }
1182+ log = PGLog::IndexedLog (
1183+ info.last_update ,
1184+ info.log_tail ,
1185+ on_disk_can_rollback_to,
1186+ on_disk_rollback_info_trimmed_to,
1187+ std::move (entries),
1188+ std::move (dups));
11931189 }
11941190 };
11951191}
0 commit comments