#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"
// 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;
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;
}
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];