From: Piotr Dałek Date: Fri, 16 Jun 2017 11:34:19 +0000 (+0200) Subject: messages/MOSDPing: optimize encode and decode of dummy payload X-Git-Tag: v10.2.10~72^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=e9e7850b51c824a50dde96332e9f47fd3a62e60b;p=ceph.git messages/MOSDPing: optimize encode and decode of dummy payload The dummy payload doesn't need to be processed, we can just skip over it when decoding and we can use a single bufferptr instead of entire bufferlist to encode it. Signed-off-by: Piotr Dałek (cherry picked from commit 15ce0772841f913d1eef1daebad0834e5f862383) --- diff --git a/src/messages/MOSDPing.h b/src/messages/MOSDPing.h index 8a02001eaedf..f759d83b7173 100644 --- a/src/messages/MOSDPing.h +++ b/src/messages/MOSDPing.h @@ -86,10 +86,11 @@ public: ::decode(peer_stat, p); ::decode(stamp, p); if (header.version >= 3) { - bufferlist size_bl; int payload_mid_length = p.get_off(); - ::decode(size_bl, p); - min_message_size = size_bl.length() + payload_mid_length; + uint32_t size; + ::decode(size, p); + p.advance(size); + min_message_size = size + payload_mid_length; } } void encode_payload(uint64_t features) { @@ -105,20 +106,18 @@ public: s = min_message_size - payload.length(); ::encode((uint32_t)s, payload); if (s) { - bufferlist pad; // this should be big enough for normal min_message padding sizes. since // we are targetting jumbo ethernet frames around 9000 bytes, 16k should // be more than sufficient! the compiler will statically zero this so // that at runtime we are only adding a bufferptr reference to it. static char zeros[16384] = {}; while (s > sizeof(zeros)) { - pad.append(buffer::create_static(sizeof(zeros), zeros)); + payload.append(buffer::create_static(sizeof(zeros), zeros)); s -= sizeof(zeros); } if (s) { - pad.append(buffer::create_static(s, zeros)); + payload.append(buffer::create_static(s, zeros)); } - ::encode(pad, payload); } }