Re: [Gen-art] Gen-art LC review of draft-ietf-nfsv4-rfc3530bis-33

David Noveck <davenoveck@gmail.com> Tue, 02 December 2014 17:34 UTC

Return-Path: <davenoveck@gmail.com>
X-Original-To: gen-art@ietfa.amsl.com
Delivered-To: gen-art@ietfa.amsl.com
Received: from localhost (ietfa.amsl.com [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 4B28D1A6EF1 for <gen-art@ietfa.amsl.com>; Tue, 2 Dec 2014 09:34:39 -0800 (PST)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.999
X-Spam-Level:
X-Spam-Status: No, score=-1.999 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, DKIM_SIGNED=0.1, DKIM_VALID=-0.1, DKIM_VALID_AU=-0.1, FREEMAIL_FROM=0.001, HTML_MESSAGE=0.001, SPF_PASS=-0.001] autolearn=ham
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id gVUIHNCDARry for <gen-art@ietfa.amsl.com>; Tue, 2 Dec 2014 09:34:34 -0800 (PST)
Received: from mail-oi0-x235.google.com (mail-oi0-x235.google.com [IPv6:2607:f8b0:4003:c06::235]) (using TLSv1 with cipher ECDHE-RSA-RC4-SHA (128/128 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id 3E0BA1A6EE6 for <gen-art@ietf.org>; Tue, 2 Dec 2014 09:34:30 -0800 (PST)
Received: by mail-oi0-f53.google.com with SMTP id x69so9173025oia.26 for <gen-art@ietf.org>; Tue, 02 Dec 2014 09:34:29 -0800 (PST)
DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/relaxed; d=gmail.com; s=20120113; h=mime-version:in-reply-to:references:date:message-id:subject:from:to :cc:content-type; bh=awEoUHVh4HHX5FrKHlUhg2nQ1d+DeQHwCjeGfvLKndQ=; b=iPI1gr95mdRC6YX5Ih6hzDkQyV2FgnrbRJtMe3CCfXy5jnU9wptcBvBRLKxqEyzN4y 5a5s51rW20owl70TYqRSPImeL1O9B+yL4rIGp2+fMzJdoeDcCyQGc2aMtXjRoE01v7SY D35gwNTzrvhgQgacqyx59PsQ2volkFEtxDs8uKV809oPTIgYZx+ZFig23X3geJIiirNF f8/ydcC5za5iNJB8KizBp3Z3Y7bS2GqKXeOuJkC8aj2GTKp9P2ngDnqh2Hxl/RE7D8P5 tr9kXOtJjOi8lwzchIDKEZLBL8CvBh5jyaVlp1uHdypQa5Z8z6NR0RvTQpII3muXBeIm ecdw==
MIME-Version: 1.0
X-Received: by 10.202.181.213 with SMTP id e204mr146135oif.117.1417541669490; Tue, 02 Dec 2014 09:34:29 -0800 (PST)
Received: by 10.182.5.198 with HTTP; Tue, 2 Dec 2014 09:34:29 -0800 (PST)
In-Reply-To: <547DEBAF.9010907@dial.pipex.com>
References: <54627625.9050909@dial.pipex.com> <7E1914F4-413F-4F7E-BE9A-C941FBDD422B@primarydata.com> <5465143D.6020604@dial.pipex.com> <47860B2D-1977-4062-9775-10463F7030B9@primarydata.com> <EF01418C3D9E034EB5E2FD76E33708EB22CAF09541@AUSX7MCPS308.AMER.DELL.COM> <CADaq8jdvdfqDuGs_Gj4qFZ2HxdH71GRSaKGQZfeq5APW40ZxmQ@mail.gmail.com> <CA071301-D89F-4A4C-B253-086E95A4F929@primarydata.com> <546B0F4F.3060504@dial.pipex.com> <B8733C3C-1986-49B3-9AE6-1B88A8F7CA8C@primarydata.com> <547C7E2B.10305@dial.pipex.com> <CADaq8jcNopgjGZgevo2BNEjWvvV3eCesFLgPzpwg0j33XO1t2A@mail.gmail.com> <547CC75C.7010909@dial.pipex.com> <1F2B554C-4C7C-4BF0-B078-AA7988F7B0AF@primarydata.com> <547DC609.9070104@dial.pipex.com> <CADaq8jfHP-fMQ9notdVt5iZ+mO48cu_d6jCDZ8LFpkgN93x2-w@mail.gmail.com> <547DEBAF.9010907@dial.pipex.com>
Date: Tue, 02 Dec 2014 12:34:29 -0500
Message-ID: <CADaq8jdgpcqsD_UiAh_1SX=1fdJ_rRnraewnFF09FL=bzOLHNg@mail.gmail.com>
From: David Noveck <davenoveck@gmail.com>
To: Elwyn Davies <elwynd@dial.pipex.com>
Content-Type: multipart/alternative; boundary="001a113cd1acaa16cb05093f2313"
Archived-At: http://mailarchive.ietf.org/arch/msg/gen-art/BJQunJfbsIa_TONqqTrLIlLJfsk
Cc: "gen-art >> General area reviewing team" <gen-art@ietf.org>, Barry Leiba <barryleiba@computer.org>, Tom Haynes <thomas.haynes@primarydata.com>
Subject: Re: [Gen-art] Gen-art LC review of draft-ietf-nfsv4-rfc3530bis-33
X-BeenThere: gen-art@ietf.org
X-Mailman-Version: 2.1.15
Precedence: list
List-Id: "GEN-ART: General Area Review Team" <gen-art.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/gen-art>, <mailto:gen-art-request@ietf.org?subject=unsubscribe>
List-Archive: <http://www.ietf.org/mail-archive/web/gen-art/>
List-Post: <mailto:gen-art@ietf.org>
List-Help: <mailto:gen-art-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/gen-art>, <mailto:gen-art-request@ietf.org?subject=subscribe>
X-List-Received-Date: Tue, 02 Dec 2014 17:34:39 -0000

> 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 <elwynd@dial.pipex.com> 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 <elwynd@dial.pipex.com
>> <mailto:elwynd@dial.pipex.com>> 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
>>             <elwynd@dial.pipex.com <mailto:elwynd@dial.pipex.com>> 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.
>>
>>
>>