}
}
+ int count = 0;
unsigned pos = omap.size() - 1;
double rand_threshold = get_inode()->get_ephemeral_rand();
for (map<string, bufferlist>::reverse_iterator p = omap.rbegin();
snapid_t last;
dentry_key_t::decode_helper(p->first, dname, last);
+ if (!(++count % mdcache->mds->heartbeat_reset_grace(2)))
+ mdcache->mds->heartbeat_reset();
+
CDentry *dn = NULL;
try {
dn = _load_dentry(
if (wanted_items.count(mempool::mds_co::string(dname)) > 0 || !complete) {
dout(10) << " touching wanted dn " << *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);
// fnode.snap_purged_thru = realm->get_last_destroyed();
}
- size_t count = 0;
+ size_t items_count = 0;
if (state_test(CDir::STATE_FRAGMENTING) && is_new()) {
- count = get_num_head_items() + get_num_snap_items();
+ items_count = get_num_head_items() + get_num_snap_items();
} else {
for (elist<CDentry*>::iterator it = dirty_dentries.begin(); !it.end(); ++it)
- ++count;
+ ++items_count;
}
vector<string> to_remove;
// reverve enough memories, which maybe larger than the actually needed
- to_remove.reserve(count);
+ to_remove.reserve(items_count);
vector<dentry_commit_item> to_set;
// reverve enough memories, which maybe larger than the actually needed
- to_set.reserve(count);
+ to_set.reserve(items_count);
// for dir fragtrees
bufferlist dfts(CEPH_PAGE_SIZE);
}
};
+ 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() &&