msgr: add ms_dump_on_send option

This is useful only for debugging.  The encoded contents of a message are
dumped to the log on message send.  This is useful when valgrind is
triggering warnings about uninitialized memory in messages because the
call chain will indicate which message type is to blame, whereas the
usual writer thread context does not tell us any useful information.

Signed-off-by: Sage Weil <sage@inktank.com>
This commit is contained in:
Sage Weil 2014-04-02 08:49:33 -07:00
parent 87e6a62e4f
commit 2f7522c83a
2 changed files with 14 additions and 0 deletions

View File

@ -126,6 +126,7 @@ OPTION(ms_inject_delay_msg_type, OPT_STR, "") // the type of message to del
OPTION(ms_inject_delay_max, OPT_DOUBLE, 1) // seconds
OPTION(ms_inject_delay_probability, OPT_DOUBLE, 0) // range [0, 1]
OPTION(ms_inject_internal_delays, OPT_DOUBLE, 0) // seconds
OPTION(ms_dump_on_send, OPT_BOOL, false) // hexdump msg to log on send
OPTION(inject_early_sigterm, OPT_BOOL, false)

View File

@ -399,6 +399,19 @@ ConnectionRef SimpleMessenger::get_loopback_connection()
void SimpleMessenger::submit_message(Message *m, Connection *con,
const entity_addr_t& dest_addr, int dest_type, bool lazy)
{
if (cct->_conf->ms_dump_on_send) {
m->encode(-1, true);
ldout(cct, 0) << "submit_message " << *m << "\n";
m->get_payload().hexdump(*_dout);
if (m->get_data().length() > 0) {
*_dout << " data:\n";
m->get_data().hexdump(*_dout);
}
*_dout << dendl;
m->clear_payload();
}
// existing connection?
if (con) {
Pipe *pipe = NULL;