From 34fe2e8a671c637cafa3e65d5935a485ff1df2a4 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Mon, 18 Jan 2016 11:05:32 -0500 Subject: [PATCH] os/memstore: implement open_collection Signed-off-by: Sage Weil --- src/os/memstore/MemStore.cc | 1 + src/os/memstore/MemStore.h | 14 ++++++++++++-- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/src/os/memstore/MemStore.cc b/src/os/memstore/MemStore.cc index 06919d0f9a9c8..bf56cf3eab6a5 100644 --- a/src/os/memstore/MemStore.cc +++ b/src/os/memstore/MemStore.cc @@ -1250,6 +1250,7 @@ int MemStore::_destroy_collection(coll_t cid) RWLock::RLocker l2(cp->second->lock); if (!cp->second->object_map.empty()) return -ENOTEMPTY; + cp->second->exists = false; } used_bytes -= cp->second->used_bytes(); coll_map.erase(cp); diff --git a/src/os/memstore/MemStore.h b/src/os/memstore/MemStore.h index ac410a1d5d630..174915f32880b 100644 --- a/src/os/memstore/MemStore.h +++ b/src/os/memstore/MemStore.h @@ -156,18 +156,24 @@ public: } }; - struct Collection : public RefCountedObject { + struct Collection : public CollectionImpl { + coll_t cid; CephContext *cct; bool use_page_set; ceph::unordered_map object_hash; ///< for lookup map object_map; ///< for iteration map xattr; RWLock lock; ///< for object_{map,hash} + bool exists; typedef boost::intrusive_ptr Ref; friend void intrusive_ptr_add_ref(Collection *c) { c->get(); } friend void intrusive_ptr_release(Collection *c) { c->put(); } + const coll_t &get_cid() override { + return cid; + } + ObjectRef create_object() const { if (use_page_set) return new PageSetObject(cct->_conf->memstore_page_size); @@ -239,7 +245,7 @@ public: Collection(CephContext *cct) : cct(cct), use_page_set(cct->_conf->memstore_page_set), - lock("MemStore::Collection::lock") {} + lock("MemStore::Collection::lock"), exists(true) {} }; typedef Collection::Ref CollectionRef; @@ -396,6 +402,10 @@ public: int getattrs(coll_t cid, const ghobject_t& oid, map& aset); int list_collections(vector& ls); + + CollectionHandle open_collection(const coll_t& c) { + return get_collection(c); + } bool collection_exists(coll_t c); bool collection_empty(coll_t c); int collection_list(coll_t cid, ghobject_t start, ghobject_t end, -- 2.39.5