]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: adjust byte_throttler from Message::encode 11742/head
authorSage Weil <sage@redhat.com>
Sun, 23 Oct 2016 23:40:57 +0000 (18:40 -0500)
committerKefu Chai <kchai@redhat.com>
Wed, 2 Nov 2016 11:23:24 +0000 (19:23 +0800)
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 <sage@redhat.com>
(cherry picked from commit a9651282f7c16df872757b82d3d2995d92458d5c)

src/msg/Message.cc
src/msg/Message.h

index f84004bd7b177447156eb18cf1604d09ac2a9535..f65f16e7f1be16781eb25f69cd40a835f3a38f6a 100644 (file)
@@ -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)
index 43ec97b21e72815357cd807b78242bd22f8a0c94..9ea453665dc90bd0daa1acf286782ada019b22b0 100644 (file)
@@ -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();
   }