Replicas have client_ranges defined too, but only the auth MDS should do
the file size/mtime recovery.
Also rename clear_client_caps_after_export() for clarity, and assert inode
is_auth throughout file recover code.
inode.atime = MAX(inode.atime, utime_t(icr.atime));
return cap;
}
- void clear_client_caps() {
+ void clear_client_caps_after_export() {
while (!client_caps.empty())
remove_client_cap(client_caps.begin()->first);
}
dout(10) << " revoking " << ccap_string(issued) << " on " << *in << dendl;
cap->revoke();
- if (in->inode.client_ranges.count(client))
+ if (in->is_auth() &&
+ in->inode.client_ranges.count(client))
in->state_set(CInode::STATE_NEEDSRECOVER);
if (!in->filelock.is_stable()) eval_gather(&in->filelock);
void MDCache::queue_file_recover(CInode *in)
{
dout(10) << "queue_file_recover " << *in << dendl;
+ assert(in->is_auth());
// cow?
SnapRealm *realm = in->find_snaprealm();
void MDCache::_queue_file_recover(CInode *in)
{
dout(15) << "_queue_file_recover " << *in << dendl;
+ assert(in->is_auth());
in->state_clear(CInode::STATE_NEEDSRECOVER);
in->state_set(CInode::STATE_RECOVERING);
in->auth_pin(this);
cap->get_mseq());
mds->send_message_client(m, it->first);
}
- in->clear_client_caps();
+ in->clear_client_caps_after_export();
}
void Migrator::finish_export_inode(CInode *in, utime_t now, list<Context*>& finished)