<?xml version='1.0' encoding='utf-8'?>
<!DOCTYPE rfc [
  <!ENTITY nbsp    "&#160;">
  <!ENTITY zwsp   "&#8203;">
  <!ENTITY nbhy   "&#8209;">
  <!ENTITY wj     "&#8288;">
]>
<?xml-stylesheet type="text/xsl" href="rfc2629.xslt" ?>
<!-- generated by https://github.com/cabo/kramdown-rfc version 1.7.29 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-ietf-nfsv4-uncacheable-directories-12" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.31.0 -->
  <front>
    <title abbrev="Uncacheable Dirent Metadata">Adding an Uncacheable Dirent Metadata Attribute to NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-directories-12"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>General</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 42?>

<t>Network File System version 4.2 (NFSv4.2) clients may cache the
file attributes returned by READDIR alongside each directory
entry.  Such a cache is not invalidated by the directory's change
attribute, which reflects changes to the directory and its entries
but not writes to the files those entries name, so it can become
stale when another client changes one of those files.  In some
deployments this produces incorrect size and timestamp values often
enough to be a problem.  This document introduces an
uncacheable dirent metadata attribute for NFSv4.2 that allows a
server to identify a directory for which an honoring client
enumerates by READDIR and reports each entry's attributes as that
READDIR returned them, rather than from a value it held earlier.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 57?>

<t>Note to RFC Editor: please remove this section prior to publication.</t>
      <t>Discussion of this draft takes place
on the NFSv4 working group mailing list (nfsv4@ietf.org),
which is archived at
<eref target="https://mailarchive.ietf.org/arch/search/?email_list=nfsv4"/>. Source
code and issues list for this draft can be found at
<eref target="https://github.com/ietf-wg-nfsv4/uncacheable-directories"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/ietf-wg-nfsv4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 70?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>Clients of remote filesystems may cache the file attributes returned
by READDIR alongside each directory entry, to reduce the volume of
follow-on GETATTR traffic for entries the client has already seen.
This caching is inherently best-effort -- writes to the underlying
files can change those attributes at any time, and the directory's
change attribute does not track such writes.  In some deployments
the cost of that staleness is high enough to be a problem; the
conditions are described in <xref target="deployment-motivation"/>.</t>
      <t>In this document, the term directory is used to describe the
context in which directory entries are retrieved.  The uncacheable
dirent metadata attribute applies to dirent metadata -- the file
object attributes, such as size and timestamps, returned alongside each
entry -- and to what an honoring client reports of it.  It does not
prohibit caching of the directory object itself, nor does it affect
caching of file data.</t>
      <t>When this best-effort caching returns stale size and timestamp
information for concurrently modified files, it also undermines the
effectiveness of uncacheable file data semantics
(<xref target="I-D.ietf-nfsv4-uncacheable-files"/>) in the same deployment:
applications can observe inconsistent metadata and data views even
when file data caching is disabled.</t>
      <t>This document introduces the uncacheable dirent metadata attribute
to NFSv4.2 to allow servers to identify the directories for which an
honoring client reports each entry's attributes as the READDIR that
returned the entry supplied them, rather than from a value it held
earlier.
Using the process described in <xref target="RFC8178"/> Section 6, this document
extends NFSv4.2 <xref target="RFC7862"/>; as that section provides, it does not
update <xref target="RFC7862"/>, which remains a valid description of the base
variant of the minor version.  The revisions are built on top of the
external data representation (XDR) <xref target="RFC4506"/> generated from
<xref target="RFC7863"/>.</t>
    </section>
    <section anchor="deployment-motivation">
      <name>Deployment Motivation</name>
      <t>A class of deployment uses NFSv4.2 to serve a shared directory to
many concurrent NFSv4.2 client writers, each writing files within
the directory.  Workloads of this kind are typical of
High-Performance Computing (HPC) environments, where a single
output directory may receive results from hundreds or thousands of
compute nodes simultaneously, and of large-scale data-ingest
pipelines where many producers append to a common landing
directory.  The files within such a directory have their attributes
-- size and timestamps in particular, though the attribute of this
document covers the whole class defined in <xref target="sec_definitions"/> --
modified at a high rate by clients other than the one performing
READDIR.</t>
      <t><xref target="RFC8881"/> Section 10.6 permits a client that requested the full set
of attributes to be cached in a READDIR to cache what it returned on
the same basis as attributes obtained by GETATTR:
cached per file, bounded by an upper time boundary, and revalidated
against that file's change attribute.  In a directory receiving writes
from thousands of compute nodes, any nonzero cache lifetime yields stale
size and time_modify for most entries most of the time, and revalidating
each entry individually costs one GETATTR per entry -- the very traffic
that requesting attributes in READDIR exists to avoid.  NFSv4.2 gives a
server no in-band way to tell a client that the file attributes it holds
for the children of a particular directory should be refreshed each time
the directory is enumerated; mount options shorten attribute cache
lifetimes out of band and per client, not per directory.</t>
      <t>Nor can a client work out for itself which directories those are.  The
directory's change attribute is the only per-directory signal it has,
and that attribute does not move when a file the directory names is
written, so it reads the same for a directory receiving writes from a
thousand nodes and for one nobody is touching.  Lacking any basis for
a per-directory choice, a client is left applying one attribute-cache
policy across the whole mount.</t>
      <t>The staleness has correctness consequences, not merely cosmetic ones.
An incremental backup or a directory-tree synchronization pass that
decides what to copy from the size and time_modify reported for each
entry will silently skip a file whose cached metadata predates a
concurrent write, leaving data uncopied.  This attribute lets a server mark the directories where that
outcome is likely, so that an honoring client fetches current metadata
on each enumeration.</t>
      <t>The fattr4_uncacheable_dirent_metadata attribute is the server's
