]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
cls_cas: improve dynamic_encode accuracy a bit
authorSage Weil <sage@newdream.net>
Fri, 22 May 2020 15:21:26 +0000 (10:21 -0500)
committerSage Weil <sage@newdream.net>
Wed, 27 May 2020 16:30:35 +0000 (11:30 -0500)
- no default arg
- account for extra padding
- adjust test to target 512 bytes, which sounds reasonable?

Signed-off-by: Sage Weil <sage@newdream.net>
src/cls/cas/cls_cas_internal.cc
src/cls/cas/cls_cas_internal.h
src/test/cls_cas/test_cls_cas.cc

index 79ff206cfbd8b042db01ccaf1684376f6e2ff7a5..65ab38023d336f43b3a6b6a9cea611903da6b941 100644 (file)
@@ -338,7 +338,8 @@ void chunk_refs_t::dynamic_encode(ceph::buffer::list& bl, size_t max)
   bufferlist t;
   while (true) {
     _encode_r(t);
-    if (t.length() <= max) {
+    // account for the additional overhead in _encode_final
+    if (t.length() + 8 <= max) {
       break;
     }
     // downgrade resolution
index 1949832e51df0acb84802a9a00e80c20ffdc25cc..2831ae0cc71405e3e1a7a01ce2559899c562115b 100644 (file)
@@ -80,7 +80,7 @@ struct chunk_refs_t {
 
   void _encode_r(bufferlist& bl) const;
   void _encode_final(bufferlist& bl, bufferlist& t) const;
-  void dynamic_encode(ceph::buffer::list& bl, size_t max = 1024);
+  void dynamic_encode(ceph::buffer::list& bl, size_t max);
   void encode(ceph::buffer::list& bl) const;
   void decode(ceph::buffer::list::const_iterator& p);
 
index f57ad4b5307834a1e0e0dc93ed760574f8ea85ef..870b573fb06f1b612e91f7080f6da2e2df172f37 100644 (file)
@@ -314,7 +314,7 @@ TEST(chunk_refs_t, size)
     ASSERT_TRUE(ret);
     if (count_bits(i) <= 2) {
       bufferlist bl;
-      r.dynamic_encode(bl, 1024);
+      r.dynamic_encode(bl, 512);
       if (count_bits(i) == 1) {
        cout << i << "\t" << bl.length()
             << "\t" << r.describe_encoding()