]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
msgr: change ms_handle_[peer_]reset prototype
authorSage Weil <sage@newdream.net>
Tue, 13 Oct 2009 18:21:31 +0000 (11:21 -0700)
committerSage Weil <sage@newdream.net>
Tue, 13 Oct 2009 18:21:31 +0000 (11:21 -0700)
And some small fixups in handlers along the way

21 files changed:
src/ceph.cc
src/client/Client.cc
src/client/Client.h
src/common/LogClient.cc
src/common/LogClient.h
src/dumpjournal.cc
src/librados.cc
src/mds/MDS.cc
src/mds/MDS.h
src/mon/MonClient.cc
src/mon/MonClient.h
src/mon/Monitor.cc
src/mon/Monitor.h
src/msg/Dispatcher.h
src/msg/Messenger.h
src/msg/SimpleMessenger.cc
src/osd/OSD.cc
src/osd/OSD.h
src/osdc/Objecter.cc
src/osdc/Objecter.h
src/testmsgr.cc

index 753e3eaec75c0aaf0bb8da0826f20daf59eed370..be39a2e9d39414d42a31b035fd7ba07f1acb9f6c 100644 (file)
@@ -369,17 +369,20 @@ class Admin : public Dispatcher {
     return true;
   }
 
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer) {
-    lock.Lock();
-    if (observe)
-      send_observe_requests();
-    if (pending_cmd.size())
-      send_command();
-    lock.Unlock();
-    return true;
+  bool ms_handle_reset(Connection *con) {
+    if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
+      lock.Lock();
+      if (observe)
+       send_observe_requests();
+      if (pending_cmd.size())
+       send_command();
+      lock.Unlock();
+      return true;
+    }
+    return false;
   }
 
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+  void ms_handle_remote_reset(Connection *con) {}
 
 } dispatcher;
 
index 0093ca123b6ec5394340f47e691800621cd07103..1a231a1770d42484b69ecd4df78dc33cc0cc28cf 100644 (file)
@@ -5934,17 +5934,17 @@ int Client::get_local_osd()
 
 // ===============================
 
-bool Client::ms_handle_reset(Connection *con, const entity_addr_t& addr
+bool Client::ms_handle_reset(Connection *con) 
 {
-  dout(0) << "ms_handle_reset on " << addr << dendl;
+  dout(0) << "ms_handle_reset on " << con->get_peer_addr() << dendl;
   Mutex::Locker l(client_lock);
-  objecter->ms_handle_reset(addr);
+  objecter->ms_handle_reset(con);
   return false;
 }
 
-void Client::ms_handle_remote_reset(Connection *con, const entity_addr_t& addr
+void Client::ms_handle_remote_reset(Connection *con) 
 {
-  dout(0) << "ms_handle_remote_reset on " << addr << dendl;
+  dout(0) << "ms_handle_remote_reset on " << con->get_peer_addr() << dendl;
   Mutex::Locker l(client_lock);
-  objecter->ms_handle_remote_reset(addr);
+  objecter->ms_handle_remote_reset(con);
 }
index cde4e873d6e158a332403b79deff314cfc073ef9..34161ce8cd4ca377b312c6117413bba78f1d511b 100644 (file)
@@ -1093,8 +1093,8 @@ protected:
   friend class SyntheticClient;
   bool ms_dispatch(Message *m);
 
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer);
+  bool ms_handle_reset(Connection *con);
+  void ms_handle_remote_reset(Connection *con);
 
 
  public:
index ed02e7063577369318d66fcb5ab866e674665551..6b95ea9765d76a56ca74eec5c9487116c5444e0f 100644 (file)
@@ -116,3 +116,11 @@ bool LogClient::ms_dispatch(Message *m)
 }
 
 
