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)
{
// 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)
*/
void clear_payload() {
- if (byte_throttler)
+ if (byte_throttler) {
byte_throttler->put(payload.length() + middle.length());
+ }
payload.clear();
middle.clear();
}