From: Sage Weil Date: Sun, 23 Oct 2016 23:40:57 +0000 (-0500) Subject: msg: adjust byte_throttler from Message::encode X-Git-Tag: v10.2.4~8^2 X-Git-Url: http://git.apps.os.sepia.ceph.com/?a=commitdiff_plain;h=d48e603d6c6715fbc127003226d327b79f30713a;p=ceph.git msg: adjust byte_throttler from Message::encode Normally we never call encode on a message that has a byte_throttler set because we only use it for messages we received. However, for forwarded messages that we clear_payload() before resending, we *do* reencode, and in that case we need to retake the appropriate number of bytes from the throttler--just like we release them in clear_payload(). Signed-off-by: Sage Weil (cherry picked from commit a9651282f7c16df872757b82d3d2995d92458d5c) --- diff --git a/src/msg/Message.cc b/src/msg/Message.cc index f84004bd7b177..f65f16e7f1be1 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -182,8 +182,13 @@ void Message::encode(uint64_t features, int crcflags) { // encode and copy out of *m if (empty_payload()) { + assert(middle.length() == 0); encode_payload(features); + if (byte_throttler) { + byte_throttler->take(payload.length() + middle.length()); + } + // if the encoder didn't specify past compatibility, we assume it // is incompatible. if (header.compat_version == 0) diff --git a/src/msg/Message.h b/src/msg/Message.h index 43ec97b21e728..9ea453665dc90 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -335,8 +335,9 @@ public: */ void clear_payload() { - if (byte_throttler) + if (byte_throttler) { byte_throttler->put(payload.length() + middle.length()); + } payload.clear(); middle.clear(); }