> cookies previously given out.  When such a situation occurs, the server
should modify the cookie verifier so as to
>  accept cookies which would otherwise no longer be vali

''accept cookies'" -->  "disallow use of cookies'

On Tue, Dec 2, 2014 at 11:41 AM, Elwyn Davies <[email protected]> wrote:

> Hi, David.
>
> Excellent.  I think some suitable combination of your words below would
> fill the bill.
>
> The point about the very large directories is well taken - I hadn't
> grokked that previously.
>
> I guess the update should go in s15.26.5 after para 1:
>
> Something like:
>
> -----------------
>
> As there is no way for the client to indicate that a cookie value once
> received, will not be subsequently used, server implementations should
> avoid schemes that allocate memory corresponding to a returned cookie. Such
> allocation can be avoided if the server bases cookie values on a value such
> as the offset within the directory where the scan is to be resumed.
>
> Cookies generated by such techniques should be designed to remain valid
> despite modification of the associated directory.  If a server were to
> invalidate a cookie because of a directory modification, READDIR's of large
> directories might never finish.
>
> If a directory is deleted after the client has carried out one or more
> READDIR operations on the directory, the cookies returned will become
> invalid but the server does not need to be concerned as the directory file
> handle used previously would have become stale and would be reported as
> such on subsequent READDIR operations.  The server would not need to check
> the cookie verifier in this case.
>
> However, certain re-organization operations on a directory (including
> directory compaction) may invalidate READDDIR cookies previously given
> out.  When such a situation occurs, the server should modify the cookie
> verifier so as to accept cookies which would otherwise no longer be valid.
>
> -------------------
>
> Aside: handling reorganization without creating state sounds challenging
> but life wouldn't be interesting without challenges! :-)
>
> A couple of nits that got missed from yesterday:
>
> s5.4, 2nd bullet labelled '1.': s/common to all object within given file
> system./common to all objects within the given file system./
>
> s9.1.3, last sentence: s/an can be treated as later./and can be treated as
> later./
>                          ^^^^
>
>
> With something like the above, I think we are done.
>
> Congratulations!  I hope this gets to be an RFC RSN.
>
> Cheers,
> Elwyn
>
>
>
>
>
> On 02/12/14 14:56, David Noveck wrote:
>
>>     Hence, NFS has no equivalent of the "directory stream" referred to
>>     in the Unix manual pages.  Furthermore you don't 'open' a directory
>>     in NFSv4, you just give it the filehandle.
>>
>>
>> Correct.  NFSv4 just took over the NFSv3 approach to reading directories
>> and NFSv3 doesn't support open/close at all.
>>
>>     However the lack of a closedir equivalent means that the server has
>>     no idea when the client has finished with the READDIR cookie(s).
>>
>> Right.
>>
>>       I think it would be helpful to give some advice on what the server
>>     should do to avoid a build up of probably useless state.
>>
>> how about:
>>
>>     As there is no way for the client to indicate that a cookie value
>>     once received, will not be subsequently used, serer implementations
>>     should avoid schemes that allocate memory corresponding to a
>>     returned cookie.  Such allocation can be avoided if the server bases
>>     cookie values on a value such as the offset within the directory
>>     wher the scan is to be resumed.
>>
>>
>>     Given the usual usage of READDIR, I would expect that once a call
>>     has returned eof<-TRUE, the client will in almost all cases be done
>>     and the state for the (client,directory) pair can be discarded.
>>
>>
>> Except there is no state for  client,directory pair.  The spec does not
>> mandate that such state be maintained, and i don't know of server that
>> maintain that sort of state.  NFSv4. servers follow the NFSv3 practice,
>> where client state/per se/ did not exist.
>>
>>     However, there might be cases where the call has to be rerun due to
>>     comms failure I suppose, so maybe after a number of calls at eof?
>>     Presumably there also ought to be some sort of timeout (like if the
>>     leases expire??)  I have no idea what current implementations do here.
>>
>> None of these situations arise since there is no per--client readdir
>> state.
>>
>>
>>
>> Crafting a couple of sentences to mention these three items (deletion,
>> modification and stale state) would IMO be helpful.  It would certainly
>> have helped me!.
>>
>> suggestions:
>>
>>   * *deletion*
>>
>>     cookies return by READDIR become invalid when the directory is
>>     removed but the server is not obliged for check for this situation
>>     or check the cookie verifier since the directory handle will become
>>     stale.
>>
>>   * *modification*
>>
>>     Cookies generated by such techniques should reaiin valid despite
>>     modification of the associated directory.  If a server were to
>>     invalidate a cookie because of a directory modification, READDIR's
>>     of large directories might never finish.
>>
>>   * *stale state*
>>
>>     I think it is clear from the text above that there is no state to
>>     become stale.  Not sure what else you can say.
>>
>>   * *directory reorganization*
>>
>>     certain re-organization operation on a directory (including
>>     directory compaction) may invalidate READDDIR cookies
>>     previously given out.  when these situation ocur, the server should
>>     modify the cookie verifier to accepting cookies which are no longer
>>     valid.
>>
>>
>> On Tue, Dec 2, 2014 at 9:00 AM, Elwyn Davies <[email protected]
>> <mailto:[email protected]>> wrote:
>>
>>     Hi.
>>
>>     Sorry to keep harping on about READDIR, but...
>>
>>     Tom's comment about opendir/closedir at the end of the mail nbelow
>>     obviously triggered something in my brain overnight, 'cos I woke up
>>     realizing that I wasn't correctly understanding the semantics here.
>>
>>     Please bear with while I parade my naivete :-(
>>
>>     Having refreshed my memory on the semantics of reading directories
>>     in Unix and checked back on NFSv4, I realized that NFSv4 doesn't
>>     have the equivalents of opendir and closedir.
>>
>>     Hence, NFS has no equivalent of the "directory stream" referred to
>>     in the Unix manual pages.  Furthermore you don't 'open' a directory
>>     in NFSv4, you just give it the filehandle.
>>
>>     So, the case of the directory getting deleted under your feet
>>     between READDIR calls presumably just results in a NFS4ERR_STALE
>>     error on the next READDIR call and the issue of whether the cookie
>>     is valid is moot. It is then up to the client to map this into local
>>     OS behaviour.
>>
>>     This means that only the directory modification case is relevant to
>>     the cookie validity issue, and I understand the comment that David
>>     was making yesterday more clearly now.
>>
>>     However the lack of a closedir equivalent means that the server has
>>     no idea when the client has finished with the READDIR cookie(s).  I
>>     think it would be helpful to give some advice on what the server
>>     should do to avoid a build up of probably useless state.
>>
>>     Given the usual usage of READDIR, I would expect that once a call
>>     has returned eof<-TRUE, the client will in almost all cases be done
>>     and the state for the (client,directory) pair can be discarded.
>>     However, there might be cases where the call has to be rerun due to
>>     comms failure I suppose, so maybe after a number of calls at eof?
>>     Presumably there also ought to be some sort of timeout (like if the
>>     leases expire??)  I have no idea what current implementations do here.
>>
>>     Crafting a couple of sentences to mention these three items
>>     (deletion, modification and stale state) would IMO be helpful.  It
>>     would certainly have helped me!
>>
>>     Regards,
>>     Elwyn
>>
>>     On 02/12/14 00:56, Tom Haynes wrote:
>>
>>
>>             On Dec 1, 2014, at 11:54 AM, Elwyn Davies
>>             <[email protected] <mailto:[email protected]>> wrote:
>>
>>             Hi, David.
>>
>>             Thanks for the response.
>>
>>             A couple of comments below...
>>
>>             Regards,
>>             Elwyn
>>
>>             On 01/12/14 18:50, David Noveck wrote:
>>
>>                      My view (remains) that if the cookie is not tied to
>>                 the change
>>                      attribute of the directory, this makes life
>>                 difficult for both the
>>                      server (what does it send if the data has been
>>                 changed and how does
>>                      it manage maintaining checkpoints -- where a
>>                 readdir finished --, in
>>                      particular if the checkpoint was on an entry that
>>                 has been deleted),
>>                      and the client.
>>
>>
>>                 The cookie is not tied to the change attribute of the
>>                 directory.
>>
>>                 The purpose of the cookie is ensuring that you do a
>>                 READDIR that
>>                 encompasses multiple requests:
>>
>>                    * entries that exist during the entire period of the
>>                 multi-requuest
>>                      directory read appear exactly once in the result.
>>                    * entries that exists during some part of the period
>>                 of the
>>                      multi-request directory read  appear at most once
>>                 in the result.
>>
>>
>>                 Basically implementations scan through the directory as
>>                 it exists on
>>                 disk and if there is a created entry, the client may or
>>                 may not see it,
>>                 depending on where the the new entry happens to be put,
>>                 with respect to
>>                 the ongoing scan.  As far as deleted entries, the
>>                 implementation only
>>                 has to be able to move on to the next entry if it
>>                 encouneters an entry
>>                 marked as deleted.
>>
>>
>>             OK, so the server has to be clever rather than telling the
>>             client to restart the readdir -- I'm not sure this is the
>>             right trade-off since the client has to cope with being told
>>             the cached cookie is useless (as per Trond's input below)
>>             but I guess implementations work this way already and it
>>             isn't my call.  In that case I suggest that the last
>>             sentence of s15.26.4, para 9, is modified to tell server
>>             implementers a bit more clearly what they have to do.
>>             Suggestion:
>>             OLD:
>>                 Ideally, the cookie value should not change if the
>>             directory is
>>                 modified since the client may be caching these values.
>>             NEW:
>>                 The server SHOULD try to accept cookie values issued
>>             with READDIR
>>                 responses even if the directory has been modified
>>             between the
>>                 READDIR calls but MAY return NFS4ERR_NOT_VALID if this
>>             is not
>>                 possible as might be the case if the server has rebooted
>>             in the
>>                 interim.
>>
>>
>>         I’ve taken this change.
>>
>>
>>             One nasty thought occurs to me regarding the idea that a
>>             client caches
>>             the cookie value(s):  Is the server supposed to maintain the
>>             whole
>>             sequence of cookies for a sequence of READDIRs on a single
>>             directory so
>>             the client can reissue some of the READDIR calls or is it
>>             fair enough for the server to throw them away after the
>>             client has used them once? And how long should the server
>>             hang onto cookie state in normal operation?
>>
>>
>>         No, it does not have to save them.
>>
>>         But the cookies are pretty persistent in the first place. I.e.,
>>         use some property of either the inode or the dirent to generate
>>         the cookie.
>>
>>         As such, the cookie state does not need to be held onto.
>>
>>         And for the life, it actually needs to be “stable” between the
>>         opendir() and closedir() call on the client. While we are safe
>>         on a client reboot, a client could end up holding onto the DIR
>>         pointer for a large indeterminate time.
>>
>>
>>
_______________________________________________
Gen-art mailing list
[email protected]
https://www.ietf.org/mailman/listinfo/gen-art

Reply via email to