mechanism to identify a directory for which this risk is high
enough that client-side caching is not safe.  When the server sets
the attribute on a directory, an honoring client goes to the server
for each enumeration and does not report an entry's attributes from a
value it held before that READDIR.</t>
    </section>
    <section anchor="sec_definitions">
      <name>Definitions</name>
      <dl>
        <dt>readdir</dt>
        <dd>
          <t>A directory-read request made by an application, however the client's
interface batches entries.  Written in lower case throughout this
document to distinguish it from READDIR, the NFSv4.2 operation
(<xref target="RFC8881"/> Section 18.23).</t>
        </dd>
        <dt>enumeration</dt>
        <dd>
          <t>One pass over a directory: the readdirs of that pass and the READDIRs
the client issues to satisfy them.  A READDIR ordinarily supplies enough
entries for many readdirs, so a requirement scoped to an enumeration
does not imply a READDIR per readdir.</t>
        </dd>
        <dt>dirent</dt>
        <dd>
          <t>A directory entry -- the (name, fileid) pair that names a file or
subdirectory within a directory.  This is what a client maintains for
an entry, whatever a given READDIR response carries on the wire; it is
the pair POSIX exposes as d_name and d_ino.  A dirent itself does not
include the file attributes returned alongside it.</t>
        </dd>
        <dt>dirent metadata</dt>
        <dd>
          <t>The file attributes that a READDIR response can return alongside
each dirent, whether or not a particular response carried them --
including size, time_modify, time_metadata, time_access, mode, owner,
and the file's own change attribute.  These attributes belong to the
underlying file object, not to the directory; they change when the
underlying file is written, which is independent of the directory's
change attribute.
The term "dirent metadata" in this document is a naming convenience
for "the file attributes a READDIR response carries alongside an
entry"; it names that class of attributes, not the subset a given
response happened to return, and it does not assert that those
attributes inherit the directory's cache-coherence semantics.</t>
        </dd>
        <dt>dirent caching</dt>
        <dd>
          <t>A client-side cache of the dirents themselves -- the (name, fileid)
pairs -- used to avoid repeated READDIR traffic.  Whether such a cache
remains valid is governed by the directory's change attribute: the
directory changes when an entry is created, removed, or renamed, and a
fileid is stable for as long as its entry names the same object.  A
fileid is therefore cached with the name rather than with the file
attributes: writes to a file change its size and timestamps without
touching either the name or the fileid.  This document does not change
what a client may hold in this cache or how it validates it; for a
directory on which the attribute is set, however, each enumeration is
satisfied by a READDIR, so for that directory the cache no longer
avoids that traffic.</t>
        </dd>
        <dt>dirent metadata caching</dt>
        <dd>
          <t>A client-side cache of the dirent metadata returned alongside those
entries, used to avoid repeated GETATTR traffic.  Because those file
attributes are not invalidated by the directory's change attribute
(only by writes to the underlying files), this caching is inherently
best-effort and subject to staleness whenever the underlying files are
modified.  This is the caching whose results the attribute defined in
this document constrains: for a directory on which the attribute is
set, <xref target="sec_dirents"/> limits what an honoring client may report for an
entry, however the client structures the cache the value comes from.</t>
        </dd>
        <dt>uncacheable dirent metadata attribute</dt>
        <dd>
          <t>An NFSv4.2 file attribute that advises clients not to report dirent
metadata, such as size and timestamps, from a value held before the
READDIR that most recently returned the entry it describes.</t>
        </dd>
        <dt>revalidation</dt>
        <dd>
          <t>The procedure of <xref target="RFC8881"/> Section 10.3.1 by which a client
determines whether something it holds in a cache is still current: the
client fetches the change attribute of the object from the server,
compares it with the value it cached, and, if they differ, treats what
it cached as invalid.  A client validates when it fetches from the
server; it revalidates before reusing what it cached.  For a cached
directory the attribute compared is the directory's own
(<xref target="RFC8881"/> Section 10.8.2).</t>
        </dd>
        <dt>honoring client</dt>
        <dd>
          <t>A client that implements this attribute and enforces the
always-refetch behavior it defines for a directory on which the
attribute is set.  The attribute is advisory: a client that does not
implement it, or that declines to enforce it, is non-honoring and may
continue to report dirent metadata it held beforehand.</t>
        </dd>
      </dl>
      <t>This document assumes familiarity with NFSv4.2 operations, attributes,
and error handling as defined in <xref target="RFC8881"/> and <xref target="RFC7862"/>.</t>
    </section>
    <section anchor="requirements-language">
      <name>Requirements Language</name>
      <t>The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQUIRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL
NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14>RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>",
"<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to be interpreted as
described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> when, and only when, they
appear in all capitals, as shown here.</t>
      <?line -18?>

</section>
    <section anchor="caching-of-dirent-metadata">
      <name>Caching of Dirent Metadata</name>
      <t>The uncacheable dirent metadata attribute constrains what an honoring
client may report for the entries of a particular directory.  If both
the client and the server support this attribute, and the attribute is
set on a directory, an honoring client goes to the server for each
enumeration and does not report an entry's attributes from a value it
held before that READDIR.  <xref target="sec_dirents"/> states the requirement
normatively.</t>
      <t>That requirement has two halves.  Each enumeration of such a directory
is satisfied by a READDIR rather than from the results of an earlier
one, and what the client reports for an entry that READDIR returned is
what that READDIR supplied, rather than a value held beforehand.  The
first half is the one that
changes what a client may do today: <xref target="RFC8881"/> Section 10.8.2 lets a
client answer an application readdir from a cached snapshot validated
by the directory's change attribute, with no READDIR on the wire at
all, and that change attribute does not move when a file the directory
names is written.  The second half alone would not close the gap,
since a client could satisfy it by sending a READDIR with a minimal
attr_request and reporting the entries' attributes from what it
already held.</t>
      <t>It adds no constraint on the objects the entries name: an honoring
