From 106fce83b10c56333cb81badb9a95980959d9e2c Mon Sep 17 00:00:00 2001 From: Radoslaw Zarzynski Date: Tue, 26 Nov 2024 20:26:15 +0000 Subject: [PATCH] osd: switch OSDriver of SnapMapper to omap_iterate Signed-off-by: Radoslaw Zarzynski --- src/osd/SnapMapper.cc | 60 ++++++++++++++++++++++++++----------------- 1 file changed, 36 insertions(+), 24 deletions(-) diff --git a/src/osd/SnapMapper.cc b/src/osd/SnapMapper.cc index a429c0cd2cb68..968c0436ef4f5 100644 --- a/src/osd/SnapMapper.cc +++ b/src/osd/SnapMapper.cc @@ -158,42 +158,54 @@ int OSDriver::get_keys( } int OSDriver::get_next( - const std::string &key, + const std::string &seek_key, std::pair *next) { - ObjectMap::ObjectMapIterator iter = - os->get_omap_iterator(ch, hoid); - if (!iter) { + using omap_iter_seek_t = ObjectStore::omap_iter_seek_t; + const auto result = os->omap_iterate( + ch, hoid, + ObjectStore::omap_iter_seek_t{ + .seek_position = seek_key, + .seek_type = omap_iter_seek_t::UPPER_BOUND + }, + [next] (std::string_view key, std::string_view value) mutable { + next->first = key; + next->second.clear(); + next->second.append(value); + return ObjectStore::omap_iter_ret_t::STOP; + }); + if (result < 0) { ceph_abort(); - return -EINVAL; - } - iter->upper_bound(key); - if (iter->valid()) { - if (next) - *next = make_pair(iter->key(), iter->value()); - return 0; - } else { + } else if (!result) { return -ENOENT; + } else { + return 0; // found and STOPped } } int OSDriver::get_next_or_current( - const std::string &key, + const std::string &seek_key, std::pair *next_or_current) { - ObjectMap::ObjectMapIterator iter = - os->get_omap_iterator(ch, hoid); - if (!iter) { + using omap_iter_seek_t = ObjectStore::omap_iter_seek_t; + const auto result = os->omap_iterate( + ch, hoid, + ObjectStore::omap_iter_seek_t{ + .seek_position = seek_key, + .seek_type = omap_iter_seek_t::LOWER_BOUND + }, + [next_or_current] (std::string_view key, std::string_view value) mutable { + next_or_current->first = key; + next_or_current->second.clear(); + next_or_current->second.append(value); + return ObjectStore::omap_iter_ret_t::STOP; + }); + if (result < 0) { ceph_abort(); - return -EINVAL; - } - iter->lower_bound(key); - if (iter->valid()) { - if (next_or_current) - *next_or_current = make_pair(iter->key(), iter->value()); - return 0; - } else { + } else if (!result) { return -ENOENT; + } else { + return 0; // found and STOPped } } #endif // WITH_CRIMSON -- 2.39.5