};
auto proc_nulls_and_waiters = [&](const string& str_key, const string_snap_t& key) {
bool touch = false;
+ int count = 0;
+
while (k_it != keys.rend()) {
int cmp = k_it->compare(str_key);
if (cmp < 0)
last_name = std::string_view(k_it->c_str(), n_key.name.length());
null_keys.emplace_back(std::move(n_key));
++k_it;
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace()))
+ mdcache->mds->heartbeat_reset();
}
return touch;
};
+ int count = 0;
unsigned pos = omap.size() - 1;
double rand_threshold = get_inode()->get_ephemeral_rand();
for (auto p = omap.rbegin(); p != omap.rend(); ++p, --pos) {
last_name = std::string_view(p->first.c_str(), key.name.length());
}
+ if (!(++count % mdcache->mds->heartbeat_reset_grace()))
+ mdcache->mds->heartbeat_reset();
+
CDentry *dn = nullptr;
try {
dn = _load_dentry(
dout(12) << "_fetched got null for key " << key << ", added " << *dn << dendl;
}
mdcache->touch_dentry(dn);
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace(2)))
+ mdcache->mds->heartbeat_reset();
}
}
// open & force frags
while (!undef_inodes.empty()) {
CInode *in = undef_inodes.front();
+
undef_inodes.pop_front();
in->state_clear(CInode::STATE_REJOINUNDEF);
mdcache->opened_undef_inode(in);
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace()))
+ mdcache->mds->heartbeat_reset();
}
// dirty myself to remove stale snap dentries
_rm.clear();
};
+ int count = 0;
for (auto &key : stales) {
unsigned size = key.length() + sizeof(__u32);
if (write_size + size > max_write_size)
write_size += size;
_rm.emplace(key);
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace(2)))
+ mdcache->mds->heartbeat_reset();
}
for (auto &key : to_remove) {
write_size += size;
_rm.emplace(std::move(key));
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace(2)))
+ mdcache->mds->heartbeat_reset();
}
bufferlist bl;
write_size += size;
_set[std::move(item.key)].swap(bl);
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace()))
+ mdcache->mds->heartbeat_reset();
}
commit_one(true);
}
};
+ int count = 0;
if (state_test(CDir::STATE_FRAGMENTING) && is_new()) {
ceph_assert(committed_version == 0);
for (auto p = items.begin(); p != items.end(); ) {
if (dn->get_linkage()->is_null())
continue;
write_one(dn);
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace()))
+ mdcache->mds->heartbeat_reset();
}
} else {
for (auto p = dirty_dentries.begin(); !p.end(); ) {
CDentry *dn = *p;
++p;
write_one(dn);
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace()))
+ mdcache->mds->heartbeat_reset();
}
}
if (committed_version == get_version())
mark_clean();
+ int count = 0;
+
// dentries clean?
for (auto p = dirty_dentries.begin(); !p.end(); ) {
CDentry *dn = *p;
dout(15) << " dir " << committed_version << " < dn " << dn->get_version() << " still dirty " << *dn << dendl;
ceph_assert(dn->is_dirty());
}
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace()))
+ mdcache->mds->heartbeat_reset();
}
// finishers?
bool were_waiters = !waiting_for_commit.empty();
-
+
auto it = waiting_for_commit.begin();
while (it != waiting_for_commit.end()) {
auto _it = it;
mdcache->mds->queue_waiters(t);
waiting_for_commit.erase(it);
it = _it;
- }
+
+ if (!(++count % mdcache->mds->heartbeat_reset_grace()))
+ mdcache->mds->heartbeat_reset();
+ }
// try drop dentries in this dirfrag if it's about to be purged
if (!inode->is_base() && get_parent_dir()->inode->is_stray() &&