X-Git-Url: https://git.proxmox.com/?a=blobdiff_plain;f=ceph%2Fsrc%2Fmds%2Fjournal.cc;h=70face21f1c53bdc15033e2932d96a287f6f1aa2;hb=f6b5b4d738b87d88d2de35127b6b0e41eae2a272;hp=ac25fe19cc65939476bd974aec3ae8bbefc6fd4e;hpb=12732ca2e80d168d344a265acffc1fbd1fa1f1b5;p=ceph.git diff --git a/ceph/src/mds/journal.cc b/ceph/src/mds/journal.cc index ac25fe19c..70face21f 100644 --- a/ceph/src/mds/journal.cc +++ b/ceph/src/mds/journal.cc @@ -526,8 +526,14 @@ void EMetaBlob::fullbit::update_inode(MDSRank *mds, CInode *in) { in->inode = inode; in->xattrs = xattrs; - in->maybe_export_pin(); if (in->inode.is_dir()) { + if (is_export_ephemeral_random()) { + dout(15) << "random ephemeral pin on " << *in << dendl; + in->set_ephemeral_rand(true); + in->maybe_ephemeral_rand(true); + } + in->maybe_ephemeral_dist(); + in->maybe_export_pin(); if (!(in->dirfragtree == dirfragtree)) { dout(10) << "EMetaBlob::fullbit::update_inode dft " << in->dirfragtree << " -> " << dirfragtree << " on " << *in << dendl; @@ -1135,6 +1141,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 +1293,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 +1327,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 +1365,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 +1398,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 +1430,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 +1443,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 +1461,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 +1474,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 +1563,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 +1574,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 +1596,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 +1618,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 +1634,9 @@ void EMetaBlob::replay(MDSRank *mds, LogSegment *logseg, MDSlaveUpdate *slaveup) session->trim_completed_flushes(p.second); } } + + if (!(++count % 1000)) + mds->heartbeat_reset(); } // update segment