[Gluster-devel] Report ESTALE as ENOENT
Soumya Koduri
skoduri at redhat.com
Thu Mar 24 14:31:21 UTC 2016
Thanks for the information.
On 03/24/2016 07:34 PM, FNU Raghavendra Manjunath wrote:
>
> Yes. I think the caching example mentioned by Shyam is a good example of
> ESTALE error. Also User Serviceable Snapshots (USS) relies heavily on
> ESTALE errors. Because the files/directories from the snapshots are
> assigned a virtual gfid on the fly when being looked up. If those inodes
> are purged out of the inode table due to lru list becoming full, then a
> access to that gfid from the client, will make snapview-server send
> ESTALE and either fuse (I think our fuse xlator does a revalidate upon
> getting ESTALE) or NFS client can revalidate via path based resolution.
So wouldn't it be wrong not to send ESTALE to NFS-clients and map it to
ENOENT, as was intended in the original mail.
NFSv3 rfc [1] mentions that NFS3ERR_STALE is a valid error for REMOVE fop.
Also (at least in gfapi) the resolve code path doesn't seem to be
honoring ESTALE errors - glfs_resolve_component(..),
glfs_refresh_inode_safe(..) etc.. Do we need to fix them?
Thanks,
Soumya
[1] https://www.ietf.org/rfc/rfc1813.txt (section# 3.3.12)
>
> Regards,
> Raghavendra
>
>
> On Thu, Mar 24, 2016 at 9:51 AM, Shyam <srangana at redhat.com
> <mailto:srangana at redhat.com>> wrote:
>
> On 03/23/2016 12:07 PM, Ravishankar N wrote:
>
> On 03/23/2016 09:16 PM, Soumya Koduri wrote:
>
> If it occurs only when the file/dir is not actually present
> at the
> back-end, shouldn't we fix the server to send ENOENT then?
>
> I never fully understood it here is the answer:
> http://review.gluster.org/#/c/6318/
>
>
> The intention of ESTALE is to state that the inode#/GFID is stale,
> when using that for any operations. IOW, we did not find the GFID in
> the backend, that does not mean the name is not present. This hence
> means, if you have a pGFID+bname, try resolving with that.
>
> For example, a client side cache can hang onto a GFID for a bname,
> but another client could have, in the interim, unlinked the bname
> and create a new file there.
>
> A presence test using GFID by the client that cached the result the
> first time, is an ESTALE. But a resolution based on pGFID+bname
> again by the same client would be a success.
>
> By extension, a GFID based resolution, when not really present in
> the backend will return ESTALE, it could very well mean ENOENT, but
> that has to be determined by the client again, if possible.
>
> See "A10. What does it mean when my application fails because of an
> ESTALE error?" for NFS here [1] and [2] (there maybe better sources
> for this information)
>
> [1] http://nfs.sourceforge.net/
> [2] https://lwn.net/Articles/272684/
>
>
>
> _______________________________________________
> Gluster-devel mailing list
> Gluster-devel at gluster.org <mailto:Gluster-devel at gluster.org>
> http://www.gluster.org/mailman/listinfo/gluster-devel
>
> _______________________________________________
> Gluster-devel mailing list
> Gluster-devel at gluster.org <mailto:Gluster-devel at gluster.org>
> http://www.gluster.org/mailman/listinfo/gluster-devel
>
>
More information about the Gluster-devel
mailing list