vector<string> &&r,
mempool::mds_co::compact_set<mempool::mds_co::string> &&stales) :
dir(d), op_prio(pr) {
- metapool = dir->mdcache->mds->mdsmap->get_metadata_pool();
+ metapool = dir->mdcache->mds->get_metadata_pool();
version = dir->get_version();
is_new = dir->is_new();
to_set.swap(s);
m.write_full(bl);
object_t oid = CInode::get_object_name(ino(), frag_t(), ".inode");
- object_locator_t oloc(mdcache->mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mdcache->mds->get_metadata_pool());
Context *newfin =
new C_OnFinisher(new C_IO_Inode_Stored(this, get_version(), fin),
C_GatherBuilder gather(g_ceph_context, new C_OnFinisher(c, mdcache->mds->finisher));
object_t oid = CInode::get_object_name(ino(), frag_t(), "");
- object_locator_t oloc(mdcache->mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mdcache->mds->get_metadata_pool());
// Old on-disk format: inode stored in xattr of a dirfrag
ObjectOperation rd;
int64_t CInode::get_backtrace_pool() const
{
if (is_dir()) {
- return mdcache->mds->mdsmap->get_metadata_pool();
+ return mdcache->mds->get_metadata_pool();
} else {
// Files are required to have an explicit layout that specifies
// a pool
/* we assume that balancer is in the metadata pool */
object_t oid = object_t(mds->mdsmap->get_balancer());
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
ceph_tid_t tid = mds->objecter->read(oid, oloc, 0, 0, CEPH_NOSNAP, &lua_src, 0,
new C_SafeCond(lock, cond, &ack, &r));
dout(15) << "launched non-blocking read tid=" << tid
dout(10) << "open_remote_dentry " << *dn << dendl;
CDentry::linkage_t *dnl = projected ? dn->get_projected_linkage() : dn->get_linkage();
inodeno_t ino = dnl->get_remote_ino();
- int64_t pool = dnl->get_remote_d_type() == DT_DIR ? mds->mdsmap->get_metadata_pool() : -1;
+ int64_t pool = dnl->get_remote_d_type() == DT_DIR ? mds->get_metadata_pool() : -1;
open_ino(ino, pool,
new C_MDC_OpenRemoteDentry(this, dn, ino, fin, want_xlocked), true, want_xlocked); // backtrace
}
return;
}
} else if (err == -CEPHFS_ENOENT) {
- int64_t meta_pool = mds->mdsmap->get_metadata_pool();
+ int64_t meta_pool = mds->get_metadata_pool();
if (info.pool != meta_pool) {
dout(10) << " no object in pool " << info.pool
<< ", retrying pool " << meta_pool << dendl;
} else {
ceph_assert(!info.ancestors.empty());
info.checking = mds->get_nodeid();
- open_ino(info.ancestors[0].dirino, mds->mdsmap->get_metadata_pool(),
+ open_ino(info.ancestors[0].dirino, mds->get_metadata_pool(),
new C_MDC_OpenInoParentOpened(this, ino), info.want_replica);
}
}
mds->finisher));
SnapContext nullsnapc;
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
for (const auto& fg : uf.old_frags) {
object_t oid = CInode::get_object_name(basedirfrag.ino, fg, "");
ObjectOperation op;
// Instantiate Journaler and start async write to RADOS
ceph_assert(journaler == NULL);
- journaler = new Journaler("mdlog", ino, mds->mdsmap->get_metadata_pool(),
+ journaler = new Journaler("mdlog", ino, mds->get_metadata_pool(),
CEPH_FS_ONDISK_MAGIC, mds->objecter, logger,
l_mdl_jlat, mds->finisher);
ceph_assert(journaler->is_readonly());
journaler->write_head(gather.new_sub());
// Async write JournalPointer to RADOS
- JournalPointer jp(mds->get_nodeid(), mds->mdsmap->get_metadata_pool());
+ JournalPointer jp(mds->get_nodeid(), mds->get_metadata_pool());
jp.front = ino;
jp.back = 0;
jp.save(mds->objecter, gather.new_sub());
// First, read the pointer object.
// If the pointer object is not present, then create it with
// front = default ino and back = null
- JournalPointer jp(mds->get_nodeid(), mds->mdsmap->get_metadata_pool());
+ JournalPointer jp(mds->get_nodeid(), mds->get_metadata_pool());
const int read_result = jp.load(mds->objecter);
if (read_result == -CEPHFS_ENOENT) {
inodeno_t const default_log_ino = MDS_INO_LOG_OFFSET + mds->get_nodeid();
}
dout(1) << "Erasing journal " << jp.back << dendl;
C_SaferCond erase_waiter;
- Journaler back("mdlog", jp.back, mds->mdsmap->get_metadata_pool(),
+ Journaler back("mdlog", jp.back, mds->get_metadata_pool(),
CEPH_FS_ONDISK_MAGIC, mds->objecter, logger, l_mdl_jlat,
mds->finisher);
/* Read the header from the front journal */
Journaler *front_journal = new Journaler("mdlog", jp.front,
- mds->mdsmap->get_metadata_pool(), CEPH_FS_ONDISK_MAGIC, mds->objecter,
+ mds->get_metadata_pool(), CEPH_FS_ONDISK_MAGIC, mds->objecter,
logger, l_mdl_jlat, mds->finisher);
// Assign to ::journaler so that we can be aborted by ::shutdown while
/* Create the new Journaler file */
Journaler *new_journal = new Journaler("mdlog", jp.back,
- mds->mdsmap->get_metadata_pool(), CEPH_FS_ONDISK_MAGIC, mds->objecter, logger, l_mdl_jlat, mds->finisher);
+ mds->get_metadata_pool(), CEPH_FS_ONDISK_MAGIC, mds->objecter, logger, l_mdl_jlat, mds->finisher);
dout(4) << "Writing new journal header " << jp.back << dendl;
file_layout_t new_layout = old_journal->get_layout();
new_journal->set_writeable();
{
hb = g_ceph_context->get_heartbeat_map()->add_worker("MDSRank", pthread_self());
+ // The metadata pool won't change in the whole life time
+ // of the fs, with this we can get rid of the mds_lock
+ // in many places too.
+ metadata_pool = mdsmap->get_metadata_pool();
+
purge_queue.update_op_limit(*mdsmap);
objecter->unset_honor_pool_full();
}
};
-int64_t MDSRank::get_metadata_pool()
-{
- return mdsmap->get_metadata_pool();
-}
-
MDSTableClient *MDSRank::get_table_client(int t)
{
switch (t) {
mds_rank_t get_nodeid() const { return whoami; }
std::string_view get_fs_name() const { return fs_name; }
- int64_t get_metadata_pool();
+ int64_t get_metadata_pool() const
+ {
+ return metadata_pool;
+ }
mono_time get_starttime() const {
return starttime;
private:
bool send_status = true;
+ // The metadata pool won't change in the whole life time of the fs,
+ // with this we can get rid of the mds_lock in many places too.
+ int64_t metadata_pool = -1;
+
// "task" string that gets displayed in ceph status
inline static const std::string SCRUB_STATUS_KEY = "scrub status";
// write (async)
SnapContext snapc;
object_t oid = get_object_name();
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
mds->objecter->write_full(oid, oloc,
snapc,
bl, ceph::real_clock::now(), 0,
C_IO_MT_Load *c = new C_IO_MT_Load(this, onfinish);
object_t oid = get_object_name();
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
mds->objecter->read_full(oid, oloc, CEPH_NOSNAP, &c->bl, 0,
new C_OnFinisher(c, mds->finisher));
}
new C_OnFinisher(new C_IO_OFT_Save(this, log_seq, c),
mds->finisher));
SnapContext snapc;
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
for (auto& [idx, vops] : ops_map) {
object_t oid = get_object_name(idx);
for (auto& op : vops) {
C_GatherBuilder gather(g_ceph_context);
SnapContext snapc;
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
const unsigned max_write_size = mds->mdcache->max_dir_commit_size;
{
object_t oid = get_object_name(idx);
dout(10) << __func__ << ": load from '" << oid << ":" << key << "'" << dendl;
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
C_IO_OFT_Load *c = new C_IO_OFT_Load(this, idx, first);
ObjectOperation op;
if (first)
C_GatherBuilder gather(g_ceph_context,
new C_OnFinisher(new C_IO_OFT_Recover(this),
mds->finisher));
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
SnapContext snapc;
for (unsigned omap_idx = 0; omap_idx < loaded_journals.size(); omap_idx++) {
int64_t pool;
if (prefetch_state == DIR_INODES)
- pool = mds->mdsmap->get_metadata_pool();
+ pool = mds->get_metadata_pool();
else if (prefetch_state == FILE_INODES)
pool = mds->mdsmap->get_first_data_pool();
else
* using osdmap_full_flag(), because we want to know "is the flag set"
* rather than "does the flag apply to us?" */
mds->objecter->with_osdmap([this](const OSDMap& o) {
- auto pi = o.get_pg_pool(mds->mdsmap->get_metadata_pool());
+ auto pi = o.get_pg_pool(mds->get_metadata_pool());
is_full = pi && pi->has_flag(pg_pool_t::FLAG_FULL);
dout(7) << __func__ << ": full = " << is_full << " epoch = "
<< o.get_epoch() << dendl;
if (parent_ino) {
diri = mdcache->get_inode(parent_ino);
if (!diri) {
- mdcache->open_ino(parent_ino, mds->mdsmap->get_metadata_pool(), new C_MDS_LookupIno2(this, mdr));
+ mdcache->open_ino(parent_ino, mds->get_metadata_pool(), new C_MDS_LookupIno2(this, mdr));
return;
}
respond_to_request(mdr, -CEPHFS_ESTALE);
} else {
- mdcache->open_ino(vino.ino, mds->mdsmap->get_metadata_pool(), new C_MDS_LookupIno2(this, mdr), false);
+ mdcache->open_ino(vino.ino, mds->get_metadata_pool(), new C_MDS_LookupIno2(this, mdr), false);
}
}
dout(10) << __func__ << ": continue omap load from '"
<< last_key << "'" << dendl;
object_t oid = get_object_name();
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
C_IO_SM_Load *c = new C_IO_SM_Load(this, false);
ObjectOperation op;
op.omap_get_vals(last_key, "", g_conf()->mds_sessionmap_keys_per_op,
C_IO_SM_Load *c = new C_IO_SM_Load(this, true);
object_t oid = get_object_name();
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
ObjectOperation op;
op.omap_get_header(&c->header_bl, &c->header_r);
C_IO_SM_LoadLegacy *c = new C_IO_SM_LoadLegacy(this);
object_t oid = get_object_name();
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
mds->objecter->read_full(oid, oloc, CEPH_NOSNAP, &c->bl, 0,
new C_OnFinisher(c, mds->finisher));
committing = version;
SnapContext snapc;
object_t oid = get_object_name();
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
ObjectOperation op;
SnapContext snapc;
object_t oid = get_object_name();
- object_locator_t oloc(mds->mdsmap->get_metadata_pool());
+ object_locator_t oloc(mds->get_metadata_pool());
MDSContext *on_safe = gather_bld->new_sub();
mds->objecter->mutate(oid, oloc, op, snapc,
ceph::real_clock::now(), 0,