From: Greg Farnum Date: Thu, 15 Apr 2010 19:23:19 +0000 (-0700) Subject: msgr: Implement new send_message[_lazy](Message *m, Connection *con) functions. X-Git-Tag: v0.22~625^2~14 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=85b67cecdf230bc18d49128a5c349e94e553fc7d;p=ceph.git msgr: Implement new send_message[_lazy](Message *m, Connection *con) functions. These can reduce the number of lookups and should be able to recover from any pipes being destroyed while the Connection is still active. --- diff --git a/src/msg/Messenger.h b/src/msg/Messenger.h index 0eb55a78cb99..1b221a65801f 100644 --- a/src/msg/Messenger.h +++ b/src/msg/Messenger.h @@ -148,9 +148,11 @@ protected: // send message virtual void prepare_dest(const entity_inst_t& inst) {} virtual int send_message(Message *m, const entity_inst_t& dest) = 0; + virtual int send_message(Message *m, Connection *con) = 0; virtual int lazy_send_message(Message *m, const entity_inst_t& dest) { return send_message(m, dest); } + virtual int lazy_send_message(Message *m, Connection *con) = 0; virtual int send_keepalive(const entity_inst_t& dest) = 0; virtual void mark_down(const entity_addr_t& a) = 0; diff --git a/src/msg/SimpleMessenger.cc b/src/msg/SimpleMessenger.cc index 240e03f1c366..1e0a57cbdbfa 100644 --- a/src/msg/SimpleMessenger.cc +++ b/src/msg/SimpleMessenger.cc @@ -395,6 +395,24 @@ int SimpleMessenger::send_message(Message *m, const entity_inst_t& dest) return 0; } +int SimpleMessenger::send_message(Message *m, Connection *con) +{ + //set envelope + m->get_header().src = get_myname(); + + if (!m->get_priority()) m->set_priority(get_default_send_priority()); + + + dout(1) << "--> " << con->get_peer_addr() << " -- " << *m + << " -- ?+" << m->get_data().length() + << " " << m + << dendl; + + submit_message(m, (Pipe **)&con->pipe, con->get_peer_addr(), + con->get_peer_type()); + return 0; +} + int SimpleMessenger::lazy_send_message(Message *m, const entity_inst_t& dest) { // set envelope @@ -414,6 +432,25 @@ int SimpleMessenger::lazy_send_message(Message *m, const entity_inst_t& dest) return 0; } +int SimpleMessenger::lazy_send_message(Message *m, Connection *con) +{ + //set envelope + m->get_header().src = get_myname(); + + if (!m->get_priority()) m->set_priority(get_default_send_priority()); + + + dout(1) << "lazy " + << "--> " << con->get_peer_addr() << " -- " << *m + << " -- ?+" << m->get_data().length() + << " " << m + << dendl; + + submit_message(m, (Pipe **)&con->pipe, con->get_peer_addr(), + con->get_peer_type(), true); + return 0; +} + entity_addr_t SimpleMessenger::get_myaddr() { entity_addr_t a = messenger->ms_addr; diff --git a/src/msg/SimpleMessenger.h b/src/msg/SimpleMessenger.h index 0123b0bc8a67..0f7364a227f0 100644 --- a/src/msg/SimpleMessenger.h +++ b/src/msg/SimpleMessenger.h @@ -472,7 +472,9 @@ private: void suicide(); void prepare_dest(const entity_inst_t& inst); int send_message(Message *m, const entity_inst_t& dest); + int send_message(Message *m, Connection *con); int lazy_send_message(Message *m, const entity_inst_t& dest); + int lazy_send_message(Message *m, Connection *con); /***********************/ private: