On Fri, 2018-06-01 at 10:17 -0400, J. Bruce Fields wrote:
On Fri, Jun 01, 2018 at 06:42:37AM -0400, Jeff Layton wrote:
> Thanks for having a look. Hmm...you're right.
>
> nn->nfsd4_lease = 90; /* default lease time */
> nn->nfsd4_grace = 90;
>
> nit: We should probably add a #define'd constant for that at some
> point...but, might this be problematic?
>
> In the pessimal case, you might renew your lease just before the server
> crashes. It then comes back up quickly and starts the grace period. By
> the time the client contacts the server again the grace period is almost
> over and you may have very little time to actually do any reclaim.
>
> ISTR that when we were working on the server at PD we had determined
> that we needed around 2 grace periods + a small fudge factor. I don't
> recall the details of how we determined it though.
OK, I'd be interested in any of that.
If we decide we need a larger grace/lease ratio, we may want to adjust
default lease down at same time to avoid increasing grace period, as
that's always an annoyance.
I think we just figured that we ought to give the client a full lease
period to reclaim everything, in case it holds a lot of state. You also
need to give it a full lease period to figure out that the server has
rebooted, and then I think we added a few seconds to account for "other
factors" (transport delays and whatnot).
> Even worse:
>
> $ cat /proc/sys/fs/lease-break-time
> 45
>
> Maybe we should be basing the v4 lease time on the lease-break-time
> value? It seems like we ought to revoke delegations after two lease
> periods rather than after half of one.
No, we ignore lease-break-time on delegations. See the comment in
fs/nfsd/nfs4state.c:nfsd_break_deleg_cb():
/*
* We don't want the locks code to timeout the lease for us;
* we'll remove it ourself if a delegation isn't returned
* in time:
*/
fl->fl_break_time = 0;
Ahh thanks, I had forgotten that. Whew!
--
Jeff Layton <jlayton(a)kernel.org>