<?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.35 (Ruby 2.6.10) -->
<?rfc docmapping="yes"?>
<?rfc comments="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-haynes-nfsv4-recalldevice-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.33.0 -->
  <front>
    <title abbrev="RECALL_DEVICE">Deviceid-Scoped Layout Recall for NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-recalldevice-01"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <date/>
    <area>Transport</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 36?>

<t>The Parallel Network File System (pNFS) allows for the metadata
server to use CB_LAYOUTRECALL to recall a layout from a client
by file id or file system id or all. It also allows the server to
use CB_NOTIFY_DEVICEID to delete a deviceid. It does not provide
a mechanism for the metadata server to recall all layouts that
have a data file on a specific deviceid.  This document presents
an extension to RFC7862 to allow the server to recall layouts from
clients based on deviceid.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 47?>

<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/browse/nfsv4/"/>.
Working Group information can be found at
<eref target="https://datatracker.ietf.org/wg/nfsv4/about/"/>.</t>
    </note>
  </front>
  <middle>
    <?line 56?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In the Network File System version 4 (NFSv4) with a Parallel NFS
(pNFS) metadata server (<xref target="RFC8881"/>), there is no mechanism for the
metadata server to recall layouts from the client when a particular
deviceid (see Section 3.3.14 of <xref target="RFC8881"/>) either temporarily or
permanently is no longer available.</t>
      <t>The Flex Files layout type (<xref target="RFC8435"/>) is a primary motivating
use case.  A Flex Files layout describes data spread across multiple
data servers, each identified by a distinct deviceid, which may
reside in separate power fault domains.</t>
      <t>One use case is when the deviceids in a layout are separated by
power fault domains. Each layout might describe 3 different
devices, each contained in a different power fault domain. In
such a scenario, a single fault domain can have the power
removed and not cause the loss of access to the data.  However,
client I/O will be impacted as the client still has to perform
WRITEs (see Section 18.32 of <xref target="RFC8881"/>) to the unavailable device,
send LAYOUTERRORs (see Section 15.6 of <xref target="RFC7862"/>) to inform the
metadata server of NFS4ERR_NXIO (see Section 15.1.16.3 of
<xref target="RFC8881"/>).</t>
      <t>If the metadata server had the means to recall layouts by deviceid,
a lot of this unnecessary traffic could be eliminated.  While the
metadata server could use LAYOUTRECALL4_ALL to recall all of a
client's layouts, that would evict layouts pointing at healthy
devices unnecessarily.  The deviceid-specific recall is surgical:
only the layouts referencing the unavailable device are returned,
leaving unaffected layouts in place.  Similarly, while the metadata
server could recall affected layouts one by one via
LAYOUTRECALL4_FILE, that generates one RPC per file and the work
can instead be offloaded to the client with a single recall.</t>
      <t>Besides the use case above, consider if the metadata server wants to
set the NOTIFY4_DEVICEID_DELETE in the CB_NOTIFY_DEVICEID callback
(see Section 20.12 of <xref target="RFC8881"/>). This flag cannot be set if a layout
is outstanding for a deviceid. While the metadata server can revoke
all such layouts, there is no way to know that the client has
acknowledged that revocation and hence is still not doing I/O
to other data files in the layout. The metadata server could fence
those layouts as well (see Section 12.5.5 of <xref target="RFC8881"/>), but that
can be an expensive operation.</t>
      <t>Using the process detailed in <xref target="RFC8178"/>, the revisions in this
document become an extension of NFSv4.2 <xref target="RFC7862"/>. They are built
on top of the external data representation (XDR) <xref target="RFC4506"/> generated
from <xref target="RFC7863"/>.</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="capability">
      <name>Client Capability Advertisement</name>
      <t>Before the server may send a CB_LAYOUTRECALL with
LAYOUTRECALL4_DEVICEID, it <bcp14>MUST</bcp14> know that the client supports
the new union arm.  Per <xref target="RFC8178"/> Section 6, a server <bcp14>MUST NOT</bcp14>
send a new callback operation or new union arm to a client that
has not indicated support for it.</t>
      <t>A client that supports LAYOUTRECALL4_DEVICEID signals this by
setting a new flag in the eia_flags field of the EXCHANGE_ID
operation (see Section 18.35 of <xref target="RFC8881"/>):</t>
      <sourcecode type="xdr"><![CDATA[
///    const EXCHGID4_FLAG_SUPP_RECALL_DEVICEID = 0x02000000;
///
]]></sourcecode>
      <t>The specific bit value 0x02000000 is a placeholder.  EXCHGID4 flag
bit values are assigned from the reserved flag space defined in
Section 18.35 of <xref target="RFC8881"/> and are coordinated across in-flight
NFSv4 Working Group extensions.  The final value will be confirmed
during Working Group Last Call.</t>
      <t>A client that sets EXCHGID4_FLAG_SUPP_RECALL_DEVICEID in its