client may continue to hold the dirents themselves, validated by the
directory's change attribute as it would be for any other directory.
Clients typically hold a single cache of a file object's attributes,
populated by whichever operation last returned them; the requirement is
on what the client reports, not on how it structures that cache.</t>
      <t>A server sets it on the directories where it knows the staleness of
cached READDIR attributes is particularly likely and particularly
damaging.  It is a <bcp14>RECOMMENDED</bcp14> attribute for NFSv4.2, in the
attribute-category sense of <xref target="RFC8881"/> Section 5.2 and <xref target="RFC7862"/>
Section 12 rather than the BCP 14 sense; a server is not required to
support it.</t>
      <t>Because the attribute governs what an honoring client reports for the
entries of one directory, rather than the objects those entries name,
it makes no claim about those objects.  A file reached
through a directory on which the attribute is not set is unaffected,
including where the same file is linked into both a directory on which
it is set and one on which it is not.</t>
      <t>This document specifies the required observable behavior rather
than mandating a particular internal implementation strategy.
Clients <bcp14>MAY</bcp14> employ more sophisticated mechanisms, such as
time-limited caches that revalidate against the server on each
READDIR, provided that the externally visible behavior satisfies
<xref target="sec_dirents"/>.</t>
      <t>A client can determine whether the uncacheable dirent metadata attribute
is supported for a given directory by examining the supported_attrs
attribute for that directory's filesystem or by probing support using
the procedures described in <xref target="RFC8178"/>.</t>
      <t>A change to the attribute while a directory is in use may not be
reflected in client behavior immediately.  A client that has cached the
directory's attributes <bcp14>MAY</bcp14> continue to behave as it did before the
change and is not required to act on a value it has not yet observed.
Two ordinary mechanisms bound that delay: the client's cached
attributes for the directory expire under the upper time boundary
described in <xref target="RFC8881"/> Section 10.6, and a client revalidating a
cached directory inspects the directory's change attribute
(<xref target="RFC8881"/> Section 10.8.2), and that attribute changes whenever the
object it describes is modified (<xref target="RFC8881"/> Section 5.8.1.4),
including by a SETATTR of this one.  Clients are expected to observe the change through those
mechanisms and to apply the rule in <xref target="sec_dirents"/> to subsequent
enumerations.</t>
      <t>The uncacheable dirent metadata attribute governs what an honoring
client may report for a directory's entries.  It does NOT govern:</t>
      <ul spacing="normal">
        <li>
          <t>How long a value remains reportable between enumerations.  Attributes
a client obtains for an individual entry at other times, by a direct
GETATTR following a LOOKUP for example, remain governed between
enumerations by the attribute-cache mechanisms already defined by
NFSv4.2 and are subject to the same staleness from concurrent writes.
The rule in <xref target="sec_dirents"/> applies at each enumeration and is
indifferent to which operation last supplied a value.</t>
        </li>
        <li>
          <t>The directory's own attribute cache.  The directory object's own
attributes (mode, owner, etc.) can be cached normally and
revalidated via the directory's change attribute as usual.</t>
        </li>
        <li>
          <t>Operations that do not return file attributes in their response
(for example, LOOKUP without a following GETATTR, ACCESS).  These
are unaffected.</t>
        </li>
      </ul>
      <t>The uncacheable dirent metadata attribute addresses a different
aspect of client-side caching than fattr4_uncacheable_file_data
(<xref target="I-D.ietf-nfsv4-uncacheable-files"/>).  The file data attribute
governs caching of file contents, while the dirent metadata
attribute governs what a client reports for the entries of a
directory it enumerates.
The attributes are independent and may be used separately.</t>
      <t>This attribute follows the same pattern as
fattr4_uncacheable_file_data (<xref target="I-D.ietf-nfsv4-uncacheable-files"/>)
applied at the file-data layer.  In both cases:</t>
      <ul spacing="normal">
        <li>
          <t>The underlying NFSv4.2 protocol permits client-side caching that
can become stale.</t>
        </li>
        <li>
          <t>Client caching of the relevant data is widely implemented in
practice and reduces network traffic for stable objects.</t>
        </li>
        <li>
          <t>For specific objects where the deployment knows the caching will
produce incorrect results, the server requires a mechanism to
instruct an honoring client not to rely on it for those specific
objects.</t>
        </li>
        <li>
          <t>The attribute does not redefine the legality of caching in the
general case.  It is a per-object server-side signal that the
caching is known to be unsuitable for that object.</t>
        </li>
      </ul>
      <t>The attribute does NOT make dirent metadata caching reliable for
directories where it is not set.  Clients <bcp14>MUST NOT</bcp14> interpret the
absence of fattr4_uncacheable_dirent_metadata, or its value being
false, as a guarantee that cached READDIR attributes are
authoritative.  As stated in <xref target="RFC8881"/> Section 10.6, all
client-cached attributes are subject to staleness; the attribute
defined in this document only identifies directories for which
staleness is particularly likely and particularly damaging.  The base
specification separates the two concerns this attribute is often accused
of conflating: <xref target="RFC8881"/> Section 10.8.2 governs caching of the
directory entries themselves, while Section 10.6 governs caching of the
file attributes that arrive alongside them.  This attribute leaves what
a client may hold under either unchanged; it requires a READDIR for each
enumeration and constrains what may be reported for an entry, as
<xref target="sec_dirents"/> states.</t>
      <t>This attribute does not define behavior for positive or negative