+bool LogClient::ms_handle_reset(Connection *con)
+{
+  if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
+    dout(10) << "ms_handle_reset on mon " << con->get_peer_addr() << ", resending pending log events" << dendl;
+    send_log();
+  }
+  return false;
+}
index 21bafdcdb5b7018f96fee5ca9430c7754effbc41..2340162cc382b2c184070d5a0232a831e3082b90 100644 (file)
@@ -37,8 +37,8 @@ class LogClient : public Dispatcher {
   bool is_synchronous;
   void _send_log();
 
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+  bool ms_handle_reset(Connection *con);
+  void ms_handle_remote_reset(Connection *con) {}
 
 
  public:
index cbea5f61f4a8bb34ceaf04036511ad15cca651ff..ffa9d76c9a11023c758e4f4fa3093823f4d1c085 100644 (file)
@@ -61,8 +61,8 @@ class Dumper : public Dispatcher {
     }
     return true;
   }
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+  bool ms_handle_reset(Connection *con) { return false; }
+  void ms_handle_remote_reset(Connection *con) {}
 
 } dispatcher;
 
index 097e3821e8ded112c16e21ce451a33c48d53a9f7..32af8240c5cc7344285efd70f2f2cb8a148ab663 100644 (file)
@@ -58,8 +58,8 @@ class RadosClient : public Dispatcher
   bool _dispatch(Message *m);
   bool ms_dispatch(Message *m);
 
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer);
+  bool ms_handle_reset(Connection *con);
+  void ms_handle_remote_reset(Connection *con);
 
   Objecter *objecter;
 
@@ -341,17 +341,17 @@ bool RadosClient::ms_dispatch(Message *m)
   return ret;
 }
 
-bool RadosClient::ms_handle_reset(Connection *con, const entity_addr_t& addr)
+bool RadosClient::ms_handle_reset(Connection *con)
 {
   Mutex::Locker l(lock);
-  objecter->ms_handle_reset(addr);
+  objecter->ms_handle_reset(con);
   return false;
 }
 
-void RadosClient::ms_handle_remote_reset(Connection *con, const entity_addr_t& addr)
+void RadosClient::ms_handle_remote_reset(Connection *con)
 {
   Mutex::Locker l(lock);
-  objecter->ms_handle_remote_reset(addr);
+  objecter->ms_handle_remote_reset(con);
 }
 
 
index 75bda40dfe31caa6d9242d742e2ec971a5767e84..59f74992282f66e6ea5511217473d7474629f0df 100644 (file)
@@ -1388,18 +1388,18 @@ bool MDS::_dispatch(Message *m)
 
 
 
-bool MDS::ms_handle_reset(Connection *con, const entity_addr_t& addr
+bool MDS::ms_handle_reset(Connection *con) 
 {
   Mutex::Locker l(mds_lock);
-  dout(0) << "ms_handle_reset on " << addr << dendl;
-  objecter->ms_handle_reset(addr);
+  dout(0) << "ms_handle_reset on " << con->get_peer_addr() << dendl;
+  objecter->ms_handle_reset(con);
   return false;
 }
 
 
-void MDS::ms_handle_remote_reset(Connection *con, const entity_addr_t& addr
+void MDS::ms_handle_remote_reset(Connection *con) 
 {
   Mutex::Locker l(mds_lock);
-  dout(0) << "ms_handle_remote_reset on " << addr << dendl;
-  objecter->ms_handle_remote_reset(addr);
+  dout(0) << "ms_handle_remote_reset on " << con->get_peer_addr() << dendl;
+  objecter->ms_handle_remote_reset(con);
 }
index 42593de5a58d2e40eee1be877c1b7b30bf6fd0ef..20480c8f93507709bce25c059518b7f86042ece4 100644 (file)
@@ -361,8 +361,8 @@ class MDS : public Dispatcher {
   // messages
   bool _dispatch(Message *m);
   
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer);
+  bool ms_handle_reset(Connection *con);
+  void ms_handle_remote_reset(Connection *con);
 
   // special message types
   void handle_mds_map(class MMDSMap *m);
index 37314fe10576d8f5c9fccccab1c825a5abd74bdd..03a678153d187e21a3e68cb0e335e72f16e1b24f 100644 (file)
@@ -320,15 +320,22 @@ void MonClient::_reopen_session()
   }
 }
 
-bool MonClient::ms_handle_reset(Connection *con, const entity_addr_t& peer)
+bool MonClient::ms_handle_reset(Connection *con)
 {
-  dout(10) << "ms_handle_reset " << peer << dendl;
-  if (hunting)
-    return true;
-
-  dout(0) << "hunting for new mon" << dendl;
-  hunting = true;
-  _reopen_session();
+  if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
+    if (con->get_peer_addr() != monmap.get_inst(cur_mon).addr) {
+      dout(10) << "ms_handle_reset stray mon " << con->get_peer_addr() << dendl;
+      return true;
+    }
+    
+    dout(10) << "ms_handle_reset current mon" << con->get_peer_addr() << dendl;
+    if (hunting)
+      return true;
+    
+    dout(0) << "hunting for new mon" << dendl;
+    hunting = true;
+    _reopen_session();
+  }
   return false;
 }
 
