From 2ae07a8ad7e874b5dbd180c614b0cb1462ab55e9 Mon Sep 17 00:00:00 2001 From: Yanhu Cao Date: Tue, 16 Jun 2020 14:07:26 +0800 Subject: [PATCH] mds: reset heartbeat in EMetaBlob replay Fixes: https://tracker.ceph.com/issues/46042 Signed-off-by: Yanhu Cao (cherry picked from commit 07031a0de9654e029fc5063899c2d9394c7f4668) --- src/mds/journal.cc | 40 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) diff --git a/src/mds/journal.cc b/src/mds/journal.cc index b9ef6acab8990..3eb24af2fed3b 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -1133,6 +1133,7 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) set linked; // walk through my dirs (in order!) + int count = 0; for (const auto& lp : lump_order) { dout(10) << "EMetaBlob.replay dir " << lp << dendl; dirlump &lump = lump_map[lp]; @@ -1284,6 +1285,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) else in->state_clear(CInode::STATE_AUTH); ceph_assert(g_conf()->mds_kill_journal_replay_at != 2); + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // remote dentries @@ -1315,6 +1319,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) } if (lump.is_importing()) dn->state_set(CDentry::STATE_AUTH); + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // null dentries @@ -1350,6 +1357,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) // Make null dentries the first things we trim dout(10) << "EMetaBlob.replay pushing to bottom of lru " << *dn << dendl; + + if (!(++count % 1000)) + mds->heartbeat_reset(); } } @@ -1380,6 +1390,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) slaveup->olddirs.insert(dir->inode); else dir->state_set(CDir::STATE_AUTH); + + if (!(++count % 1000)) + mds->heartbeat_reset(); } } @@ -1409,6 +1422,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) dout(10) << " creating new rename import bound " << *dir << dendl; dir->state_clear(CDir::STATE_AUTH); mds->mdcache->adjust_subtree_auth(dir, CDIR_AUTH_UNDEF); + + if (!(++count % 1000)) + mds->heartbeat_reset(); } } @@ -1419,6 +1435,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) continue; ceph_assert(p->first->is_dir()); mds->mdcache->adjust_subtree_after_rename(p->first, p->second, false); + + if (!(++count % 1000)) + mds->heartbeat_reset(); } } @@ -1434,6 +1453,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) in->snaprealm->adjust_parent(); } else mds->mdcache->remove_inode_recursive(in); + + if (!(++count % 1000)) + mds->heartbeat_reset(); } } @@ -1444,6 +1466,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) MDSTableClient *client = mds->get_table_client(p.first); if (client) client->got_journaled_agree(p.second, logseg); + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // opened ino? @@ -1534,6 +1559,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) CInode *in = mds->mdcache->get_inode(ino); ceph_assert(in); mds->mdcache->add_recovered_truncate(in, logseg); + + if (!(++count % 1000)) + mds->heartbeat_reset(); } for (const auto& p : truncate_finish) { LogSegment *ls = mds->mdlog->get_segment(p.second); @@ -1542,6 +1570,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) ceph_assert(in); mds->mdcache->remove_recovered_truncate(in, ls); } + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // destroyed inodes @@ -1561,6 +1592,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) } else { dout(10) << "EMetaBlob.replay destroyed " << *p << ", not in cache" << dendl; } + + if (!(++count % 1000)) + mds->heartbeat_reset(); } mds->mdcache->open_file_table.note_destroyed_inos(logseg->seq, destroyed_inodes); } @@ -1580,6 +1614,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) session->trim_completed_requests(p.second); } } + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // client flushes @@ -1593,6 +1630,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) session->trim_completed_flushes(p.second); } } + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // update segment -- 2.39.5