2011-03-15 15:30:49

by DENIEL Philippe

[permalink] [raw]
Subject: NFSv4 and NFSv4.1 client recovery

Hi,

as you may know, I am working on a NFS server in user space called
nfs-ganesha. One of the feature of nfs-ganesha is its capability of
being used as a NFSv4 proxy. This is implemented as a backend in
nfs-ganesha : all the filesystem that nfs-ganesha can export have a
dedicated module with a well known API (this module is called FSAL for
File System Abstraction layer). The proxy feature is made by make a FSAL
library that is a NFSv4 basic client (each of the FSAL functions calls
wrap one or more NFSv4 request). The trouble is the case when the remote
server (the one accessed by the proxy operating as a client via FSAL
calls) crashes : the client inside the FSAL needs to recover to the
remote server as it comes back to work. My question is : what is the
simpliest way for my user space client to recover ? I must precise it
make no delegation and use only a forechannel to the remote server.
There is no backchannel.

Regards

Philippe


2011-03-15 21:42:03

by J. Bruce Fields

[permalink] [raw]
Subject: Re: NFSv4 and NFSv4.1 client recovery

On Tue, Mar 15, 2011 at 04:07:44PM +0100, DENIEL Philippe wrote:
> Hi,
>
> as you may know, I am working on a NFS server in user space called
> nfs-ganesha. One of the feature of nfs-ganesha is its capability of
> being used as a NFSv4 proxy. This is implemented as a backend in
> nfs-ganesha : all the filesystem that nfs-ganesha can export have a
> dedicated module with a well known API (this module is called FSAL
> for File System Abstraction layer). The proxy feature is made by
> make a FSAL library that is a NFSv4 basic client (each of the FSAL
> functions calls wrap one or more NFSv4 request). The trouble is the
> case when the remote server (the one accessed by the proxy operating
> as a client via FSAL calls) crashes : the client inside the FSAL
> needs to recover to the remote server as it comes back to work. My
> question is : what is the simpliest way for my user space client to
> recover ? I must precise it make no delegation and use only a
> forechannel to the remote server. There is no backchannel.

I suppose you could either try to do the recovery yourself on the proxy,
or pass back the STALE errors to the original client and make it drive
the recovery. Maybe either way will work?

If you did the latter then I suppose your API would have to support
allowing proxy module to report a reboot, and allow passing reclaims
down.

I dunno.

--b.