From: Radoslaw Zarzynski Date: Wed, 21 Jul 2021 09:07:14 +0000 (+0000) Subject: os: make MemStore suitable for AlienStore. X-Git-Tag: v17.1.0~1314^2~3 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d0b8aeeea4d05af82b0070356e3e4259a3ab98e6;p=ceph.git os: make MemStore suitable for AlienStore. 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 --- diff --git a/src/crimson/os/alienstore/CMakeLists.txt b/src/crimson/os/alienstore/CMakeLists.txt index 6c4182d20fff2..7c7ceee7160be 100644 --- a/src/crimson/os/alienstore/CMakeLists.txt +++ b/src/crimson/os/alienstore/CMakeLists.txt @@ -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 diff --git a/src/crimson/os/alienstore/alien_store.cc b/src/crimson/os/alienstore/alien_store.cc index 3d471feb1bdab..cb5cbf08c353c 100644 --- a/src/crimson/os/alienstore/alien_store.cc +++ b/src/crimson/os/alienstore/alien_store.cc @@ -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" diff --git a/src/os/memstore/MemStore.cc b/src/os/memstore/MemStore.cc index 6c6140df80923..5609db360c702 100644 --- a/src/os/memstore/MemStore.cc +++ b/src/os/memstore/MemStore.cc @@ -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 &start_after, ///< [in] Keys to get + std::map *out ///< [out] Returned keys and values + ) +{ + dout(10) << __func__ << " " << ch->cid << " " << oid << dendl; + Collection *c = static_cast(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 diff --git a/src/os/memstore/MemStore.h b/src/os/memstore/MemStore.h index 2a123fae15191..858379ed9c7c4 100644 --- a/src/os/memstore/MemStore.h +++ b/src/os/memstore/MemStore.h @@ -363,6 +363,14 @@ public: const std::set &keys, ///< [in] Keys to get std::map *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 &start_after, ///< [in] Keys to get + std::map *out ///< [out] Returned keys and values + ) override; +#endif using ObjectStore::omap_check_keys; /// Filters keys into out which are defined on oid