]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
os/bluestore: varint or lba encode pextent, lextent, ref_map, onode
authorSage Weil <sage@redhat.com>
Sun, 19 Jun 2016 10:29:40 +0000 (06:29 -0400)
committerSage Weil <sage@redhat.com>
Tue, 21 Jun 2016 16:50:33 +0000 (12:50 -0400)
Certainly not done here, but this is a start.

Signed-off-by: Sage Weil <sage@redhat.com>
src/os/bluestore/bluestore_types.cc
src/os/bluestore/bluestore_types.h

index 6bbc851b500715fe65c07a19fa04fa89ff2f34d0..0173c8ecafa8267a1704ce12e461a82f4a9cdee9 100644 (file)
@@ -286,16 +286,23 @@ bool bluestore_extent_ref_map_t::intersects(
 
 void bluestore_extent_ref_map_t::encode(bufferlist& bl) const
 {
-  ENCODE_START(1, 1, bl);
-  ::encode(ref_map, bl);
-  ENCODE_FINISH(bl);
+  uint32_t n = ref_map.size();
+  small_encode_varint(n, bl);
+  for (auto& p : ref_map) {
+    small_encode_varint_lowz(p.first, bl);
+    p.second.encode(bl);
+  }
 }
 
 void bluestore_extent_ref_map_t::decode(bufferlist::iterator& p)
 {
-  DECODE_START(1, p);
-  ::decode(ref_map, p);
-  DECODE_FINISH(p);
+  uint32_t n;
+  small_decode_varint(n, p);
+  while (n--) {
+    uint64_t offset;
+    small_decode_varint_lowz(offset, p);
+    ref_map[offset].decode(p);
+  }
 }
 
 void bluestore_extent_ref_map_t::dump(Formatter *f) const
@@ -375,28 +382,28 @@ string bluestore_blob_t::get_flags_string(unsigned flags)
 void bluestore_blob_t::encode(bufferlist& bl) const
 {
   ENCODE_START(1, 1, bl);
-  ::encode(extents, bl);
-  ::encode(compressed_length, bl);
-  ::encode(flags, bl);
-  ::encode(csum_type, bl);
-  ::encode(csum_chunk_order, bl);
+  small_encode_obj(extents, bl);
+  small_encode_varint_lowz(compressed_length, bl);
+  small_encode_varint(flags, bl);
+  small_encode_varint(csum_type, bl);
+  small_encode_varint(csum_chunk_order, bl);
   ::encode(ref_map, bl);
   ::encode(unused, bl);
-  ::encode(csum_data, bl);
+  small_encode_buf_lowz(csum_data, bl);
   ENCODE_FINISH(bl);
 }
 
 void bluestore_blob_t::decode(bufferlist::iterator& p)
 {
   DECODE_START(1, p);
-  ::decode(extents, p);
-  ::decode(compressed_length, p);
-  ::decode(flags, p);
-  ::decode(csum_type, p);
-  ::decode(csum_chunk_order, p);
+  small_decode_obj(extents, p);
+  small_decode_varint_lowz(compressed_length, p);
+  small_decode_varint(flags, p);
+  small_decode_varint(csum_type, p);
+  small_decode_varint(csum_chunk_order, p);
   ::decode(ref_map, p);
   ::decode(unused, p);
-  ::decode(csum_data, p);
+  small_decode_buf_lowz(csum_data, p);
   DECODE_FINISH(p);
 }
 
index d149a45e181ff932f2ee9135e97e61c0ad2946b0..dd1660e3cd20ba0f18343f4d4b9a29efd76c4483 100644 (file)
@@ -19,6 +19,7 @@
 #include "include/types.h"
 #include "include/interval_set.h"
 #include "include/utime.h"
+#include "include/small_encoding.h"
 #include "common/hobject.h"
 
 namespace ceph {
@@ -72,12 +73,12 @@ struct bluestore_pextent_t {
   }
 
   void encode(bufferlist& bl) const {
-    ::encode(offset, bl);
-    ::encode(length, bl);
+    small_encode_lba(offset, bl);
+    small_encode_varint_lowz(length, bl);
   }
   void decode(bufferlist::iterator& p) {
-    ::decode(offset, p);
-    ::decode(length, p);
+    small_decode_lba(offset, p);
+    small_decode_varint_lowz(length, p);
   }
   void dump(Formatter *f) const;
   static void generate_test_instances(list<bluestore_pextent_t*>& ls);
@@ -94,12 +95,12 @@ struct bluestore_extent_ref_map_t {
     uint32_t refs;
     record_t(uint32_t l=0, uint32_t r=0) : length(l), refs(r) {}
     void encode(bufferlist& bl) const {
-      ::encode(length, bl);
-      ::encode(refs, bl);
+      small_encode_varint_lowz(length, bl);
+      small_encode_varint(refs, bl);
     }
     void decode(bufferlist::iterator& p) {
-      ::decode(length, p);
-      ::decode(refs, p);
+      small_decode_varint_lowz(length, p);
+      small_decode_varint(refs, p);
     }
   };
   WRITE_CLASS_ENCODER(record_t)