]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msg: adjust byte_throttler from Message::encode
authorSage Weil <sage@redhat.com>
Sun, 23 Oct 2016 23:40:57 +0000 (18:40 -0500)
committerSage Weil <sage@redhat.com>
Mon, 24 Oct 2016 16:10:17 +0000 (11:10 -0500)
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>
src/msg/Message.cc
src/msg/Message.h

index 7b87667f384d7dcc206951e38a257b5b4d908da6..8e61a9718c6442a49490637069bd3eaaf4ee2075 100644 (file)
@@ -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)
index 40eb336dd578bba4af2970c858dd71e53d224f00..070d9989103cd7468dddbee11604c0ccfbf7454e 100644 (file)
@@ -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();
   }