index a02408fbfb84c8e523cc707406e61418cb8d15d5..afc959f3173f28145c1f6b3ee6280c9461d38c00 100644 (file)
@@ -44,9 +44,9 @@ private:
   SafeTimer timer;
 
   bool ms_dispatch(Message *m);
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
+  bool ms_handle_reset(Connection *con);
 
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+  void ms_handle_remote_reset(Connection *con) {}
 
   void handle_monmap(MMonMap *m);
 
index e3e4c374dfa3529a3136f33ea9c7a6b96e66c8e0..0c40dd3b1556e1acfd218155be9d2c50bb680bf4 100644 (file)
@@ -647,18 +647,22 @@ void Monitor::handle_subscribe(MMonSubscribe *m)
   delete m;
 }
 
-bool Monitor::ms_handle_reset(Connection *con, const entity_addr_t& peer)
+bool Monitor::ms_handle_reset(Connection *con)
 {
+  // ignore lossless monitor sessions
+  if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON)
+    return false;
+
   Session *s = (Session *)con->get_priv();
   if (!s)
     return false;
-
+  
   Mutex::Locker l(lock);
-
+  
   dout(10) << "reset/close on session " << s->inst << dendl;
   remove_session(s);
   s->put();
-
+    
   // remove from connection, too.
   con->set_priv(NULL);
   return true;
index 073ab24ff4d74acc6e8b3f014ec8534a3167e0d1..9fad287a7f084f0cad8f4f0bd3ab987bc79db218 100644 (file)
@@ -195,8 +195,8 @@ public:
 
  private:
   bool ms_dispatch(Message *m);
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer);
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+  bool ms_handle_reset(Connection *con);
+  void ms_handle_remote_reset(Connection *con) {}
 
  public:
   Monitor(int w, MonitorStore *s, Messenger *m, MonMap *map);
index feffc13295b8af262fec79fc00fc9bb485e44f25..24c5c5ed283c917658bb5f50d00bf1b7434fa180 100644 (file)
@@ -34,11 +34,11 @@ public:
    * this indicates that the ordered+reliable delivery semantics have 
    * been violated.  messages may have been lost.
    */
-  virtual bool ms_handle_reset(Connection *con, const entity_addr_t& peer) = 0;
+  virtual bool ms_handle_reset(Connection *con) = 0;
 
   // on deliberate reset of connection by remote
   //  implies incoming messages dropped; possibly/probably some of our previous outgoing too.
-  virtual void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) = 0;
+  virtual void ms_handle_remote_reset(Connection *con) = 0;
 };
 
 #endif
index 6b87fecfd80856b6d310ecf43f65095e65d53e59..743a1f8d0bdafe16357990613a34792d75601017 100644 (file)
@@ -104,18 +104,18 @@ protected:
                    << dendl;
     assert(0);
   }
