Skip to content

Commit

Permalink
Merge pull request #54716 from batrick/wip-63676-reef
Browse files Browse the repository at this point in the history
reef: mds: revert standby-replay trimming changes

Reviewed-by: Milind Changire <mchangir@redhat.com>
  • Loading branch information
yuriw committed Feb 5, 2024
2 parents 54e9ba9 + 435747b commit 05a8d61
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 39 deletions.
4 changes: 0 additions & 4 deletions src/include/lru.h
Original file line number Diff line number Diff line change
Expand Up @@ -185,10 +185,6 @@ class LRU {
return NULL;
}

void lru_status() {
//generic_dout(10) << "lru: " << lru_get_size() << " items, " << top.size() << " top, " << bottom.size() << " bot, " << pintail.size() << " pintail" << dendl;
}

protected:
// adjust top/bot balance, as necessary
void adjust() {
Expand Down
55 changes: 20 additions & 35 deletions src/mds/MDCache.cc
Original file line number Diff line number Diff line change
Expand Up @@ -6784,6 +6784,13 @@ std::pair<bool, uint64_t> MDCache::trim_lru(uint64_t count, expiremap& expiremap
<< " pinned=" << lru.lru_get_num_pinned()
<< dendl;

dout(20) << "bottom_lru: " << bottom_lru.lru_get_size() << " items"
", " << bottom_lru.lru_get_top() << " top"
", " << bottom_lru.lru_get_bot() << " bot"
", " << bottom_lru.lru_get_pintail() << " pintail"
", " << bottom_lru.lru_get_num_pinned() << " pinned"
<< dendl;

const uint64_t trim_counter_start = trim_counter.get();
bool throttled = false;
while (1) {
Expand All @@ -6804,20 +6811,25 @@ std::pair<bool, uint64_t> MDCache::trim_lru(uint64_t count, expiremap& expiremap
}
unexpirables.clear();

dout(20) << "lru: " << lru.lru_get_size() << " items"
", " << lru.lru_get_top() << " top"
", " << lru.lru_get_bot() << " bot"
", " << lru.lru_get_pintail() << " pintail"
", " << lru.lru_get_num_pinned() << " pinned"
<< dendl;

// trim dentries from the LRU until count is reached
// if mds is in standby_replay and skip trimming the inodes
while (!throttled && (cache_toofull() || count > 0 || is_standby_replay)) {
while (!throttled && (cache_toofull() || count > 0)) {
throttled |= trim_counter_start+trimmed >= trim_threshold;
if (throttled) break;
CDentry *dn = static_cast<CDentry*>(lru.lru_expire());
if (!dn) {
break;
}
if (is_standby_replay && dn->get_linkage()->inode) {
// we move the inodes that need to be trimmed to the end of the lru queue.
// refer to MDCache::standby_trim_segment
lru.lru_insert_bot(dn);
break;
if ((is_standby_replay && dn->get_linkage()->inode &&
dn->get_linkage()->inode->item_open_file.is_on_list())) {
dout(20) << "unexpirable: " << *dn << dendl;
unexpirables.push_back(dn);
} else if (trim_dentry(dn, expiremap)) {
unexpirables.push_back(dn);
} else {
Expand Down Expand Up @@ -7463,69 +7475,42 @@ void MDCache::try_trim_non_auth_subtree(CDir *dir)

void MDCache::standby_trim_segment(LogSegment *ls)
{
auto try_trim_inode = [this](CInode *in) {
if (in->get_num_ref() == 0 &&
!in->item_open_file.is_on_list() &&
in->parent != NULL &&
in->parent->get_num_ref() == 0){
touch_dentry_bottom(in->parent);
}
};

auto try_trim_dentry = [this](CDentry *dn) {
if (dn->get_num_ref() > 0)
return;
auto in = dn->get_linkage()->inode;
if(in && in->item_open_file.is_on_list())
return;
touch_dentry_bottom(dn);
};

ls->new_dirfrags.clear_list();
ls->open_files.clear_list();

while (!ls->dirty_dirfrags.empty()) {
CDir *dir = ls->dirty_dirfrags.front();
dir->mark_clean();
if (dir->inode)
try_trim_inode(dir->inode);
}
while (!ls->dirty_inodes.empty()) {
CInode *in = ls->dirty_inodes.front();
in->mark_clean();
try_trim_inode(in);
}
while (!ls->dirty_dentries.empty()) {
CDentry *dn = ls->dirty_dentries.front();
dn->mark_clean();
try_trim_dentry(dn);
}
while (!ls->dirty_parent_inodes.empty()) {
CInode *in = ls->dirty_parent_inodes.front();
in->clear_dirty_parent();
try_trim_inode(in);
}
while (!ls->dirty_dirfrag_dir.empty()) {
CInode *in = ls->dirty_dirfrag_dir.front();
in->filelock.remove_dirty();
try_trim_inode(in);
}
while (!ls->dirty_dirfrag_nest.empty()) {
CInode *in = ls->dirty_dirfrag_nest.front();
in->nestlock.remove_dirty();
try_trim_inode(in);
}
while (!ls->dirty_dirfrag_dirfragtree.empty()) {
CInode *in = ls->dirty_dirfrag_dirfragtree.front();
in->dirfragtreelock.remove_dirty();
try_trim_inode(in);
}
while (!ls->truncating_inodes.empty()) {
auto it = ls->truncating_inodes.begin();
CInode *in = *it;
ls->truncating_inodes.erase(it);
in->put(CInode::PIN_TRUNCATING);
try_trim_inode(in);
}
}

Expand Down Expand Up @@ -13512,7 +13497,7 @@ void MDCache::upkeep_main(void)
if (active_with_clients) {
trim_client_leases();
}
if (is_open()) {
if (is_open() || mds->is_standby_replay()) {
trim();
}
if (active_with_clients) {
Expand Down

0 comments on commit 05a8d61

Please sign in to comment.