name caching, nor for LOOKUP results other than the file attributes
it constrains an honoring client from reporting for an entry.</t>
      <t>A directory delegation (<xref target="RFC8881"/> Section 10.9) lets a client cache a
directory's entries and the directory's own attributes until the server
recalls the delegation.  It is not recalled when the attributes of an
entry within the directory change (<xref target="RFC8881"/> Sections 10.9.2 and
10.9.4), so a directory delegation does not, by itself, keep the file
attributes returned by READDIR fresh.  NOTIFY4_CHANGE_CHILD_ATTRS,
requested through GET_DIR_DELEGATION, can deliver changed child
attributes to a delegated client, but it is not a substitute for this
attribute in the deployments of <xref target="deployment-motivation"/>:
GET_DIR_DELEGATION is <bcp14>OPTIONAL</bcp14> and is not implemented by the clients and
servers those deployments use; notification cost scales with the number
of delegated clients times the number of changes, which a directory
written by thousands of clients makes prohibitive (and <xref target="RFC8881"/>
Section 10.9.4 permits a server that finds a directory is causing too
many notifications to decline to delegate it); and the
dirent_notif_delay attribute lets a server bound or refuse
child-attribute notification, so a client cannot rely on notification
for freshness.</t>
      <section anchor="sec_dirents">
        <name>Uncacheable Dirent Metadata</name>
        <t>The fattr4_uncacheable_dirent_metadata attribute is a read-write boolean
attribute that applies to directory objects.
Authorization to query or modify this attribute is governed by
existing NFSv4.2 authorization mechanisms.  <xref target="tab_attr"/> summarizes
the attribute using the columns of <xref target="RFC7862"/> Section 12.1, where
"R W" indicates that GETATTR may retrieve the attribute and SETATTR
may set it.</t>
        <table anchor="tab_attr">
          <name>New RECOMMENDED Attribute</name>
          <thead>
            <tr>
              <th align="left">Name</th>
              <th align="left">Id</th>
              <th align="left">Data Type</th>
              <th align="left">Acc</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">uncacheable_dirent_metadata</td>
              <td align="left">88</td>
              <td align="left">bool</td>
              <td align="left">R W</td>
            </tr>
          </tbody>
        </table>
        <t>The attribute applies only to directory objects.  A server that
receives a GETATTR requesting fattr4_uncacheable_dirent_metadata on an
object that is not a directory <bcp14>MUST</bcp14> return FALSE: support for an
attribute is advertised per file system (<xref target="RFC8881"/> Section 5.8.1.1),
so a server that supports this attribute supports it for every object
in that file system and owes a value for each (<xref target="RFC8881"/> Section
18.7.3).  As with rawdev (<xref target="RFC8881"/> Section 5.8.2.31), the value is
not useful for an object the attribute does not describe.  A server that receives a SETATTR requesting
fattr4_uncacheable_dirent_metadata on an object that is not a directory
<bcp14>MUST</bcp14> return NFS4ERR_WRONG_TYPE (<xref target="RFC8881"/> Section 15.1.2.9).</t>
        <t>Whether a SETATTR of the attribute is permitted at all is subject to
server policy: the server decides, on grounds such as administrative
configuration, export policy, or access control.  A request that is
not permitted <bcp14>MUST</bcp14> be rejected with NFS4ERR_ACCESS (<xref target="RFC8881"/> Section
15.1.6.1) or, where the refusal is because the requester is neither the
owner nor a privileged user, NFS4ERR_PERM (<xref target="RFC8881"/> Section
15.1.6.2).  A server that supports the attribute <bcp14>MUST NOT</bcp14> refuse such a
request with NFS4ERR_INVAL: <xref target="RFC8178"/> Section 4.4.3 reserves that
response to a SETATTR of the attribute for a server with no knowledge
of it, and a client probing for support would take the refusal as
ignorance.</t>
        <t>This document does not require a server to implement any particular
policy, nor any particular means of configuring one.  A server that
always permits, or always refuses, requests to set or clear the
attribute conforms to this document; what the protocol requires is
only the error returned when a request is refused.</t>
        <t>This attribute is set per directory.  This document does not define
propagation of the attribute to subdirectories created within a
directory on which it is set; any such inheritance is a matter of
local server policy.</t>
        <t>If a directory object has the uncacheable dirent metadata attribute
set, an honoring client <bcp14>MUST NOT</bcp14> satisfy a readdir of that directory
from READDIR results obtained during a different enumeration, and <bcp14>MUST
NOT</bcp14> report, for an entry, a value of a dirent metadata attribute that
it received before the READDIR that most recently returned that entry,
whatever operation supplied that value.</t>
        <t>A client holding an OPEN_DELEGATE_WRITE delegation on a file the
directory names may hold a size or change value more current than the
server's, which the server obtains from it by CB_GETATTR (<xref target="RFC8881"/>
Section 10.4.3).  The requirement above is directed at values older
than what the server would return, and does not require such a client
to replace its own values with older ones.</t>
        <t>An honoring client therefore either names the attributes it will report
in that READDIR's attr_request, or obtains them afterwards; a value it
held beforehand is not usable for that entry.  An honoring client
<bcp14>SHOULD</bcp14> name them in attr_request.  For a listing or a
directory-tree synchronization pass, which reads the size and
time_modify of every entry, obtaining them afterwards instead costs
one GETATTR per entry, which is the traffic the deployments of
<xref target="deployment-motivation"/> use this attribute to avoid.  A client that
knows no such read will follow may still obtain them afterwards, at
that cost where one does.</t>
        <t>Entries carried by the READDIRs of a single enumeration <bcp14>MAY</bcp14> be