-  void ms_deliver_handle_reset(Connection *con, const entity_addr_t& peer) {
+  void ms_deliver_handle_reset(Connection *con) {
     for (list<Dispatcher*>::iterator p = dispatchers.begin();
         p != dispatchers.end();
         p++)
-      if ((*p)->ms_handle_reset(con, peer))
+      if ((*p)->ms_handle_reset(con))
        return;
   }
-  void ms_deliver_handle_remote_reset(Connection *con, const entity_addr_t& peer) {
+  void ms_deliver_handle_remote_reset(Connection *con) {
     for (list<Dispatcher*>::iterator p = dispatchers.begin();
         p != dispatchers.end();
         p++)
-      (*p)->ms_handle_remote_reset(con, peer);
+      (*p)->ms_handle_remote_reset(con);
   }
 
   // shutdown
index 3ba8a3b9aafc4af25398896717054fc1846c30f8..6f47f9225118bafecaab8aed70a85a23c641886b 100644 (file)
@@ -293,7 +293,7 @@ void SimpleMessenger::Endpoint::dispatch_entry()
            entity_addr_t a = remote_reset_q.front().second;
            remote_reset_q.pop_front();
            lock.Unlock();
-           ms_deliver_handle_remote_reset(con, a);
+           ms_deliver_handle_remote_reset(con);
            con->put();
          } else if ((long)m == BAD_RESET) {
            lock.Lock();
@@ -301,7 +301,7 @@ void SimpleMessenger::Endpoint::dispatch_entry()
            entity_addr_t a = reset_q.front().second;
            reset_q.pop_front();
            lock.Unlock();
-           ms_deliver_handle_reset(con, a);
+           ms_deliver_handle_reset(con);
            con->put();
          } else {
            dout(1) << "<== " << m->get_source_inst()
index 3b7a99568f47ebdc21784fb9fee444dabdc9b9e8..658790632cf998689139da5670da9e662f094c80 100644 (file)
@@ -1244,6 +1244,18 @@ void OSD::do_mon_report()
   class_handler->resend_class_requests();
 }
 
+bool OSD::ms_handle_reset(Connection *con)
+{
+  dout(10) << "ms_handle_reset " << con->get_peer_addr() << dendl;
+  
+  if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON) {
+    // ...
+  }
+
+  return false;
+}
+
+
 
 void OSD::send_boot()
 {
index e2e7b9f333f088bcb6413d55012c02da457c793d..72e97e86f66e7d0163514abf43871a0a54d2b61c 100644 (file)
@@ -207,8 +207,8 @@ public:
     bool ms_dispatch(Message *m) {
       return osd->heartbeat_dispatch(m);
     };
-    bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
-    void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+    bool ms_handle_reset(Connection *con) { return false; }
+    void ms_handle_remote_reset(Connection *con) {}
   public:
     OSD *osd;
     HeartbeatDispatcher(OSD *o) : osd(o) {}
@@ -815,8 +815,8 @@ protected:
 
  private:
   bool ms_dispatch(Message *m);
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+  bool ms_handle_reset(Connection *con);
+  void ms_handle_remote_reset(Connection *con) {}
 
  public:
   OSD(int id, Messenger *m, Messenger *hbm, MonClient *mc, const char *dev = 0, const char *jdev = 0);
index 3b3a6306bd06fd9221ee6b7960eb561bdded9d1f..d0b164739ba5dfe77803552949cd9a9f0892a323 100644 (file)
@@ -923,15 +923,15 @@ void Objecter::_sg_read_finish(vector<ObjectExtent>& extents, vector<bufferlist>
 }
 
 
-void Objecter::ms_handle_reset(const entity_addr_t& addr)
+void Objecter::ms_handle_reset(Connection *con)
 {
-  if (monc->monmap.contains(addr))
+  if (con->get_peer_type() == CEPH_ENTITY_TYPE_MON)
     resend_mon_ops();
 }
 
-void Objecter::ms_handle_remote_reset(const entity_addr_t& addr)
+void Objecter::ms_handle_remote_reset(Connection *con)
 {
-  if (osdmap->have_addr(addr))
+  if (con->get_peer_type() == CEPH_ENTITY_TYPE_OSD)
     maybe_request_map();
 }
 
index 68ca690b801e3d1ba4e0adcbc66a8a685f4dbe22..4d2696b03985c7e1cf392ad51a087859be9e6f63 100644 (file)
@@ -701,8 +701,8 @@ public:
     }
   }
 
-  void ms_handle_reset(const entity_addr_t& addr);
-  void ms_handle_remote_reset(const entity_addr_t& addr);
+  void ms_handle_reset(Connection *con);
+  void ms_handle_remote_reset(Connection *con);
 
 };
 
index 10fb4a0c78a25302672f2950964952ac5951ae61..b5b5a1b5535701f9696e028ebde76b72a41fa5a0 100644 (file)
@@ -57,8 +57,8 @@ class Admin : public Dispatcher {
     return true;
   }
 
-  bool ms_handle_reset(Connection *con, const entity_addr_t& peer) { return false; }
-  void ms_handle_remote_reset(Connection *con, const entity_addr_t& peer) {}
+  bool ms_handle_reset(Connection *con) { return false; }
+  void ms_handle_remote_reset(Connection *con) {}
 
 } dispatcher;