]> git-server-git.apps.pok.os.sepia.ceph.com Git - ceph.git/commitdiff
mgr/DaemonServer: keep registry of osd sessions
authorSage Weil <sage@redhat.com>
Fri, 19 May 2017 03:06:20 +0000 (23:06 -0400)
committerSage Weil <sage@redhat.com>
Fri, 2 Jun 2017 17:02:48 +0000 (13:02 -0400)
Occasionally we send them messages.

Signed-off-by: Sage Weil <sage@redhat.com>
src/mgr/DaemonServer.cc
src/mgr/DaemonServer.h
src/mgr/MgrSession.h

index 2a35f7a5b1c9249158e4ef59abfbea9a881346cc..8fda55247d4d53307587af260675b4be0459e14e 100644 (file)
@@ -172,6 +172,14 @@ bool DaemonServer::ms_verify_authorizer(Connection *con,
       }
     }
     con->set_priv(s->get());
+
+    if (peer_type == CEPH_ENTITY_TYPE_OSD) {
+      Mutex::Locker l(lock);
+      s->osd_id = atoi(s->entity_name.get_id().c_str());
+      dout(10) << __func__ << " registering osd." << s->osd_id << " session "
+              << s << " con " << con << dendl;
+      osd_cons[s->osd_id].insert(con);
+    }
   }
 
   return true;
@@ -197,6 +205,22 @@ bool DaemonServer::ms_get_authorizer(int dest_type,
   return *authorizer != NULL;
 }
 
+bool DaemonServer::ms_handle_reset(Connection *con)
+{
+  if (con->get_peer_type() == CEPH_ENTITY_TYPE_OSD) {
+    MgrSessionRef session(static_cast<MgrSession*>(con->get_priv()));
+    if (!session) {
+      return false;
+    }
+    session->put(); // SessionRef takes a ref
+    Mutex::Locker l(lock);
+    dout(10) << __func__ << " unregistering osd." << session->osd_id
+            << "  session " << session << " con " << con << dendl;
+    osd_cons[session->osd_id].erase(con);
+  }
+  return false;
+}
+
 bool DaemonServer::ms_handle_refused(Connection *con)
 {
   // do nothing for now
index bf6261356ce073dd7cdb02fcaf23a0885d39abe0..a1ed292e1a0c1a15cf5b7a52641c70da22fd58db 100644 (file)
@@ -63,6 +63,9 @@ protected:
 
   AuthAuthorizeHandlerRegistry auth_registry;
 
+  /// connections for osds
+  ceph::unordered_map<int,set<ConnectionRef>> osd_cons;
+
   Mutex lock;
 
   static void _generate_command_map(map<string,cmd_vartype>& cmdmap,
@@ -96,7 +99,7 @@ public:
   ~DaemonServer() override;
 
   bool ms_dispatch(Message *m) override;
-  bool ms_handle_reset(Connection *con) override { return false; }
+  bool ms_handle_reset(Connection *con) override;
   void ms_handle_remote_reset(Connection *con) override {}
   bool ms_handle_refused(Connection *con) override;
   bool ms_get_authorizer(int dest_type, AuthAuthorizer **authorizer,
index 790d76b8aac49acbdda9f366f8b1aa494e91a211..72afd7a676728f0066c65ebd5b71413ba52e612e 100644 (file)
@@ -18,6 +18,8 @@ struct MgrSession : public RefCountedObject {
   EntityName entity_name;
   entity_inst_t inst;
 
+  int osd_id = -1;  ///< osd id (if an osd)
+
   // mon caps are suitably generic for mgr
   MonCap caps;