retained until that enumeration completes, and their metadata <bcp14>MAY</bcp14> be
retained after it: what bounds the reporting of that metadata is the
next enumeration, under the rule above, and the attribute-cache
mechanisms of <xref target="RFC8881"/> Section 10.6 until then.  <xref target="RFC8881"/> Section
10.8.2 requires such a cache to be a consistent snapshot of directory
contents, validated by the directory's change attribute; because that
attribute does not move when a file the directory names is written, it
provides no corresponding guarantee for the entries' file attributes,
which are as of the READDIR that carried them.</t>
        <t>The uncacheable dirent metadata attribute does not modify the
semantics of the NFSv4.2 change attribute, and does not make any
change attribute the trigger for the rule above: the event that
renders a held value unreportable for an entry is the enumeration that
returns that entry, whatever any change attribute does.  Clients <bcp14>MUST</bcp14>
continue to use the change attribute to detect directory modifications
and to determine when directory contents may have changed, even for a
directory on which this attribute is set.  Constraining what an
honoring client may report for an entry does not remove the need for
change-based validation.</t>
        <t>This attribute is advisory, so servers <bcp14>SHOULD NOT</bcp14> rely on it for
correctness: a client that does not implement it, or that declines to
enforce it, may continue to report dirent metadata from a value it
held before the READDIR that most recently returned the entry.  A
server cannot distinguish those clients from honoring ones.  Observing
a GETATTR or a SETATTR of the attribute shows only that a client knows
the attribute exists, not that it enforces the rule of
<xref target="sec_dirents"/>, so such a request is not a basis for assuming it
does.</t>
        <t>A directory delegation would let a client serve dirent
metadata from its cache without refetching, which is incompatible with
the always-refetch rule this attribute defines.  Accordingly, if a
directory has the uncacheable dirent metadata attribute set and an
outstanding directory delegation, the server <bcp14>MUST</bcp14> recall the
delegation, after which the client is subject to <xref target="sec_dirents"/> on
each subsequent enumeration.  A server <bcp14>MUST NOT</bcp14> grant a new directory
delegation on a directory while the uncacheable dirent metadata
attribute is set on that directory.</t>
      </section>
      <section anchor="sec_pnfs">
        <name>Parallel NFS</name>
        <t>The uncacheable dirent metadata attribute is an attribute of the
directory, and a pNFS client (<xref target="RFC8881"/> Section 12) obtains it, and
the entries it governs, from the metadata server.  A storage device
serves data, not attributes: the file layout, for example, admits only
READ, WRITE, COMMIT and housekeeping operations on a data server
(<xref target="RFC8881"/> Section 13.6), and a layout whose storage protocol is not
NFS has no GETATTR or READDIR to send.  Whether the files an entry names are read
or written through a layout therefore does not change what
<xref target="sec_dirents"/> requires of an honoring client.</t>
        <t>What those values reflect is a separate question, and one the layout
type answers.  Where a client writes to a storage device and the
metadata server learns the resulting size and time_modify only on
LAYOUTCOMMIT (<xref target="RFC8881"/> Section 12.5.4), a READDIR issued before
that LAYOUTCOMMIT returns the earlier values, and an honoring client
reports them.  The attribute removes the staleness a client's own
cache introduces; it does not make the metadata server report what it
has not yet been told.</t>
      </section>
    </section>
    <section anchor="example-directory-enumeration-with-and-without-dirent-metadata-caching">
      <name>Example: Directory Enumeration With and Without Dirent Metadata Caching</name>
      <t>This example illustrates the difference in client-visible behavior when
dirent metadata caching is enabled versus when the uncacheable
dirent metadata attribute is set on a directory.  In both scenarios
each readdir("/dir") is a separate enumeration -- the application opens
the directory, reads it to end-of-file and closes it, and opens it
again for the second.  The set of entries does not change between the
two; an attribute value of one entry is updated at the server between
them.  The difference is whether the stat after the second readdir
observes the updated value.</t>
      <section anchor="classic-directory-enumeration-dirent-metadata-cached">
        <name>Classic Directory Enumeration (Dirent Metadata Cached)</name>
        <t>In this scenario, the client caches dirent metadata obtained from the
server and reuses it after a second readdir.</t>
        <figure anchor="fig-cached-dirents">
          <name>Dirent Metadata Cached</name>
          <artwork><![CDATA[
Application             NFSv4.2 Client        NFSv4.2 Server
-----------             --------------        --------------
readdir("/dir")
   |
   |                     READDIR, size and
   |                     time_modify requested
   |-------------------->------------------------>
   |                     entries:
   |                       a (size=100)
   |                       b (size=200)
   |<--------------------<------------------------
   |<-- names a, b
                        (attributes retained per
                         entry, bounded by the
                         attribute cache lifetime)

                                        (concurrent writer extends
                                         a from size=100 to
                                         size=500)

readdir("/dir")
   |                     (served from the cached
   |                      READDIR result; no
   |                      network traffic)
   |<-- names a, b

stat("/dir/a")
   |                     (served from the retained
   |                      READDIR attributes)
   |<-- size=100
]]></artwork>
        </figure>
        <t>In this case, <xref target="fig-cached-dirents"/> shows a second readdir satisfied
from the cached result of the first.  No READDIR reaches the server, so
nothing refreshes what the client holds for entry a, and the stat that
follows reports the size as it was at the time of the first READDIR --
not the update the server took between the two.  This behavior
maximizes performance and is what <xref target="RFC8881"/> Sections 10.6 and 10.8.2
permit, but for the duration of the cache lifetime it can result in
applications observing dirent attribute values that do not reflect the
current state of the files the entries name.</t>
      </section>
      <section anchor="directory-enumeration-with-uncacheable-dirent-metadata">
        <name>Directory Enumeration With Uncacheable Dirent Metadata</name>
        <t>In this scenario, the directory has the uncacheable dirent metadata
