From: Sage Weil Date: Sun, 23 Oct 2016 23:40:57 +0000 (-0500) Subject: msg: adjust byte_throttler from Message::encode X-Git-Tag: v11.1.0~530^2~1 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=a9651282f7c16df872757b82d3d2995d92458d5c;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 --- diff --git a/src/msg/Message.cc b/src/msg/Message.cc index 7b87667f384d..8e61a9718c64 100644 --- a/src/msg/Message.cc +++ b/src/msg/Message.cc @@ -190,8 +190,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 40eb336dd578..070d9989103c 100644 --- a/src/msg/Message.h +++ b/src/msg/Message.h @@ -329,8 +329,9 @@ public: */ void clear_payload() { - if (byte_throttler) + if (byte_throttler) { byte_throttler->put(payload.length() + middle.length()); + } payload.clear(); middle.clear(); }