EXCHANGE_ID request advertises that it supports handling
CB_LAYOUTRECALL with a LAYOUTRECALL4_DEVICEID recall type.</t>
      <t>A server <bcp14>MUST NOT</bcp14> send a CB_LAYOUTRECALL with
LAYOUTRECALL4_DEVICEID to a client that did not set
EXCHGID4_FLAG_SUPP_RECALL_DEVICEID in its EXCHANGE_ID request.
A server that does not wish to support this capability <bcp14>MAY</bcp14>
ignore the flag.</t>
      <t>If the client does not set EXCHGID4_FLAG_SUPP_RECALL_DEVICEID,
the server <bcp14>MAY</bcp14> fall back to recalling individual layouts via
LAYOUTRECALL4_FILE (one CB_LAYOUTRECALL per layout file that
references the unavailable deviceid), as described in Section 20.3
of <xref target="RFC8881"/>.  This is less efficient but correct, and preserves
interoperability with clients that predate this extension.</t>
    </section>
    <section anchor="extension-to-cblayoutrecall-recall-layout-from-client">
      <name>Extension to CB_LAYOUTRECALL - Recall Layout from Client</name>
      <t>The original union layoutrecall4 (see Section 20.3.1 of <xref target="RFC8881"/>) is:</t>
      <sourcecode type="xdr"><![CDATA[
enum layoutrecall_type4 {
        LAYOUTRECALL4_FILE = LAYOUT4_RET_REC_FILE,
        LAYOUTRECALL4_FSID = LAYOUT4_RET_REC_FSID,
        LAYOUTRECALL4_ALL  = LAYOUT4_RET_REC_ALL
};

union layoutrecall4 switch(layoutrecall_type4 lor_recalltype) {
   case LAYOUTRECALL4_FILE:
           layoutrecall_file4 lor_layout;
   case LAYOUTRECALL4_FSID:
           fsid4              lor_fsid;
   case LAYOUTRECALL4_ALL:
           void;
   };
]]></sourcecode>
      <t>The proposed extension is:</t>
      <sourcecode type="xdr"><![CDATA[
///    const LAYOUT4_RET_REC_DEVICEID  = 4;
///
///    enum layoutrecall_type4 {
///           LAYOUTRECALL4_FILE     = LAYOUT4_RET_REC_FILE,
///           LAYOUTRECALL4_FSID     = LAYOUT4_RET_REC_FSID,
///           LAYOUTRECALL4_ALL      = LAYOUT4_RET_REC_ALL,
///           LAYOUTRECALL4_DEVICEID = LAYOUT4_RET_REC_DEVICEID
///   };
///
/// union layoutrecall4 switch(layoutrecall_type4 lor_recalltype) {
///   case LAYOUTRECALL4_FILE:
///           layoutrecall_file4 lor_layout;
///   case LAYOUTRECALL4_FSID:
///           fsid4              lor_fsid;
///   case LAYOUTRECALL4_DEVICEID:
///           deviceid4          lor_deviceid;
///   case LAYOUTRECALL4_ALL:
///           void;
///   };
]]></sourcecode>
      <t>Note that LAYOUT4<em>RET_REC</em>* constants are shared between
layoutrecall_type4 (used in CB_LAYOUTRECALL) and layoutreturn_type4
(used in LAYOUTRETURN, see Section 18.44.1 of <xref target="RFC8881"/>).  Adding
LAYOUT4_RET_REC_DEVICEID = 4 therefore also extends layoutreturn_type4
with a LAYOUTRETURN4_DEVICEID value.  A client that receives a
LAYOUTRETURN with lor_recalltype set to LAYOUTRETURN4_DEVICEID and
does not recognise it <bcp14>MUST</bcp14> return NFS4ERR_UNION_NOTSUPP per <xref target="RFC8178"/>.</t>
      <t>The server <bcp14>MUST NOT</bcp14> send CB_LAYOUTRECALL with LAYOUTRECALL4_DEVICEID
to a client that has not set EXCHGID4_FLAG_SUPP_RECALL_DEVICEID
(see <xref target="capability"/>).  This satisfies the requirement in Section 6
of <xref target="RFC8178"/> that a server establish client awareness before
sending new callback extensions.</t>
      <t>The existing clora_iomode field in CB_LAYOUTRECALL4args
(see Section 20.3.1 of <xref target="RFC8881"/>) applies normally: the client
<bcp14>MUST</bcp14> return all layouts matching both the given deviceid and the
given iomode.  The server can determine that the client no longer
has any layouts with the given deviceid and iomode once the client
replies with NFS4ERR_NOMATCHING_LAYOUT.</t>
    </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 extension to CB_LAYOUTRECALL.
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:</t>
      <sourcecode type="shell"><![CDATA[
<CODE BEGINS>
#!/bin/sh
grep '^ *///' $* | sed 's?^ */// ??' | sed 's?^ *///$??'
<CODE ENDS>
]]></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[
<CODE BEGINS>
sh extract.sh < spec.txt > recalldevice.x
<CODE ENDS>
]]></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>The extracted XDR extends types that are already defined in
<xref target="RFC7863"/> rather than introducing new types.  An implementer <bcp14>MUST</bcp14>
integrate the extracted block into the base XDR by <strong>replacing</strong>
the existing layoutrecall_type4 enum declaration and layoutrecall4
union declaration with the extended versions in this document, and
by adding the LAYOUT4<em>RET_REC_DEVICEID constant in the same file
area as the existing LAYOUT4_RET_REC</em>* constants.  Appending the
extracted block verbatim to the RFC 7863 XDR produces duplicate-
type errors at compile time.</t>
      <t>The EXCHGID4_FLAG_SUPP_RECALL_DEVICEID constant is purely additive
