From: Michal Jarzabek Date: Mon, 22 Aug 2016 19:25:45 +0000 (+0100) Subject: os/Memstore: move PageSetObject class to .cc file X-Git-Tag: v11.0.1~401^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=refs%2Fpull%2F10817%2Fhead;p=ceph.git os/Memstore: move PageSetObject class to .cc file Signed-off-by: Michal Jarzabek --- diff --git a/src/os/memstore/MemStore.cc b/src/os/memstore/MemStore.cc index 908da42f0c342..f07cb3158b430 100644 --- a/src/os/memstore/MemStore.cc +++ b/src/os/memstore/MemStore.cc @@ -1478,6 +1478,41 @@ int MemStore::BufferlistObject::truncate(uint64_t size) // PageSetObject +struct MemStore::PageSetObject : public Object { + PageSet data; + uint64_t data_len; +#if defined(__GLIBCXX__) + // use a thread-local vector for the pages returned by PageSet, so we + // can avoid allocations in read/write() + static thread_local PageSet::page_vector tls_pages; +#endif + + explicit PageSetObject(size_t page_size) : data(page_size), data_len(0) {} + + size_t get_size() const override { return data_len; } + + int read(uint64_t offset, uint64_t len, bufferlist &bl) override; + int write(uint64_t offset, const bufferlist &bl) override; + int clone(Object *src, uint64_t srcoff, uint64_t len, + uint64_t dstoff) override; + int truncate(uint64_t offset) override; + + void encode(bufferlist& bl) const override { + ENCODE_START(1, 1, bl); + ::encode(data_len, bl); + data.encode(bl); + encode_base(bl); + ENCODE_FINISH(bl); + } + void decode(bufferlist::iterator& p) override { + DECODE_START(1, p); + ::decode(data_len, p); + data.decode(p); + decode_base(p); + DECODE_FINISH(p); + } +}; + #if defined(__GLIBCXX__) // use a thread-local vector for the pages returned by PageSet, so we // can avoid allocations in read/write() @@ -1632,3 +1667,10 @@ int MemStore::PageSetObject::truncate(uint64_t size) tls_pages.clear(); // drop page ref return 0; } + + +MemStore::ObjectRef MemStore::Collection::create_object() const { + if (use_page_set) + return new PageSetObject(cct->_conf->memstore_page_size); + return new BufferlistObject(); +} diff --git a/src/os/memstore/MemStore.h b/src/os/memstore/MemStore.h index 1759932e7fe84..b3ff7101a7449 100644 --- a/src/os/memstore/MemStore.h +++ b/src/os/memstore/MemStore.h @@ -121,41 +121,7 @@ public: } }; - struct PageSetObject : public Object { - PageSet data; - uint64_t data_len; -#if defined(__GLIBCXX__) - // use a thread-local vector for the pages returned by PageSet, so we - // can avoid allocations in read/write() - static thread_local PageSet::page_vector tls_pages; -#endif - - explicit PageSetObject(size_t page_size) : data(page_size), data_len(0) {} - - size_t get_size() const override { return data_len; } - - int read(uint64_t offset, uint64_t len, bufferlist &bl) override; - int write(uint64_t offset, const bufferlist &bl) override; - int clone(Object *src, uint64_t srcoff, uint64_t len, - uint64_t dstoff) override; - int truncate(uint64_t offset) override; - - void encode(bufferlist& bl) const override { - ENCODE_START(1, 1, bl); - ::encode(data_len, bl); - data.encode(bl); - encode_base(bl); - ENCODE_FINISH(bl); - } - void decode(bufferlist::iterator& p) override { - DECODE_START(1, p); - ::decode(data_len, p); - data.decode(p); - decode_base(p); - DECODE_FINISH(p); - } - }; - + struct PageSetObject; struct Collection : public CollectionImpl { coll_t cid; CephContext *cct; @@ -174,11 +140,7 @@ public: return cid; } - ObjectRef create_object() const { - if (use_page_set) - return new PageSetObject(cct->_conf->memstore_page_size); - return new BufferlistObject(); - } + ObjectRef create_object() const; // NOTE: The lock only needs to protect the object_map/hash, not the // contents of individual objects. The osd is already sequencing