attribute set.  The client retrieves dirent metadata from
the server on each READDIR.</t>
        <figure anchor="fig-uncached-dirents">
          <name>Dirent Metadata Not Cached</name>
          <artwork><![CDATA[
Application             NFSv4.2 Client        NFSv4.2 Server
-----------             --------------        --------------
readdir("/dir")
   |
   |                     READDIR, size and
   |                     time_modify requested
   |-------------------->------------------------>
   |                     entries:
   |                       a (size=100)
   |                       b (size=200)
   |<--------------------<------------------------
   |<-- names a, b

                                        (concurrent writer extends
                                         a from size=100 to
                                         size=500)

readdir("/dir")
   |
   |                     READDIR, size and
   |                     time_modify requested
   |                     (cached result not used)
   |-------------------->------------------------>
   |                     entries:
   |                       a (size=500)
   |                       b (size=200)
   |<--------------------<------------------------
   |<-- names a, b

stat("/dir/a")
   |<-- size=500
]]></artwork>
        </figure>
        <t>In this case, <xref target="fig-uncached-dirents"/> shows the second readdir going
to the server, and the stat that follows reporting what that READDIR
returned.  The set of entries is unchanged between the two calls; only
the attribute value differs.  The client may still cache other
information, provided it reports no value for these entries that it
received before the READDIR that most recently returned them.</t>
      </section>
      <section anchor="discussion">
        <name>Discussion</name>
        <t>This example demonstrates that the uncacheable dirent metadata
attribute does not mandate a particular client implementation, but
it does require the always-refetch behavior specified in
<xref target="sec_dirents"/>.  The attribute ensures that an honoring client's report
of an entry's attributes reflects the server's state as of the
enumeration that returned it, in deployments where staleness of
READDIR-returned attributes is known to be a recurring problem.</t>
      </section>
    </section>
    <section anchor="implementation-status">
      <name>Implementation Status</name>
      <t>Note to RFC Editor: please remove this section prior to publication.</t>
      <t>There is a prototype Hammerspace server which implements the
uncacheable dirent metadata attribute and a prototype Linux client
which treats the attribute as an indication to satisfy each
enumeration of such a directory with a READDIR that requests the
entries' attributes, rather than from its readdir cache.</t>
      <t>In the prototype, directories whose contents change at the server
at a rate exceeding typical client cache lifetimes are marked with
the fattr4_uncacheable_dirent_metadata attribute.</t>
      <t>The Linux client decodes the attribute in fs/nfs/nfs4xdr.c into a
per-inode flag (nfsi-&gt;uncacheable_dirent_metadata, declared in
include/linux/nfs_fs.h).  The readdir path in fs/nfs/dir.c consults
this flag to skip the readdir cache and refetch from the
server on each readdir call that is not already at end of directory.
It also forces the client onto its attribute-returning READDIR path for
such a directory, where the server has been found capable of it: a
READDIR that returns only names would refresh the
entries but leave their attributes to the client's attribute caches, and
the
cache-bypassing path above never accrues the cache usage that would
otherwise select that path for the continuation READDIRs of a large
directory.  Clients may employ more sophisticated
mechanisms, such as time-limited caches that revalidate against the
server on each READDIR, provided that the externally observable
behavior satisfies <xref target="sec_dirents"/>.</t>
      <t>The Linux client implementation encodes this attribute as a flag
