]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os: make MemStore suitable for AlienStore.
authorRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 21 Jul 2021 09:07:14 +0000 (09:07 +0000)
committerRadoslaw Zarzynski <rzarzyns@redhat.com>
Wed, 21 Jul 2021 13:11:16 +0000 (13:11 +0000)
This boils down into 2 things:

1. building `MemStore` for crimson,
2. implementing the crimson-specific variant of `get_omap_values()`.

Signed-off-by: Radoslaw Zarzynski <rzarzyns@redhat.com>
src/crimson/os/alienstore/CMakeLists.txt
src/crimson/os/alienstore/alien_store.cc
src/os/memstore/MemStore.cc
src/os/memstore/MemStore.h

index 6c4182d20fff21e09945ff30176ad216d7e9f230..7c7ceee7160be6fb121ec7ad517c76db2c049b43 100644 (file)
@@ -58,7 +58,8 @@ set(alien_store_srcs
   ${PROJECT_SOURCE_DIR}/src/os/bluestore/FreelistManager.cc
   ${PROJECT_SOURCE_DIR}/src/os/bluestore/HybridAllocator.cc
   ${PROJECT_SOURCE_DIR}/src/os/bluestore/StupidAllocator.cc
-  ${PROJECT_SOURCE_DIR}/src/os/bluestore/BitmapAllocator.cc)
+  ${PROJECT_SOURCE_DIR}/src/os/bluestore/BitmapAllocator.cc
+  ${PROJECT_SOURCE_DIR}/src/os/memstore/MemStore.cc)
 if(WITH_ZBD)
   list(APPEND alien_store_srcs
     ${PROJECT_SOURCE_DIR}/src/os/bluestore/zoned_types.cc
index 3d471feb1bdab1adbaffefdd75a17d4cef733edb..cb5cbf08c353cbc0cee66d54275ab6f3973607ba 100644 (file)
@@ -18,6 +18,7 @@
 #include "global/global_context.h"
 #include "include/Context.h"
 #include "os/bluestore/BlueStore.h"
+#include "os/memstore/MemStore.h"
 #include "os/ObjectStore.h"
 #include "os/Transaction.h"
 
index 6c6140df80923e361500fb65abc4cac92901e232..5609db360c702fdcbeaab98f9a91dbe021883929 100644 (file)
@@ -537,6 +537,30 @@ int MemStore::omap_get_values(
   return 0;
 }
 
+#ifdef WITH_SEASTAR
+int MemStore::omap_get_values(
+  CollectionHandle& ch,                    ///< [in] Collection containing oid
+  const ghobject_t &oid,       ///< [in] Object containing omap
+  const std::optional<std::string> &start_after,     ///< [in] Keys to get
+  std::map<std::string, ceph::buffer::list> *out ///< [out] Returned keys and values
+  )
+{
+  dout(10) << __func__ << " " << ch->cid << " " << oid << dendl;
+  Collection *c = static_cast<Collection*>(ch.get());
+  ObjectRef o = c->get_object(oid);
+  if (!o)
+    return -ENOENT;
+  assert(start_after);
+  std::lock_guard lock{o->omap_mutex};
+  for (auto it = o->omap.upper_bound(*start_after);
+       it != std::end(o->omap);
+       ++it) {
+    out->insert(*it);
+  }
+  return 0;
+}
+#endif
+
 int MemStore::omap_check_keys(
   CollectionHandle& ch,                ///< [in] Collection containing oid
   const ghobject_t &oid,   ///< [in] Object containing omap
index 2a123fae1519158294213b2b8bbd679f653898e8..858379ed9c7c4575572340be2e35127f65fd5fd1 100644 (file)
@@ -363,6 +363,14 @@ public:
     const std::set<std::string> &keys,     ///< [in] Keys to get
     std::map<std::string, ceph::buffer::list> *out ///< [out] Returned keys and values
     ) override;
+#ifdef WITH_SEASTAR
+  int omap_get_values(
+    CollectionHandle &c,         ///< [in] Collection containing oid
+    const ghobject_t &oid,       ///< [in] Object containing omap
+    const std::optional<std::string> &start_after,     ///< [in] Keys to get
+    std::map<std::string, ceph::buffer::list> *out ///< [out] Returned keys and values
+    ) override;
+#endif
 
   using ObjectStore::omap_check_keys;
   /// Filters keys into out which are defined on oid