]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
osd: switch OSDriver of SnapMapper to omap_iterate
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Tue, 26 Nov 2024 20:26:15 +0000 (20:26 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Fri, 4 Apr 2025 18:21:54 +0000 (18:21 +0000)
Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/osd/SnapMapper.cc

index a429c0cd2cb68b4e600b19ed63c9301706702b05..968c0436ef4f5a0dbdf457169bf84f8f2de36f2d 100644 (file)
@@ -158,42 +158,54 @@ int OSDriver::get_keys(
 }
 
 int OSDriver::get_next(
-  const std::string &key,
+  const std::string &seek_key,
   std::pair<std::string, ceph::buffer::list> *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<std::string, ceph::buffer::list> *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