int FSMap::parse_filesystem(
std::string const &ns_str,
- std::shared_ptr<Filesystem> *result
+ std::shared_ptr<const Filesystem> *result
) const
{
std::string ns_err;
if (!ns_err.empty() || filesystems.count(fscid) == 0) {
for (auto fs : filesystems) {
if (fs.second->mds_map.fs_name == ns_str) {
- *result = fs.second;
+ *result = std::const_pointer_cast<const Filesystem>(fs.second);
return 0;
}
}
epoch_t get_epoch() const { return epoch; }
void inc_epoch() { epoch++; }
- std::shared_ptr<Filesystem> get_filesystem(fs_cluster_id_t fscid) const
+ std::shared_ptr<const Filesystem> get_filesystem(fs_cluster_id_t fscid) const
{
- return filesystems.at(fscid);
+ return std::const_pointer_cast<const Filesystem>(filesystems.at(fscid));
}
int parse_filesystem(
std::string const &ns_str,
- std::shared_ptr<Filesystem> *result
+ std::shared_ptr<const Filesystem> *result
) const;
int parse_role(
return i->second.state;
}
- const mds_info_t& get_info(const mds_rank_t m) {
+ const mds_info_t& get_info(const mds_rank_t m) const {
return mds_info.at(up.at(m));
}
- const mds_info_t& get_info_gid(const mds_gid_t gid) {
+ const mds_info_t& get_info_gid(const mds_gid_t gid) const {
return mds_info.at(gid);
}
return -EINVAL;
}
- std::shared_ptr<Filesystem> fs = pending_fsmap.get_filesystem(role.fscid);
- assert(fs != nullptr);
+ pending_fsmap.modify_filesystem(
+ role.fscid,
+ [role](std::shared_ptr<Filesystem> fs)
+ {
+ fs->mds_map.failed.erase(role.rank);
+ });
- fs->mds_map.failed.erase(role.rank);
stringstream ss;
ss << "removed failed mds." << role;
return 0;
*osd_propose |= fail_mds_gid(gid);
// Promote the replacement
- const std::shared_ptr<Filesystem> fs = pending_fsmap.get_filesystem(fscid);
+ auto fs = pending_fsmap.filesystems.at(fscid);
pending_fsmap.promote(sgid, fs, info.rank);
*mds_propose = true;
dout(10) << "Applying tag filter: '" << filter_tag << "'" << dendl;
return true;
} else if (arg == std::string("--filesystem")) {
- std::shared_ptr<Filesystem> fs;
+ std::shared_ptr<const Filesystem> fs;
*r = fsmap->parse_filesystem(val, &fs);
if (*r != 0) {
std::cerr << "Invalid filesystem '" << val << "'" << std::endl;
} else {
const std::string ns_str = str.substr(0, colon_pos);
const std::string rank_str = str.substr(colon_pos + 1);
- std::shared_ptr<Filesystem> fs_ptr;
+ std::shared_ptr<const Filesystem> fs_ptr;
int r = fsmap.parse_filesystem(ns_str, &fs_ptr);
if (r != 0) {
return r;