and is added to the EXCHGID4 flag constant block without replacing
anything.</t>
    </section>
    <section anchor="security-considerations">
      <name>Security Considerations</name>
      <t>The extension introduced by this document inherits the Security
Considerations of CB_LAYOUTRECALL in Section 20.3 of <xref target="RFC8881"/>
and of NFSv4.2 in <xref target="RFC7862"/>.  Three aspects of the deviceid-scoped
recall warrant explicit mention.</t>
      <dl>
        <dt>Blast radius:</dt>
        <dd>
          <t>A single CB_LAYOUTRECALL with LAYOUTRECALL4_DEVICEID can cause
a client to return many layouts in one callback exchange.  This
is not a new risk category -- LAYOUTRECALL4_FSID and
LAYOUTRECALL4_ALL already allow wider-scoped recalls -- but
administrators sizing callback-channel timeouts and client-side
recall-handler resources <bcp14>SHOULD</bcp14> account for the possibility that
a deviceid-scoped recall triggers per-layout cleanup work
proportional to the number of layouts that reference the
deviceid.</t>
        </dd>
        <dt>Cross-client scope:</dt>
        <dd>
          <t>In deployments where a single deviceid is shared across clients
serving different tenants or applications, a deviceid-scoped
recall is cross-client by construction: every client that holds
a layout referencing the deviceid is recalled.  This is the same
property as LAYOUTRECALL4_FSID and does not introduce a new
information-exposure surface.  Deployments that prefer
per-tenant failure-domain isolation <bcp14>MAY</bcp14> treat this extension as
an operational benefit: by assigning distinct deviceids per
tenant, deviceid-scoped recall becomes a per-tenant operation
with no cross-tenant effect.</t>
        </dd>
        <dt>Capability negotiation as defence in depth:</dt>
        <dd>
          <t>The capability flag defined in <xref target="capability"/> ensures that a
server cannot silently change the callback wire format for a
client that did not opt in.  A client that does not advertise
EXCHGID4_FLAG_SUPP_RECALL_DEVICEID continues to receive only
the layoutrecall_type4 values defined in <xref target="RFC8881"/>.  A server
that sends LAYOUTRECALL4_DEVICEID to a client that did not
advertise support is in violation of Section 6 of <xref target="RFC8178"/>;
clients that encounter such a violation <bcp14>MUST</bcp14> return
NFS4ERR_UNION_NOTSUPP and <bcp14>SHOULD</bcp14> log the server for operator
attention.</t>
        </dd>
      </dl>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document has no IANA actions.</t>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <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="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="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>
        <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>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC1813">
          <front>
            <title>NFS Version 3 Protocol Specification</title>
            <author fullname="B. Callaghan" initials="B." surname="Callaghan"/>
            <author fullname="B. Pawlowski" initials="B." surname="Pawlowski"/>
            <author fullname="P. Staubach" initials="P." surname="Staubach"/>
            <date month="June" year="1995"/>
            <abstract>
              <t>This paper describes the NFS version 3 protocol. This paper is provided so that people can write compatible implementations. This memo provides information for the Internet community. This memo does not specify an Internet standard of any kind.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="1813"/>
          <seriesInfo name="DOI" value="10.17487/RFC1813"/>
        </reference>
        <reference anchor="RFC8435">
          <front>
            <title>Parallel NFS (pNFS) Flexible File Layout</title>
            <author fullname="B. Halevy" initials="B." surname="Halevy"/>
            <author fullname="T. Haynes" initials="T." surname="Haynes"/>
            <date month="August" year="2018"/>
            <abstract>
              <t>Parallel NFS (pNFS) allows a separation between the metadata (onto a metadata server) and data (onto a storage device) for a file. The flexible file layout type is defined in this document as an extension to pNFS that allows the use of storage devices that require only a limited degree of interaction with the metadata server and use already-existing protocols. Client-side mirroring is also added to provide replication of files.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="8435"/>
          <seriesInfo name="DOI" value="10.17487/RFC8435"/>
        </reference>
      </references>
    </references>
    <?line 329?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>Trond Myklebust and Paul Saab were involved in the initial
requirements for this functionality.</t>
      <t>Brian Pawlowski and Gorry Fairhurst helped guide
this process.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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
TDGvCkv32xJy2llFmYup+NsyA/G/EMthlL0xAAA=

-->

</rfc>
