From 35021b3f77aa5a97629777903033180f9f3fc620 Mon Sep 17 00:00:00 2001 From: Sage Weil Date: Fri, 22 May 2020 10:21:26 -0500 Subject: [PATCH] cls_cas: improve dynamic_encode accuracy a bit - no default arg - account for extra padding - adjust test to target 512 bytes, which sounds reasonable? Signed-off-by: Sage Weil --- src/cls/cas/cls_cas_internal.cc | 3 ++- src/cls/cas/cls_cas_internal.h | 2 +- src/test/cls_cas/test_cls_cas.cc | 2 +- 3 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/cls/cas/cls_cas_internal.cc b/src/cls/cas/cls_cas_internal.cc index 79ff206cfbd8b..65ab38023d336 100644 --- a/src/cls/cas/cls_cas_internal.cc +++ b/src/cls/cas/cls_cas_internal.cc @@ -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 diff --git a/src/cls/cas/cls_cas_internal.h b/src/cls/cas/cls_cas_internal.h index 1949832e51df0..2831ae0cc7140 100644 --- a/src/cls/cas/cls_cas_internal.h +++ b/src/cls/cas/cls_cas_internal.h @@ -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); diff --git a/src/test/cls_cas/test_cls_cas.cc b/src/test/cls_cas/test_cls_cas.cc index f57ad4b530783..870b573fb06f1 100644 --- a/src/test/cls_cas/test_cls_cas.cc +++ b/src/test/cls_cas/test_cls_cas.cc @@ -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() -- 2.39.5