]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: Implement new send_message[_lazy](Message *m, Connection *con) functions.
authorGreg Farnum <gregf@hq.newdream.net>
Thu, 15 Apr 2010 19:23:19 +0000 (12:23 -0700)
committerGreg Farnum <gregf@hq.newdream.net>
Thu, 15 Apr 2010 22:58:13 +0000 (15:58 -0700)
These can reduce the number of lookups and should be able to recover
from any pipes being destroyed while the Connection is still active.

src/msg/Messenger.h
src/msg/SimpleMessenger.cc
src/msg/SimpleMessenger.h

index 0eb55a78cb992fd06380659017b1343b1071e8c3..1b221a65801fd0832b57f4f9bad6679d0e7fc088 100644 (file)
@@ -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;
index 240e03f1c3668080088be8d9d45366fa0d41baf3..1e0a57cbdbfa19edca1b54060b6d7311999ce738 100644 (file)
@@ -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;
index 0123b0bc8a67f6116fc831ec19795f79b01da8bc..0f7364a227f0ccca86d2772b3777004e2492353b 100644 (file)
@@ -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: