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, 2 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

--001a113cd1acaa16cb05093f2313
Content-Type: text/plain; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

> 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. Su=
ch
> allocation can be avoided if the server bases cookie values on a value su=
ch
> 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 lar=
ge
> 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 fil=
e
> handle used previously would have become stale and would be reported as
> such on subsequent READDIR operations.  The server would not need to chec=
k
> 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 a=
s
> 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 her=
e.
>>
>> 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 her=
e.
>>
>>     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=E2=80=99ve 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 =E2=80=9Cstable=E2=80=
=9D 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.
>>
>>
>>

--001a113cd1acaa16cb05093f2313
Content-Type: text/html; charset=UTF-8
Content-Transfer-Encoding: quoted-printable

<div dir=3D"ltr"><span style=3D"font-family:arial,sans-serif;font-size:13px=
">&gt; cookies previously given out.=C2=A0 When such a situation occurs, th=
e server should modify the cookie verifier so as to</span><div><span style=
=3D"font-family:arial,sans-serif;font-size:13px">&gt; =C2=A0accept=C2=A0</s=
pan><span style=3D"font-family:arial,sans-serif;font-size:13px">cookies whi=
ch would otherwise no longer be vali</span><br><div><span style=3D"font-fam=
ily:arial,sans-serif;font-size:13px"><br></span></div><div><font face=3D"ar=
ial, sans-serif">&#39;&#39;accept cookies&#39;&quot; --&gt; =C2=A0&quot;dis=
allow use of cookies&#39;</font></div></div></div><div class=3D"gmail_extra=
"><br><div class=3D"gmail_quote">On Tue, Dec 2, 2014 at 11:41 AM, Elwyn Dav=
ies <span dir=3D"ltr">&lt;<a href=3D"mailto:elwynd@dial.pipex.com" target=
=3D"_blank">elwynd@dial.pipex.com</a>&gt;</span> wrote:<br><blockquote clas=
s=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-left:1px #ccc solid;pad=
ding-left:1ex">Hi, David.<br>
<br>
Excellent.=C2=A0 I think some suitable combination of your words below woul=
d fill the bill.<br>
<br>
The point about the very large directories is well taken - I hadn&#39;t gro=
kked that previously.<br>
<br>
I guess the update should go in s15.26.5 after para 1:<br>
<br>
Something like:<br>
<br>
-----------------<br>
<br>
As there is no way for the client to indicate that a cookie value once rece=
ived, will not be subsequently used, server implementations should avoid sc=
hemes that allocate memory corresponding to a returned cookie. Such allocat=
ion 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.<br>
<br>
Cookies generated by such techniques should be designed to remain valid des=
pite modification of the associated directory.=C2=A0 If a server were to in=
validate a cookie because of a directory modification, READDIR&#39;s of lar=
ge directories might never finish.<br>
<br>
If a directory is deleted after the client has carried out one or more READ=
DIR operations on the directory, the cookies returned will become invalid b=
ut the server does not need to be concerned as the directory file handle us=
ed previously would have become stale and would be reported as such on subs=
equent READDIR operations.=C2=A0 The server would not need to check the coo=
kie verifier in this case.<br>
<br>
However, certain re-organization operations on a directory (including direc=
tory compaction) may invalidate READDDIR cookies previously given out.=C2=
=A0 When such a situation occurs, the server should modify the cookie verif=
ier so as to accept cookies which would otherwise no longer be valid.<br>
<br>
-------------------<br>
<br>
Aside: handling reorganization without creating state sounds challenging bu=
t life wouldn&#39;t be interesting without challenges! :-)<br>
<br>
A couple of nits that got missed from yesterday:<span class=3D""><br>
<br>
s5.4, 2nd bullet labelled &#39;1.&#39;: s/common to all object within given=
 file system./common to all objects within the given file system./<br>
<br></span>
s9.1.3, last sentence: s/an can be treated as later./and can be treated as =
later./<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0 =C2=A0 =C2=A0^^^^<br>
<br>
<br>
With something like the above, I think we are done.<br>
<br>
Congratulations!=C2=A0 I hope this gets to be an RFC RSN.<br>
<br>
Cheers,<br>
Elwyn<span class=3D""><br>
<br>
<br>
<br>
<br>
<br>
On 02/12/14 14:56, David Noveck wrote:<br>
</span><blockquote class=3D"gmail_quote" style=3D"margin:0 0 0 .8ex;border-=
left:1px #ccc solid;padding-left:1ex"><span class=3D"">
=C2=A0 =C2=A0 Hence, NFS has no equivalent of the &quot;directory stream&qu=
ot; referred to<br>
=C2=A0 =C2=A0 in the Unix manual pages.=C2=A0 Furthermore you don&#39;t &#3=
9;open&#39; a directory<br>
=C2=A0 =C2=A0 in NFSv4, you just give it the filehandle.<br>
<br>
<br>
Correct.=C2=A0 NFSv4 just took over the NFSv3 approach to reading directori=
es<br>
and NFSv3 doesn&#39;t support open/close at all.<br>
<br>
=C2=A0 =C2=A0 However the lack of a closedir equivalent means that the serv=
er has<br>
=C2=A0 =C2=A0 no idea when the client has finished with the READDIR cookie(=
s).<br>
<br>
Right.<br>
<br>
=C2=A0 =C2=A0 =C2=A0 I think it would be helpful to give some advice on wha=
t the server<br>
=C2=A0 =C2=A0 should do to avoid a build up of probably useless state.<br>
<br>
how about:<br>
<br>
=C2=A0 =C2=A0 As there is no way for the client to indicate that a cookie v=
alue<br>
=C2=A0 =C2=A0 once received, will not be subsequently used, serer implement=
ations<br>
=C2=A0 =C2=A0 should avoid schemes that allocate memory corresponding to a<=
br>
=C2=A0 =C2=A0 returned cookie.=C2=A0 Such allocation can be avoided if the =
server bases<br>
=C2=A0 =C2=A0 cookie values on a value such as the offset within the direct=
ory<br>
=C2=A0 =C2=A0 wher the scan is to be resumed.<br>
<br>
<br>
=C2=A0 =C2=A0 Given the usual usage of READDIR, I would expect that once a =
call<br>
=C2=A0 =C2=A0 has returned eof&lt;-TRUE, the client will in almost all case=
s be done<br>
=C2=A0 =C2=A0 and the state for the (client,directory) pair can be discarde=
d.<br>
<br>
<br>
Except there is no state for=C2=A0 client,directory pair.=C2=A0 The spec do=
es not<br>
mandate that such state be maintained, and i don&#39;t know of server that<=
br>
maintain that sort of state.=C2=A0 NFSv4. servers follow the NFSv3 practice=
,<br></span>
where client state/per se/ did not exist.<span class=3D""><br>
<br>
=C2=A0 =C2=A0 However, there might be cases where the call has to be rerun =
due to<br>
=C2=A0 =C2=A0 comms failure I suppose, so maybe after a number of calls at =
eof?<br>
=C2=A0 =C2=A0 Presumably there also ought to be some sort of timeout (like =
if the<br>
=C2=A0 =C2=A0 leases expire??)=C2=A0 I have no idea what current implementa=
tions do here.<br>
<br>
None of these situations arise since there is no per--client readdir state.=
<br>
<br>
<br>
<br>
Crafting a couple of sentences to mention these three items (deletion,<br>
modification and stale state) would IMO be helpful.=C2=A0 It would certainl=
y<br>
have helped me!.<br>
<br>
suggestions:<br>
<br></span>
=C2=A0 * *deletion*<span class=3D""><br>
<br>
=C2=A0 =C2=A0 cookies return by READDIR become invalid when the directory i=
s<br>
=C2=A0 =C2=A0 removed but the server is not obliged for check for this situ=
ation<br>
=C2=A0 =C2=A0 or check the cookie verifier since the directory handle will =
become<br>
=C2=A0 =C2=A0 stale.<br>
<br></span>
=C2=A0 * *modification*<span class=3D""><br>
<br>
=C2=A0 =C2=A0 Cookies generated by such techniques should reaiin valid desp=
ite<br>
=C2=A0 =C2=A0 modification of the associated directory.=C2=A0 If a server w=
ere to<br>
=C2=A0 =C2=A0 invalidate a cookie because of a directory modification, READ=
DIR&#39;s<br>
=C2=A0 =C2=A0 of large directories might never finish.<br>
<br></span>
=C2=A0 * *stale state*<span class=3D""><br>
<br>
=C2=A0 =C2=A0 I think it is clear from the text above that there is no stat=
e to<br>
=C2=A0 =C2=A0 become stale.=C2=A0 Not sure what else you can say.<br>
<br></span>
=C2=A0 * *directory reorganization*<span class=3D""><br>
<br>
=C2=A0 =C2=A0 certain re-organization operation on a directory (including<b=
r>
=C2=A0 =C2=A0 directory compaction) may invalidate READDDIR cookies<br>
=C2=A0 =C2=A0 previously given out.=C2=A0 when these situation ocur, the se=
rver should<br>
=C2=A0 =C2=A0 modify the cookie verifier to accepting cookies which are no =
longer<br>
=C2=A0 =C2=A0 valid.<br>
<br>
<br>
On Tue, Dec 2, 2014 at 9:00 AM, Elwyn Davies &lt;<a href=3D"mailto:elwynd@d=
ial.pipex.com" target=3D"_blank">elwynd@dial.pipex.com</a><br></span><div><=
div class=3D"h5">
&lt;mailto:<a href=3D"mailto:elwynd@dial.pipex.com" target=3D"_blank">elwyn=
d@dial.pipex.com</a>&gt;<u></u>&gt; wrote:<br>
<br>
=C2=A0 =C2=A0 Hi.<br>
<br>
=C2=A0 =C2=A0 Sorry to keep harping on about READDIR, but...<br>
<br>
=C2=A0 =C2=A0 Tom&#39;s comment about opendir/closedir at the end of the ma=
il nbelow<br>
=C2=A0 =C2=A0 obviously triggered something in my brain overnight, &#39;cos=
 I woke up<br>
=C2=A0 =C2=A0 realizing that I wasn&#39;t correctly understanding the seman=
tics here.<br>
<br>
=C2=A0 =C2=A0 Please bear with while I parade my naivete :-(<br>
<br>
=C2=A0 =C2=A0 Having refreshed my memory on the semantics of reading direct=
ories<br>
=C2=A0 =C2=A0 in Unix and checked back on NFSv4, I realized that NFSv4 does=
n&#39;t<br>
=C2=A0 =C2=A0 have the equivalents of opendir and closedir.<br>
<br>
=C2=A0 =C2=A0 Hence, NFS has no equivalent of the &quot;directory stream&qu=
ot; referred to<br>
=C2=A0 =C2=A0 in the Unix manual pages.=C2=A0 Furthermore you don&#39;t &#3=
9;open&#39; a directory<br>
=C2=A0 =C2=A0 in NFSv4, you just give it the filehandle.<br>
<br>
=C2=A0 =C2=A0 So, the case of the directory getting deleted under your feet=
<br>
=C2=A0 =C2=A0 between READDIR calls presumably just results in a NFS4ERR_ST=
ALE<br>
=C2=A0 =C2=A0 error on the next READDIR call and the issue of whether the c=
ookie<br>
=C2=A0 =C2=A0 is valid is moot. It is then up to the client to map this int=
o local<br>
=C2=A0 =C2=A0 OS behaviour.<br>
<br>
=C2=A0 =C2=A0 This means that only the directory modification case is relev=
ant to<br>
=C2=A0 =C2=A0 the cookie validity issue, and I understand the comment that =
David<br>
=C2=A0 =C2=A0 was making yesterday more clearly now.<br>
<br>
=C2=A0 =C2=A0 However the lack of a closedir equivalent means that the serv=
er has<br>
=C2=A0 =C2=A0 no idea when the client has finished with the READDIR cookie(=
s).=C2=A0 I<br>
=C2=A0 =C2=A0 think it would be helpful to give some advice on what the ser=
ver<br>
=C2=A0 =C2=A0 should do to avoid a build up of probably useless state.<br>
<br>
=C2=A0 =C2=A0 Given the usual usage of READDIR, I would expect that once a =
call<br>
=C2=A0 =C2=A0 has returned eof&lt;-TRUE, the client will in almost all case=
s be done<br>
=C2=A0 =C2=A0 and the state for the (client,directory) pair can be discarde=
d.<br>
=C2=A0 =C2=A0 However, there might be cases where the call has to be rerun =
due to<br>
=C2=A0 =C2=A0 comms failure I suppose, so maybe after a number of calls at =
eof?<br>
=C2=A0 =C2=A0 Presumably there also ought to be some sort of timeout (like =
if the<br>
=C2=A0 =C2=A0 leases expire??)=C2=A0 I have no idea what current implementa=
tions do here.<br>
<br>
=C2=A0 =C2=A0 Crafting a couple of sentences to mention these three items<b=
r>
=C2=A0 =C2=A0 (deletion, modification and stale state) would IMO be helpful=
.=C2=A0 It<br>
=C2=A0 =C2=A0 would certainly have helped me!<br>
<br>
=C2=A0 =C2=A0 Regards,<br>
=C2=A0 =C2=A0 Elwyn<br>
<br>
=C2=A0 =C2=A0 On 02/12/14 00:56, Tom Haynes wrote:<br>
<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 On Dec 1, 2014, at 11:54 AM, Elwy=
n Davies<br></div></div><div><div class=3D"h5">
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 &lt;<a href=3D"mailto:elwynd@dial=
.pipex.com" target=3D"_blank">elwynd@dial.pipex.com</a> &lt;mailto:<a href=
=3D"mailto:elwynd@dial.pipex.com" target=3D"_blank">elwynd@dial.pipex.com</=
a>&gt;<u></u>&gt; wrote:<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Hi, David.<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Thanks for the response.<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 A couple of comments below...<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Regards,<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Elwyn<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 On 01/12/14 18:50, David Noveck w=
rote:<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0My view (remains) that if the cookie is not tied to<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 the change<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0attribute of the directory, this makes life<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 difficult for both =
the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0server (what does it send if the data has been<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 changed and how doe=
s<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0it manage maintaining checkpoints -- where a<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 readdir finished --=
, in<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0particular if the checkpoint was on an entry that<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 has been deleted),<=
br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0and the client.<br>
<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 The cookie is not t=
ied to the change attribute of the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 directory.<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 The purpose of the =
cookie is ensuring that you do a<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 READDIR that<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 encompasses multipl=
e requests:<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* entr=
ies that exist during the entire period of the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 multi-requuest<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0directory read appear exactly once in the result.<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0* entr=
ies that exists during some part of the period<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 of the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=
=A0multi-request directory read=C2=A0 appear at most once<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 in the result.<br>
<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Basically implement=
ations scan through the directory as<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 it exists on<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 disk and if there i=
s a created entry, the client may or<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 may not see it,<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 depending on where =
the the new entry happens to be put,<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 with respect to<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 the ongoing scan.=
=C2=A0 As far as deleted entries, the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 implementation only=
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 has to be able to m=
ove on to the next entry if it<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 encouneters an entr=
y<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 marked as deleted.<=
br>
<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 OK, so the server has to be cleve=
r rather than telling the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 client to restart the readdir -- =
I&#39;m not sure this is the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 right trade-off since the client =
has to cope with being told<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 the cached cookie is useless (as =
per Trond&#39;s input below)<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 but I guess implementations work =
this way already and it<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 isn&#39;t my call.=C2=A0 In that =
case I suggest that the last<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sentence of s15.26.4, para 9, is =
modified to tell server<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 implementers a bit more clearly w=
hat they have to do.<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Suggestion:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 OLD:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 Ideally, the cookie=
 value should not change if the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 directory is<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 modified since the =
client may be caching these values.<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 NEW:<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 The server SHOULD t=
ry to accept cookie values issued<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 with READDIR<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 responses even if t=
he directory has been modified<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 between the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 READDIR calls but M=
AY return NFS4ERR_NOT_VALID if this<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 is not<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 possible as might b=
e the case if the server has rebooted<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 in the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 interim.<br>
<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 I=E2=80=99ve taken this change.<br>
<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 One nasty thought occurs to me re=
garding the idea that a<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 client caches<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 the cookie value(s):=C2=A0 Is the=
 server supposed to maintain the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 whole<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 sequence of cookies for a sequenc=
e of READDIRs on a single<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 directory so<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 the client can reissue some of th=
e READDIR calls or is it<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 fair enough for the server to thr=
ow them away after the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 client has used them once? And ho=
w long should the server<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 =C2=A0 hang onto cookie state in normal =
operation?<br>
<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 No, it does not have to save them.<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 But the cookies are pretty persistent in the fi=
rst place. I.e.,<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 use some property of either the inode or the di=
rent to generate<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 the cookie.<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 As such, the cookie state does not need to be h=
eld onto.<br>
<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 And for the life, it actually needs to be =E2=
=80=9Cstable=E2=80=9D between the<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 opendir() and closedir() call on the client. Wh=
ile we are safe<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 on a client reboot, a client could end up holdi=
ng onto the DIR<br>
=C2=A0 =C2=A0 =C2=A0 =C2=A0 pointer for a large indeterminate time.<br>
<br>
<br>
</div></div></blockquote>
</blockquote></div><br></div>

--001a113cd1acaa16cb05093f2313--

