From: Yanhu Cao Date: Tue, 16 Jun 2020 06:07:26 +0000 (+0800) Subject: mds: reset heartbeat in EMetaBlob replay X-Git-Tag: v16.1.0~1942^2 X-Git-Url: http://git-server-git.apps.pok.os.sepia.ceph.com/?a=commitdiff_plain;h=07031a0de9654e029fc5063899c2d9394c7f4668;p=ceph.git mds: reset heartbeat in EMetaBlob replay Fixes: https://tracker.ceph.com/issues/46042 Signed-off-by: Yanhu Cao --- diff --git a/src/mds/journal.cc b/src/mds/journal.cc index ac25fe19cc65..92b71eb5d30d 100644 --- a/src/mds/journal.cc +++ b/src/mds/journal.cc @@ -1135,6 +1135,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]; @@ -1286,6 +1287,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 @@ -1317,6 +1321,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 @@ -1352,6 +1359,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(); } } @@ -1382,6 +1392,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(); } } @@ -1411,6 +1424,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(); } } @@ -1421,6 +1437,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(); } } @@ -1436,6 +1455,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(); } } @@ -1446,6 +1468,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? @@ -1532,6 +1557,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); @@ -1540,6 +1568,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 @@ -1559,6 +1590,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); } @@ -1578,6 +1612,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) session->trim_completed_requests(p.second); } } + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // client flushes @@ -1591,6 +1628,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) session->trim_completed_flushes(p.second); } } + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // update segment