]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: do not waste memory on cached encoded blobs 11011/head
authorSage Weil <sage@redhat.com>
Wed, 7 Sep 2016 20:46:57 +0000 (16:46 -0400)
committerSage Weil <sage@redhat.com>
Wed, 7 Sep 2016 20:46:57 +0000 (16:46 -0400)
Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/BlueStore.h
src/os/bluestore/bluestore_types.h

index 120294bcc4651291214c9ea2621c2a6d4807fbbd..e50f899b81988c202293d0e04aec29cc9ae5423a 100644 (file)
@@ -473,6 +473,9 @@ public:
 
     void encode(bufferlist& bl) const {
       if (dirty) {
+       // manage blob_bl memory carefully
+       blob_bl.clear();
+       blob_bl.reserve(blob.estimate_encoded_size());
        ::encode(blob, blob_bl);
        dirty = false;
       } else {
index 5da333d17a7844c269bb9b9bfbeee91a97df118f..f0203c930b98b67b4d6829f654c659a1660b3625 100644 (file)
@@ -303,6 +303,11 @@ struct bluestore_blob_t {
 
   bluestore_blob_t(uint32_t f = 0) : flags(f) {}
 
+  int estimate_encoded_size() const {
+    // conservative upper bound... fixme
+    return csum_data.length() + extents.size() * 16 + 48;
+  }
+
   void encode(bufferlist& bl) const;
   void decode(bufferlist::iterator& p);
   void dump(Formatter *f) const;