]> git.apps.os.sepia.ceph.com Git - ceph.git/commitdiff
MDSMonitor: handle fsmap.user subscription
authorYan, Zheng <zyan@redhat.com>
Wed, 6 Apr 2016 13:08:00 +0000 (21:08 +0800)
committerYan, Zheng <zyan@redhat.com>
Fri, 10 Jun 2016 01:30:19 +0000 (09:30 +0800)
return FSMap data that are visiable to normal users.

Signed-off-by: Yan, Zheng <zyan@redhat.com>
src/mon/MDSMonitor.cc
src/mon/Monitor.cc

index 53cdec0d08e786004413bc8984e248ff59442e03..ec6f5e37d751a086d483a36cf11335159130c280 100644 (file)
@@ -26,6 +26,7 @@
 #include "common/cmdparse.h"
 #include "messages/MMDSMap.h"
 #include "messages/MFSMap.h"
+#include "messages/MFSMapUser.h"
 #include "messages/MMDSLoadTargets.h"
 #include "messages/MMonCommand.h"
 #include "messages/MGenericMessage.h"
@@ -2453,6 +2454,7 @@ void MDSMonitor::check_subs()
   // filesystems.  Build a list of all the types we service
   // subscriptions for.
   types.push_back("fsmap");
+  types.push_back("fsmap.user");
   types.push_back("mdsmap");
   for (const auto &i : fsmap.filesystems) {
     auto fscid = i.first;
@@ -2487,7 +2489,26 @@ void MDSMonitor::check_sub(Subscription *sub)
         sub->next = fsmap.get_epoch() + 1;
       }
     }
-  } else {
+  } else if (sub->type == "fsmap.user") {
+    if (sub->next <= fsmap.get_epoch()) {
+      FSMapUser fsmap_u;
+      fsmap_u.epoch = fsmap.get_epoch();
+      fsmap_u.legacy_client_fscid = fsmap.legacy_client_fscid;
+      for (auto p = fsmap.filesystems.begin();
+          p != fsmap.filesystems.end();
+          ++p) {
+       FSMapUser::fs_info_t& fs_info = fsmap_u.filesystems[p->first];
+       fs_info.cid = p->first;
+       fs_info.name= p->second->mds_map.fs_name;
+      }
+      sub->session->con->send_message(new MFSMapUser(mon->monmap->fsid, fsmap_u));
+      if (sub->onetime) {
+       mon->session_map.remove_sub(sub);
+      } else {
+       sub->next = fsmap.get_epoch() + 1;
+      }
+    }
+  } else if (sub->type.compare(0, 6, "mdsmap") == 0) {
     if (sub->next > fsmap.get_epoch()) {
       return;
     }
index 5014f4afc67359a157cd0e03cc4560576cf68030..10c8bfc1dc0c5f321b8e884d3ff81e15e49bdb0d 100644 (file)
@@ -4271,7 +4271,7 @@ void Monitor::handle_subscribe(MonOpRequestRef op)
                               p->second.flags & CEPH_SUBSCRIBE_ONETIME,
                               m->get_connection()->has_feature(CEPH_FEATURE_INCSUBOSDMAP));
 
-    if (p->first.find("mdsmap") == 0 || p->first == "fsmap") {
+    if (p->first.compare(0, 6, "mdsmap") == 0 || p->first.compare(0, 5, "fsmap") == 0) {
       dout(10) << __func__ << ": MDS sub '" << p->first << "'" << dendl;
       if ((int)s->is_capable("mds", MON_CAP_R)) {
         Subscription *sub = s->sub_map[p->first];