distinct from the companion file-data attribute defined in
<xref target="I-D.ietf-nfsv4-uncacheable-files"/>; the two attributes are separated
as the two documents specify.  That implementation is posted to
linux-nfs (patches 4-6 of
<eref target="https://lore.kernel.org/linux-nfs/cover.1785140181.git.snitzer@kernel.org/">https://lore.kernel.org/linux-nfs/cover.1785140181.git.snitzer@kernel.org/</eref>).</t>
      <t>Experience with the prototype indicates that the attribute enables
servers to identify directories whose contents change faster than
typical NFSv4.2 client cache lifetimes can track, while remaining
compatible with existing NFSv4.2 semantics.</t>
    </section>
    <section anchor="xdr-for-the-uncacheable-dirent-metadata-attribute">
      <name>XDR for the Uncacheable Dirent Metadata Attribute</name>
      <sourcecode type="xdr"><![CDATA[
///
/// typedef bool            fattr4_uncacheable_dirent_metadata;
///
/// const FATTR4_UNCACHEABLE_DIRENT_METADATA   = 88;
///
]]></sourcecode>
    </section>
    <section anchor="extraction-of-xdr">
      <name>Extraction of XDR</name>
      <t>This document contains the external data representation (XDR)
<xref target="RFC4506"/> description of the uncacheable dirent metadata attribute.  The XDR
description is presented in a manner that facilitates easy extraction
into a ready-to-compile format. To extract the machine-readable XDR
description, use the following shell script, which relies on the sh, grep,
and sed utilities as specified by <xref target="POSIX"/>:</t>
      <sourcecode type="shell"><![CDATA[
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
]]></sourcecode>
      <t>For example, if the script is named 'extract.sh' and this document is
named 'spec.txt', execute the following command:</t>
      <sourcecode type="shell"><![CDATA[
sh extract.sh < spec.txt > uncacheable_prot.x
]]></sourcecode>
      <t>This script removes leading blank spaces and the sentinel sequence '///'
from each line. XDR descriptions with the sentinel sequence are embedded
throughout the document.</t>
      <t>Note that the XDR code contained in this document depends on types from
the NFSv4.2 nfs4_prot.x file (generated from <xref target="RFC7863"/>).  This includes
both nfs types that end with a 4, such as offset4, length4, etc., as
well as more generic types such as uint32_t and uint64_t.</t>
      <t>While the XDR can be appended to that from <xref target="RFC7863"/>, the code snippets
should be placed in their appropriate sections within the existing XDR.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>This attribute is not a security mechanism.  It addresses correctness
of client-side caching when client-cached dirent metadata
can become stale relative to the current state of the directory at
the server.  It does not change NFSv4.2 authentication or authorization
semantics, and it does not impose access controls on the entries it
describes.</t>
      <t>Authorization to set or modify the fattr4_uncacheable_dirent_metadata
attribute is governed by existing NFSv4.2 authorization mechanisms.
<xref target="sec_dirents"/> states what a server returns for a request its policy
refuses.  This document does not define a new authorization model.</t>
      <t>Because the attribute is visible to and affects the caching behavior
of all honoring clients, servers should consider the implications of
allowing unprivileged users to set or clear it.  Setting the attribute
on a directory forces honoring clients to abandon READDIR caching and
refetch dirent metadata on every enumeration, which can
increase load on the server and on other clients.</t>
      <t>This attribute does not change the semantics of sec_label or the
enforcement of MAC security policies.  A client's obligations under
Labeled NFS (see <xref target="RFC7204"/> for background, and <xref target="RFC7862"/> Section 9
for the NFSv4.2 mechanism) are the same whether dirent metadata is
refetched or served from a cache.</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
      <t>NFSv4.2 attribute numbers are assigned by working group coordination
rather than through an IANA registry.  This document uses attribute
number 88, chosen alongside attribute number 87 in
<xref target="I-D.ietf-nfsv4-uncacheable-files"/>.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC4506">
          <front>
            <title>XDR: External Data Representation Standard</title>
            <author fullname="M. Eisler" initials="M." role="editor" surname="Eisler"/>
            <date month="May" year="2006"/>
            <abstract>
              <t>This document describes the External Data Representation Standard (XDR) protocol as it is currently deployed and accepted. This document obsoletes RFC 1832. [STANDARDS-TRACK]</t>
            </abstract>
          </front>
          <seriesInfo name="STD" value="67"/>
          <seriesInfo name="RFC" value="4506"/>
          <seriesInfo name="DOI" value="10.17487/RFC4506"/>
        </reference>
        <reference anchor="RFC7862">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 Protocol</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document describes NFS version 4 minor version 2; it describes the protocol extensions made from NFS version 4 minor version 1. Major extensions introduced in NFS version 4 minor version 2 include the following: Server-Side Copy, Application Input/Output (I/O) Advise, Space Reservations, Sparse Files, Application Data Blocks, and Labeled NFS.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7862"/>
          <seriesInfo name="DOI" value="10.17487/RFC7862"/>
        </reference>
        <reference anchor="RFC7863">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 2 External Data Representation Standard (XDR) Description</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="November" year="2016"/>
            <abstract>
              <t>This document provides the External Data Representation (XDR) description for NFS version 4 minor version 2.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7863"/>
          <seriesInfo name="DOI" value="10.17487/RFC7863"/>
        </reference>
        <reference anchor="RFC8178">
          <front>
            <title>Rules for NFSv4 Extensions and Minor Versions</title>
            <author fullname="D. Noveck" initials="D." surname="Noveck"/>
            <date month="July" year="2017"/>
            <abstract>
              <t>This document describes the rules relating to the extension of the NFSv4 family of protocols. It covers the creation of minor versions, the addition of optional features to existing minor versions, and the correction of flaws in features already published as Proposed Standards. The rules relating to the construction of minor versions and the interaction of minor version implementations that appear in this document supersede the minor versioning rules in RFC 5661 and other RFCs defining minor versions.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8178"/>
          <seriesInfo name="DOI" value="10.17487/RFC8178"/>
        </reference>
        <reference anchor="RFC8881">
          <front>
            <title>Network File System (NFS) Version 4 Minor Version 1 Protocol</title>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <author fullname="C. Lever" initials="C." surname="Lever"/>
            <date month="August" year="2020"/>
            <abstract>
              <t>This document describes the Network File System (NFS) version 4 minor version 1, including features retained from the base protocol (NFS version 4 minor version 0, which is specified in RFC 7530) and protocol extensions made subsequently. The later minor version has no dependencies on NFS version 4 minor version 0, and is considered a separate protocol.</t>
              <t>This document obsoletes RFC 5661. It substantially revises the treatment of features relating to multi-server namespace, superseding the description of those features appearing in RFC 5661.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8881"/>
          <seriesInfo name="DOI" value="10.17487/RFC8881"/>
        </reference>
        <reference anchor="RFC2119">
          <front>
            <title>Key words for use in RFCs to Indicate Requirement Levels</title>
            <author fullname="S. Bradner" initials="S." surname="Bradner"/>
            <date month="March" year="1997"/>
            <abstract>
              <t>In many standards track documents several words are used to signify the requirements in the specification. These words are often capitalized. This document defines these words as they should be interpreted in IETF documents. This document specifies an Internet Best Current Practices for the Internet Community, and requests discussion and suggestions for improvements.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="2119"/>
          <seriesInfo name="DOI" value="10.17487/RFC2119"/>
        </reference>
        <reference anchor="RFC8174">
          <front>
            <title>Ambiguity of Uppercase vs Lowercase in RFC 2119 Key Words</title>
            <author fullname="B. Leiba" initials="B." surname="Leiba"/>
            <date month="May" year="2017"/>
            <abstract>
              <t>RFC 2119 specifies common key words that may be used in protocol specifications. This document aims to reduce the ambiguity by clarifying that only UPPERCASE usage of the key words have the defined special meanings.</t>
            </abstract>
          </front>
          <seriesInfo name="BCP" value="14"/>
          <seriesInfo name="RFC" value="8174"/>
          <seriesInfo name="DOI" value="10.17487/RFC8174"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="POSIX" target="https://standards.ieee.org/ieee/1003.1/7700/">
          <front>
            <title>IEEE Standard for Information Technology--Portable Operating System Interface (POSIX) Base Specifications, Issue 8</title>
            <author>
              <organization>IEEE</organization>
            </author>
            <author>
              <organization>The Open Group</organization>
            </author>
            <date year="2024"/>
          </front>
          <seriesInfo name="IEEE" value="Std 1003.1-2024"/>
        </reference>
        <reference anchor="I-D.ietf-nfsv4-uncacheable-files">
          <front>
            <title>Adding an Uncacheable File Data Attribute to NFSv4.2</title>
            <author fullname="Thomas Haynes" initials="T." surname="Haynes">
              <organization>Hammerspace</organization>
            </author>
            <date day="17" month="September" year="2026"/>
            <abstract>
              <t>   Network File System version 4.2 (NFSv4.2) clients commonly perform
   client-side caching of file data in order to improve performance.  On
   some systems, applications may influence client data caching
   behavior, but there is no standardized mechanism for a server or
   administrator to indicate that particular file data should not be
   cached by clients for reasons of performance or correctness.  This
   document introduces a new file data caching attribute for NFSv4.2.
   Files marked with this attribute are intended to be accessed with
   client-side caching of file data suppressed, in order to support
   workloads that require predictable data visibility.  This document
   extends NFSv4.2.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-ietf-nfsv4-uncacheable-files-16"/>
        </reference>
        <reference anchor="RFC7204">
          <front>
            <title>Requirements for Labeled NFS</title>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="April" year="2014"/>
            <abstract>
              <t>This memo outlines high-level requirements for the integration of flexible Mandatory Access Control (MAC) functionality into the Network File System (NFS) version 4.2 (NFSv4.2). It describes the level of protections that should be provided over protocol components and the basic structure of the proposed system. The intent here is not to present the protocol changes but to describe the environment in which they reside.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7204"/>
          <seriesInfo name="DOI" value="10.17487/RFC7204"/>
        </reference>
      </references>
    </references>
    <?line 812?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust, Mike Snitzer, Jon Flynn, Keith Mannthey, and Thomas
Haynes all worked on the prototype at Hammerspace.</t>
      <t>Rick Macklem, Chuck Lever, Dave Noveck, Sorin Faibish, Christoph
Hellwig, Jeff Layton, and Jamie Koehl reviewed the document.</t>
      <t>Chris Inacio, Brian Pawlowski, Chuck Lever, Zahed Sarker, and
Gorry Fairhurst helped guide this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
E6jfvT99qz7fKeiqs4vT1Hku08LAhDy4MDAEfTJuXynVqxUgULWJZuk0NmJ0
ZsEgKd3RAhLNZSKauDrw+U+Xapft7fDLDtnOuOgUpGVjLG70GhpkdanDYvOp
ltcETlYxScIu7Q3dEmXaP8m9E9wrgDNMKeSKsRN5CklcepQM3cCpG136bUKf
oqiq2NzYHkNDIzKY6oKBJrQi5RhaJEkyT2GJQTybzYA/b3B+8rMdpceLxMNf
1+0wuJPpxNu7N1KzTjEyepIvWlsJ/Sy5OFXtpsTdE0biaLcw0EU6pEw6TwT4
jC1X4T8+tbhb6bkpjYHDG2gQkekdRJQ0SlNoV1Iz24EUszOQYtkKaYnyZDpR
q7rGcMqmKJmgaLQEIZlTa8Re3CPFp+oeCZtHeE4SxVHYMKK6vJKI7VQifNr3
LsEanc7AMkrqRNP4K5bzUNGQiEUN/2UtcUgtSLlreMrUVHLCQdZ1F6FtA80d
M8ON2fpkc0KjniqvY7MNdxgVOFq0JYljdQ6l+4nVe+r8ZaJOUn6wu6/taQxz
FuTZ91iAHJsPmj7tow7DWJOJlKG4G2NZQQfF7O9XNZE+S4xctHL+6ZFJcSyA
p0GlNGmRq6ErtitJOcQUUSfF/KAb3dYJzJjTyWo1PFpqLB298FWZ/eRwErpB
BSKt9fqoMMFwq0y+Jb4pWwdGzPaMXuZ2P59Ld0ebsNiHwjGijVrfSH5o+JAA
ZXG6LpIKnlZbg9dy8sg7yYjOOlXmyYCPYtNft99JFbZ61tQF2j5gSUWTk9YA
RSr0knCkkSqrVmllWhSpVMtKH8v7JIA9IMjc1m3eY9fiITQfEpogeyafbrX7
CkgTlSxTyB24epwXEvQOMXU3tbHJtdfG1sZCColq6Do2YnUy2yaZtLWrFdF+
sRXRpK2I3R6CHW2HtzcN3dVodFGVa5hAor/pPCGO3GuMnGdqKl7IjrH2HdXv
Yegkhs3KW+MW2GGncblWIQspwU7AlMf66TQP7o9Ne06ZOUkPt7J+jEWWyomT
xWGaMKeNGzS5MdmIrtyRYWNjMHfJfrlwUTq52/ih2hIeNCmlT9IUS5nDZAgL
de82VP2MV/Lp2220dMIO70g7LaJvMqHy1zmOIfPtkp+vcqtCDTvGMNcNvWaD
Rqf1QKNVLyKhLkzysW+QXMa6Plr3cfpdkvLvJmxBv1I0MZZwtmakJV5+8Pjm
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
ygnNlPk/NZJLyRmVAAA=

-->

</rfc>
