int k = 20;
for (auto i : mds_map_instances) {
- auto fs = std::make_shared<Filesystem>();
+ auto fs = Filesystem::create();
fs->fscid = k++;
fs->mds_map = *i;
delete i;
}
-std::shared_ptr<Filesystem> FSMap::create_filesystem(std::string_view name,
+Filesystem::ref FSMap::create_filesystem(std::string_view name,
int64_t metadata_pool, int64_t data_pool, uint64_t features)
{
- auto fs = std::make_shared<Filesystem>();
+ auto fs = Filesystem::create();
fs->mds_map.epoch = epoch;
fs->mds_map.fs_name = name;
fs->mds_map.data_pools.push_back(data_pool);
void FSMap::reset_filesystem(fs_cluster_id_t fscid)
{
auto fs = get_filesystem(fscid);
- auto new_fs = std::make_shared<Filesystem>();
+ auto new_fs = Filesystem::create();
// Populate rank 0 as existing (so don't go into CREATING)
// but failed (so that next available MDS is assigned the rank)
// Synthesise a Filesystem from legacy_mds_map, if enabled
if (legacy_mds_map.enabled) {
// Construct a Filesystem from the legacy MDSMap
- auto migrate_fs = std::make_shared<Filesystem>();
+ auto migrate_fs = Filesystem::create();
migrate_fs->fscid = FS_CLUSTER_ID_ANONYMOUS;
migrate_fs->mds_map = legacy_mds_map;
migrate_fs->mds_map.epoch = epoch;
decode(fs_list, p);
filesystems.clear();
for (std::vector<Filesystem>::const_iterator fs = fs_list.begin(); fs != fs_list.end(); ++fs) {
- filesystems[fs->fscid] = std::make_shared<Filesystem>(*fs);
+ filesystems[fs->fscid] = Filesystem::create(*fs);
}
decode(mds_roles, p);
int FSMap::parse_filesystem(
std::string_view ns_str,
- std::shared_ptr<const Filesystem> *result
+ Filesystem::const_ref* result
) const
{
std::string ns_err;
void FSMap::promote(
mds_gid_t standby_gid,
- const std::shared_ptr<Filesystem> &filesystem,
+ const Filesystem::ref& filesystem,
mds_rank_t assigned_rank)
{
ceph_assert(gid_exists(standby_gid));
{
size_t colon_pos = role_str.find(":");
size_t rank_pos;
- std::shared_ptr<const Filesystem> fs;
+ Filesystem::const_ref fs;
if (colon_pos == std::string::npos) {
if (legacy_client_fscid == FS_CLUSTER_ID_NONE) {
ss << "No filesystem selected";
class Filesystem
{
public:
+ using ref = std::shared_ptr<Filesystem>;
+ using const_ref = std::shared_ptr<Filesystem const>;
+
+ template<typename... Args>
+ static ref create(Args&&... args)
+ {
+ return std::make_shared<Filesystem>(std::forward<Args>(args)...);
+ }
+
void encode(bufferlist& bl, uint64_t features) const;
void decode(bufferlist::const_iterator& p);
bool enable_multiple = false;
bool ever_enabled_multiple = false; // < the cluster had multiple MDSes enabled once
- std::map<fs_cluster_id_t, std::shared_ptr<Filesystem> > filesystems;
+ std::map<fs_cluster_id_t, Filesystem::ref> filesystems;
// Remember which Filesystem an MDS daemon's info is stored in
// (or in standby_daemons for FS_CLUSTER_ID_NONE)
*/
void promote(
mds_gid_t standby_gid,
- const std::shared_ptr<Filesystem> &filesystem,
+ const Filesystem::ref& filesystem,
mds_rank_t assigned_rank);
/**
* Caller must already have validated all arguments vs. the existing
* FSMap and OSDMap contents.
*/
- std::shared_ptr<Filesystem> create_filesystem(
+ Filesystem::ref create_filesystem(
std::string_view name, int64_t metadata_pool,
int64_t data_pool, uint64_t features);
*/
void modify_filesystem(
const fs_cluster_id_t fscid,
- std::function<void(std::shared_ptr<Filesystem> )> fn)
+ std::function<void(Filesystem::ref)> fn)
{
auto fs = filesystems.at(fscid);
fn(fs);
}
}
- std::shared_ptr<const Filesystem> get_legacy_filesystem()
+ Filesystem::const_ref get_legacy_filesystem()
{
if (legacy_client_fscid == FS_CLUSTER_ID_NONE) {
return nullptr;
void update_export_targets(mds_gid_t who, const std::set<mds_rank_t> &targets)
{
auto fscid = mds_roles.at(who);
- modify_filesystem(fscid, [who, &targets](std::shared_ptr<Filesystem> fs) {
+ modify_filesystem(fscid, [who, &targets](auto fs) {
fs->mds_map.mds_info.at(who).export_targets = targets;
});
}
size_t filesystem_count() const {return filesystems.size();}
bool filesystem_exists(fs_cluster_id_t fscid) const {return filesystems.count(fscid) > 0;}
- std::shared_ptr<const Filesystem> get_filesystem(fs_cluster_id_t fscid) const {return std::const_pointer_cast<const Filesystem>(filesystems.at(fscid));}
- std::shared_ptr<Filesystem> get_filesystem(fs_cluster_id_t fscid) {return filesystems.at(fscid);}
- std::shared_ptr<const Filesystem> get_filesystem(void) const {return std::const_pointer_cast<const Filesystem>(filesystems.begin()->second);}
- std::shared_ptr<const Filesystem> get_filesystem(std::string_view name) const
+ Filesystem::const_ref get_filesystem(fs_cluster_id_t fscid) const {return std::const_pointer_cast<const Filesystem>(filesystems.at(fscid));}
+ Filesystem::ref get_filesystem(fs_cluster_id_t fscid) {return filesystems.at(fscid);}
+ Filesystem::const_ref get_filesystem(void) const {return std::const_pointer_cast<const Filesystem>(filesystems.begin()->second);}
+ Filesystem::const_ref get_filesystem(std::string_view name) const
{
- for (const auto &i : filesystems) {
- if (i.second->mds_map.fs_name == name) {
- return std::const_pointer_cast<const Filesystem>(i.second);
+ for (const auto& p : filesystems) {
+ if (p.second->mds_map.fs_name == name) {
+ return p.second;
}
}
return nullptr;
}
- std::list<std::shared_ptr<const Filesystem> > get_filesystems(void) const
- {
- std::list<std::shared_ptr<const Filesystem> > ret;
- for (const auto &i : filesystems) {
- ret.push_back(std::const_pointer_cast<const Filesystem>(i.second));
- }
- return ret;
+ std::vector<Filesystem::const_ref> get_filesystems(void) const
+ {
+ std::vector<Filesystem::const_ref> ret;
+ for (const auto& p : filesystems) {
+ ret.push_back(p.second);
}
+ return ret;
+ }
int parse_filesystem(
std::string_view ns_str,
- std::shared_ptr<const Filesystem> *result
+ Filesystem::const_ref *result
) const;
int parse_role(