Skip to content

Commit 3ccc8ec

Browse files
committed
osd/PGLog.cc: replace omap_get_values by omap_iterate
Signed-off-by: chunmei liu <[email protected]>
1 parent f109ce9 commit 3ccc8ec

File tree

1 file changed

+31
-35
lines changed

1 file changed

+31
-35
lines changed

src/osd/PGLog.cc

Lines changed: 31 additions & 35 deletions
Original file line numberDiff line numberDiff line change
@@ -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

Comments
 (0)