]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: update Message envelope in encode, not write_message
authorSage Weil <sage@inktank.com>
Sun, 6 Jan 2013 16:33:01 +0000 (08:33 -0800)
committerSage Weil <sage@inktank.com>
Mon, 7 Jan 2013 21:02:58 +0000 (13:02 -0800)
Fill out the Message header, footer, and calculate CRCs during
encoding, not write_message().  This removes most modifications from
Pipe::write_message().

Signed-off-by: Sage Weil <sage@inktank.com>
src/msg/Message.cc
src/msg/Pipe.cc

index 8d4a2f7e4d607a1106b51debcb00a5f63849197f..cfab666ddf66da506fac8d2deccebbf8941ba853 100644 (file)
@@ -164,6 +164,15 @@ void Message::encode(uint64_t features, bool datacrc)
       header.compat_version = header.version;
   }
   calc_front_crc();
+
+  // update envelope
+  header.front_len = get_payload().length();
+  header.middle_len = get_middle().length();
+  header.data_len = get_data().length();
+  calc_header_crc();
+
+  footer.flags = CEPH_MSG_FOOTER_COMPLETE;
+
   if (datacrc) {
     calc_data_crc();
 
@@ -196,10 +205,9 @@ void Message::encode(uint64_t features, bool datacrc)
       }
     }
 #endif
-
-  }
-  else
+  } else {
     footer.flags = (unsigned)footer.flags | CEPH_MSG_FOOTER_NOCRC;
+  }
 }
 
 void Message::dump(Formatter *f) const
index 27d211cf59e63a8bbb1e6228ca3ba209ec0a919d..563bb2bb839fba950817f8dce4078d4cc7142442 100644 (file)
@@ -1860,17 +1860,10 @@ int Pipe::write_keepalive()
 
 int Pipe::write_message(Message *m)
 {
-  ceph_msg_header& header = m->get_header();
-  ceph_msg_footer& footer = m->get_footer();
+  const ceph_msg_header& header = m->get_header();
+  const ceph_msg_footer& footer = m->get_footer();
   int ret;
 
-  // get envelope, buffers
-  header.front_len = m->get_payload().length();
-  header.middle_len = m->get_middle().length();
-  header.data_len = m->get_data().length();
-  footer.flags = CEPH_MSG_FOOTER_COMPLETE;
-  m->calc_header_crc();
-
   // Now that we have all the crcs calculated, handle the digital signature for the message, if the 
   // pipe has session security set up.  Some session security options do not actually calculate and 
   // check the signature, but they should handle the calls to sign_message and check_signature.  PLR