- addr=?
client leases
-- clean up readdir vs stat leases
- - esp on client.. keep mask/ttl and onetime_mask/onetime_ttl?
- - or just short leases?
- lease length heuristics
- - per-object leease durations in client_reply?
+ - mds lock last_change stamp?
- client: preemptively release lease on dentry we are unlinking, renaming from/to, etc.
- or inode fields we are chmodding, etc.
- lease renewals (to avoid blocking client ops?)
+- IFILE vs caps...
userspace client
- clean up ll_ interface, now that we have leases!
if (dn && dn->inode && (havemask & mask) == mask) {
dout(10) << "lstat cache hit w/ sufficient mask, valid until " << dn->inode->ttl << dendl;
-
- //if (g_conf.client_cache_stat_ttl == 0)
- //dn->inode->ttl = utime_t(); // only one stat allowed after each readdir
-
*in = dn->inode;
} else {
req = new MClientRequest(CEPH_MDS_OP_LSTAT, messenger->get_myinst());
return in->mask;
}
- /*
- S_REQUIREBLKSIZE(st->st_litemask);
- if (inode.mask & INODE_MASK_BASE) S_REQUIRECTIME(st->st_litemask);
- if (inode.mask & INODE_MASK_SIZE) {
- S_REQUIRESIZE(st->st_litemask);
- S_REQUIREBLOCKS(st->st_litemask);
- }
- if (inode.mask & INODE_MASK_MTIME) S_REQUIREMTIME(st->st_litemask);
- if (inode.mask & INODE_MASK_ATIME) S_REQUIREATIME(st->st_litemask);
- */
-
int Client::lstat(const char *relpath, struct stat *stbuf)
{