On Thu, Feb 16, 2012 at 11:39:55AM -0500, Rick Macklem wrote:
> I wrote:
> > Trond Myklebust wrote:
> > > > -----Original Message-----
> > > > From: bfields@... [mailto:bfields@...]
> > > > Sent: Thursday, February 16, 2012 6:55 AM
> > > > To: Vitaliy Gusev
> > > > Cc: Myklebust, Trond; nfsv4@... > > > > Subject: Re: Question about OpenOwner table overflow
> > > >
> > > > On Thu, Feb 16, 2012 at 03:40:40PM +0400, Vitaliy Gusev wrote:
> > > > > On 02/01/2012 07:17 PM, Myklebust, Trond wrote:
> > > > > >Note that if the problem is that of abusive clients that never
> > > > > >close
> > > > > >files in situations where they should, then the server can
> > > > > >always
> > > > > >declare a reboot and get them to reclaim those opens that are
> > > > > >actually in use.
> > > > >
> > > > > Can a server simulate the reboot only for those "bad" clients
> > > > > whereas
> > > > > other clients will work with the server in normal mode ?
> > > >
> > > > I can't see why that wouldn't work.
> > >
> > > The main problem would be in enforcing the grace period... You'd
> > > have
> > > to DELAY all potentially conflicting OPEN or LOCK requests from
> > > other
> > > clients until the client that are in grace have finished recovering.
> > >
> > Also, you'd have to be careful how you handle the edge conditions
> > mentioned
> > in Sec. 8.6.3 of RFC3530 (they're in the newer specs, but I don't have
> > the reference handy). I haven't thought about it, so I don't know if
> > this
> > is more difficult when only certain clients "see it rebooted".
> Oh, and another one that might get tricky...
> - You'd need to generate clientids and stateids that somehow refer
> to the "current boot instance" for both the clients that "saw a reboot"
> and those that didn't, so that you can reply NFS4ERR_STALE_CLIENTID/STATEID
> when necessary.
> An example of this from a recent thread:
> - The FreeBSD server determines whether it should reply NFS4ERR_EXPIRED
> vs NFS4ERR_STALE_CLIENTID/STATEID when it doesn't have a record for
> the clientid by looking at the clientid/stateid bits to determine
> if it is for the current "boot instance". If I were to "partition"
> the current boot instance bit space in the clientid/stateid to handle
> "only some clients saw reboot", then I'd run out of bits.
> --> You might find you have to keep records for even expired clients until
> the server reboots for real and forgets everything, to handle the
> NFS4ERR_EXPIRED case.
> I'm not saying you can't make it work, but there might be a few "alligators
> in the swamp" that could make it interesting:-) rick
Dumb question, probably showing that I've ignored whole swaths of email
traffic about courtesy locks--but are clients expected to treat STALE
and EXPIRED much differently?