Skip to content

Commit

Permalink
Merge pull request #10817 from stiopaa1/os_memstore_movePageSetObject
Browse files Browse the repository at this point in the history
os/Memstore: move PageSetObject class to .cc file

Reviewed-by: Sage Weil <sage@redhat.com>
  • Loading branch information
liewegas committed Aug 23, 2016
2 parents ddb8125 + 5faaf58 commit 537cbb3
Show file tree
Hide file tree
Showing 2 changed files with 44 additions and 40 deletions.
42 changes: 42 additions & 0 deletions src/os/memstore/MemStore.cc
Expand Up @@ -1523,6 +1523,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()
Expand Down Expand Up @@ -1677,3 +1712,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();
}
42 changes: 2 additions & 40 deletions src/os/memstore/MemStore.h
Expand Up @@ -121,41 +121,7 @@ class MemStore : public ObjectStore {
}
};

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;
Expand All @@ -174,11 +140,7 @@ class MemStore : public ObjectStore {
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
Expand Down

0 comments on commit 537cbb3

Please sign in to comment.