<?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.26 (Ruby 3.3.7) -->
<?rfc docmapping="yes"?>
<rfc xmlns:xi="http://www.w3.org/2001/XInclude" ipr="trust200902" docName="draft-haynes-nfsv4-mojette-encoding-01" category="std" consensus="true" tocInclude="true" sortRefs="true" symRefs="true" version="3">
  <!-- xml2rfc v2v3 conversion 3.28.0 -->
  <front>
    <title abbrev="Mojette Transformation of Files in NFSv4.2">The Mojette Transformation for the Erasure Coding of Files in NFSv4.2</title>
    <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-mojette-encoding-01"/>
    <author initials="T." surname="Haynes" fullname="Thomas Haynes">
      <organization>Hammerspace</organization>
      <address>
        <email>loghyr@gmail.com</email>
      </address>
    </author>
    <author initials="P." surname="Evenou" fullname="Pierre Evenou">
      <organization>Hammerspace</organization>
      <address>
        <email>pierre.evenou@hammerspace.com</email>
      </address>
    </author>
    <date/>
    <area>General</area>
    <workgroup>Network File System Version 4</workgroup>
    <keyword>Internet-Draft</keyword>
    <abstract>
      <?line 43?>

<t>Parallel NFS (pNFS) allows a separation between the metadata (onto a
metadata server) and data (onto a storage device) for a file. The
flex file layout type version 2 further allows for erasure encoding
types to provide data integrity. In this document, a new erasure
encoding type for the Mojette Transformation is introduced.</t>
    </abstract>
    <note>
      <name>Note to Readers</name>
      <?line 51?>

<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/mojette_encoding"/>.</t>
      <t>Working Group information can be found at <eref target="https://github.com/ietf-wg-nfsv4"/>.</t>
    </note>
  </front>
  <middle>
    <?line 62?>

<section anchor="introduction">
      <name>Introduction</name>
      <t>In Parallel NFS (pNFS) (<xref section="12" sectionFormat="of" target="RFC8881"/>), the metadata
server returns layout type structures that describe where file
data is located.  There are different layout types for different
storage systems and methods of arranging data on storage devices.
<xref target="I-D.haynes-nfsv4-erasure-encoding"/> defined the Flexible File Version
2 Layout Type used with file-based data servers that are accessed using
the NFS protocols: NFSv3 <xref target="RFC1813"/>, NFSv4.0 <xref target="RFC7530"/>, NFSv4.1
<xref target="RFC8881"/>, and NFSv4.2 <xref target="RFC7862"/>.  This document introduces a new
Erasure Encoding Type called Mojette Transformation.</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 anchor="requirements-language">
        <name>Requirements Language</name>
        <t>The key words "MUST", "MUST NOT", "REQUIRED", "SHALL", "SHALL NOT", "SHOULD",
"SHOULD NOT", "RECOMMENDED", "NOT RECOMMENDED", "MAY", and "OPTIONAL" 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>
      </section>
    </section>
    <section anchor="mojette-transform">
      <name>Mojette Transform</name>
      <section anchor="introduction-1">
        <name>Introduction</name>
        <t>The Mojette Transform is an erasure coding technique that provides fault
tolerance for data storage systems by enabling the recovery of lost
data blocks.  This section describes the integration of the systematic
Mojette Transform into the NFS protocol, focusing on encoding and decoding
file system blocks, typically sized at 4KB or 8KB.</t>
        <section anchor="encoding">
          <name>Encoding</name>
          <t>The Mojette Transform involves the following steps to encode a data block:</t>
          <dl>
            <dt>Initialization</dt>
            <dd>
              <t>Each data block is treated as a 2D grid of data elements (pixels).
Typically, a block is structured as a matrix of size <contact fullname="P × Q" asciiFullname=""/>,
where <contact fullname="P" asciiFullname=""/> and <contact fullname="Q" asciiFullname=""/> are the dimensions of the grid.</t>
            </dd>
            <dt>Projections Calculation</dt>
            <dd>
              <t>Projections are computed along specific
directions defined by pairs of coprime integers <contact fullname="(p_i, q_i)" asciiFullname=""/>.
Each projection sums the values of the data elements (pixels)
along a line defined by these directions. The size of a
projection is given as in <xref target="fig-size"/>.
For a given projection direction <contact fullname="(p_i, q_i)" asciiFullname=""/>,
and if we let <contact fullname="Δ" asciiFullname=""/> be 1 if the argument is zero and 0 otherwise,
the projection values are calculated as in</t>
            </dd>
          </dl>
          <t>Projection(b, p_i, q_i) = <br/>
∑<em>{k=0}^{Q−1} ∑</em>{l=0}^{P−1} Data(k, l) ⋅ Δ(b − l ⋅ p_i + k ⋅ q_i)</t>
          <figure anchor="fig-size">
            <name>Size of Projection Calculation</name>
            <artwork type="math"><![CDATA[Size of projection = (P − 1) × |q| + (Q − 1) × |p| + 1
]]></artwork>
          </figure>
        </section>
        <section anchor="decoding">
          <name>Decoding</name>
          <t>Decoding the Mojette Transform is the inverse of encoding, involving
the reconstruction of data from projection data to fill an empty
grid.  This involves solving a system of linear equations defined by
the projection differences and the projection directions <contact fullname="(p_i, q_i)" asciiFullname=""/>.
The algorithm iterates to refine the values of the missing data
elements until the original data block is reconstructed.</t>
          <t>Data reconstruction is possible if Katz's criterion holds, which was
extended to any convex shape.  It specifies that
reconstruction is valid if for a given set of n projections along <contact fullname="n" asciiFullname=""/>
directions <contact fullname="(p_i, q_i)" asciiFullname=""/> either <contact fullname="∑_{i=0}^{n} q_i ≥ Q" asciiFullname=""/> or
<contact fullname="∑_{i=0}^{n} p_i ≥ P" asciiFullname=""/>.</t>
          <t>Adjusting the number of lines Q and the projections set allows
setting a desired fault-tolerance threshold.</t>
          <t>For example a 64x4 grid can be decoded by the projection set <contact fullname="{(0, 1), (1, 1), (2, 1), (3, 1)}" asciiFullname=""/> as <contact fullname="∑_{i=1}^{4} q_i = 4" asciiFullname=""/>.</t>
        </section>
        <section anchor="systematic-and-non-systematic-implementations">
          <name>Systematic and Non Systematic Implementations</name>
          <t>A systematic code is an error-correcting code where the input data is
embedded directly in the encoded output.  In contrast, a non-systematic
code produces an output that does not contain the original input symbols.
The Mojette Transform can be implemented in both ways, allowing it to
adapt to various use cases.</t>
        </section>
        <section anchor="data-block-representation">
          <name>Data Block Representation</name>
          <t>In the context of NFS, a data block corresponds to a file system block,
which is a contiguous segment of data, typically 4KB or 8KB in size.
The Mojette Transform encodes these blocks to ensure data integrity and
availability in distributed storage environments.</t>
        </section>
      </section>
      <section anchor="non-systematic-mojette-transform">
        <name>Non-Systematic Mojette Transform</name>
        <section anchor="block-encoding">
          <name>Block Encoding</name>
          <t>In the non-systematic version of the Mojette Transform, the original
data block is not directly included in the encoded output.  Instead,
the entire encoded output consists of projections computed from the
original data.  The number of computed projections n is larger than the
number of projections m required to rebuild the initial data.</t>
        </section>
        <section anchor="block-decoding">
          <name>Block Decoding</name>
          <t>To decode a file system block that has undergone the non-systematic
Mojette Transform, the following steps are followed:</t>
          <dl>
            <dt>Identify Available Projections</dt>
            <dd>
              <t>Determine which projections are available.  A least m projections
(what ever they are) out of n must be available.</t>
            </dd>
            <dt>Recompute Data Block</dt>
            <dd>
              <t>Apply the inverse Mojette Transform to rebuild the original Data.</t>
            </dd>
          </dl>
        </section>
        <section anchor="example">
          <name>Example</name>
          <t>Assume a file system block of 4KB is divided into a 128x4 matrix of
128-bit elements.  Using the non-systematic Mojette Transform, we compute
projections along selected directions, such as (-2,1), (-1, -1), (0,1),
(1,1), (2,1) and (3,1).  The original data is not stored directly;
instead, the projections are stored.</t>
          <t>If a data loss occurs, for instance, if two projections are lost, the
missing elements can be recovered by using the remaining projections
and solving the inverse problem.  Any set of 4 projections among the 6
generated can rebuild exactly the original data block</t>
        </section>
      </section>
      <section anchor="systematic-mojette-transform">
        <name>Systematic Mojette Transform</name>
        <section anchor="block-encoding-1">
          <name>Block Encoding</name>
          <t>In the systematic version, the original data block (file system
block) is part of the encoded output.  Additional projections are
calculated to provide redundancy.  If <contact fullname="k" asciiFullname=""/> is the number of original
data blocks and <contact fullname="n" asciiFullname=""/> is the total number of encoded blocks (including
projections), the systematic code will have the first <contact fullname="k" asciiFullname=""/> blocks as the
original data and the remaining <contact fullname="n − k" asciiFullname=""/> blocks as projections.</t>
        </section>
        <section anchor="block-decoding-1">
          <name>Block Decoding</name>
          <t>To decode a file system block that has undergone the Systematic
Mojette Transform, the following steps are followed:</t>
          <dl>
            <dt>Identify Missing Data</dt>
            <dd>
              <t>Determine which data lines are missing in the block.  Let e be the
number of missing lines.</t>
            </dd>
            <dt>Recompute Projections</dt>
            <dd>
              <t>Compute the projections of the available (partial) data blocks.
Calculate the differences between the projections of the full data and
the partial data.</t>
            </dd>
            <dt>Combine Existing Data and Recomputed projection</dt>
            <dd>
              <t>Recreate the full block of data by combining the existing data with
the reconstructed data according to their positions in the block.</t>
            </dd>
          </dl>
        </section>
        <section anchor="example-1">
          <name>Example</name>
          <t>Assume a file system block of 4KB is divided into a $64\times4$ matrix
of 128-bit elements.  Using the systematic Mojette Transform, we first
compute projections along selected directions, such as (0,1), and (1,1).
The original 4 blocks of 64 128-bit elements remains part of the encoded
data, and the 2 additional projections are stored for redundancy.
If a data loss occurs, the missing elements can be recovered by using
the projections and solving the inverse problem.</t>
        </section>
      </section>
      <section anchor="conclusion">
        <name>Conclusion</name>
        <t>The Mojette Transform provides two implementations for an efficient
   and effective way to enhance data reliability by encoding file system
   blocks with additional projections.  These methods ensure that data
   can be reconstructed even in the presence of failures, thereby
   enhancing the fault tolerance of the file system.</t>
        <t>In summary, the Mojette Transform offers robust solutions for data
   reliability in file systems, balancing redundancy, efficiency, and
   performance to ensure data integrity and quick recovery from
   failures.</t>
        <section anchor="benefits-of-non-systematic-mojette-transform">
          <name>Benefits of Non-Systematic Mojette Transform</name>
          <dl>
            <dt>Fast Failure Detection</dt>
            <dd>
              <t>By storing only encoded data and having the ability to rebuild
the original block from any sufficient subset of projections, the
non-systematic encoding implementation offers great flexibility and
allows fast failure detection and recovery.</t>
            </dd>
            <dt>Constant Performance</dt>
            <dd>
              <t>The non-systematic decoding algorithm is the most performant of all
implementations.  Although decoding always occurs, the overhead is low,
and unlike systematic encoding, performance remains constant regardless
of the number of failures.</t>
            </dd>
          </dl>
        </section>
        <section anchor="benefits-of-systematic-mojette-transform">
          <name>Benefits of Systematic Mojette Transform</name>
          <dl>
            <dt>Redundancy Reduction</dt>
            <dd>
              <t>Systematic Mojette coding reduces redundancy by integrating the
original data blocks into the encoded data, unlike non-systematic codes
that generate entirely new data from the original.</t>
            </dd>
            <dt>Efficiency</dt>
            <dd>
              <t>Fewer projections need to be calculated and stored, reducing both
computational and storage overhead.</t>
            </dd>
            <dt>Performance</dt>
            <dd>
              <t>Decoding is faster and simpler, especially when some original data
blocks are available, enabling quicker data access.  However, performance
is slightly degraded in the case of failures and depends on the number
of failures.</t>
            </dd>
          </dl>
        </section>
      </section>
    </section>
    <section anchor="extension-of-flexible-file-layout-type-version-2-encoding-type">
      <name>Extension of Flexible File Layout Type Version 2 Encoding Type</name>
      <section anchor="ffv2encodingtype4">
        <name>ffv2_encoding_type4</name>
        <figure anchor="ffv2_encoding_type4">
          <name>enum ffv2_encoding_type4</name>
          <sourcecode type="xdr"><![CDATA[
/// enum ffv2_encoding_type4 {
///     FFV2_ENCODING_MIRRORED               = 0x1;
///     FFV2_ENCODING_MOJETTE_SYSTEMATIC     = 0x2;
///     FFV2_ENCODING_MOJETTE_NON_SYSTEMATIC = 0x3;
/// };
]]></sourcecode>
        </figure>
        <t>fv2_encoding_type4 is extended in <xref target="ffv2_encoding_type4"/> to introduce two
different erasure encoding types: FFV2_ENCODING_MOJETTE_SYSTEMATIC
and FFV2_ENCODING_MOJETTE_NON_SYSTEMATIC.  They are intoduced at this
level instead of at the ffv2_encoding_type_data4
(<xref target="ffv2_encoding_type_data4"/>) in order for the client
to negotiate the support of one over the other with the
NFS4ERR_ERASURE_ENCODING_NOT_SUPPORTED error (<xref section="ZZZ" sectionFormat="of" target="I-D.haynes-nfsv4-erasure-encoding"/>).</t>
      </section>
      <section anchor="ffv2mojettefaultydevices4">
        <name>ffv2_mojette_faulty_devices4</name>
        <figure anchor="ffv2_mojette_faulty_devices4">
          <name>enum ffv2_mojette_faulty_devices4</name>
          <sourcecode type="xdr"><![CDATA[
/// enum ffv2_mojette_faulty_devices4 {
///         FFV2_MOJETTE_FAULTY_DEVICES_2_1       = 0x1;
///         FFV2_MOJETTE_FAULTY_DEVICES_4_1       = 0x2;
///         FFV2_MOJETTE_FAULTY_DEVICES_4_2       = 0x3;
///         FFV2_MOJETTE_FAULTY_DEVICES_8_1       = 0x4;
///         FFV2_MOJETTE_FAULTY_DEVICES_8_2       = 0x5;
///         FFV2_MOJETTE_FAULTY_DEVICES_8_3       = 0x6;
///         FFV2_MOJETTE_FAULTY_DEVICES_8_4       = 0x7;
/// };
]]></sourcecode>
        </figure>
        <t>The ffv2_mojette_faulty_devices4 (see Figure 4) can be used in both
the layout_hint (<xref section="5.12.4" sectionFormat="of" target="RFC8881"/> and <xref section="XXX" sectionFormat="of" target="I-D.haynes-nfsv4-erasure-encoding"/>) and the ffl_encoding_type_data
(<xref section="YYY" sectionFormat="of" target="I-D.haynes-nfsv4-erasure-encoding"/>) to convey the
distribution of FFV2_DS_FLAGS_ACTIVE and FFV2_DS_FLAGS_SPARE projection
blocks (<xref section="XXX" sectionFormat="of" target="I-D.haynes-nfsv4-erasure-encoding"/>) in the
layouts for the Flexible File Version 2 Layout Type.  The name of each
of the enum targets ends with 'X_Y', which states that there is a need
for <contact fullname="X + Y" asciiFullname=""/> files to compose the projection.  X is the number of
FFV2_DS_FLAGS_ACTIVE blocks and Y is the number of FFV2_DS_FLAGS_SPARE
blocks.</t>
      </section>
      <section anchor="ffv2encodingtypedata4">
        <name>ffv2_encoding_type_data4</name>
        <figure anchor="ffv2_encoding_type_data4">
          <name>union ffv2_encoding_type_data4</name>
          <sourcecode type="xdr"><![CDATA[
/// union ffv2_encoding_type_data4
///          switch (ffv2_encoding_type4 fetd_type) {
///     case FFV2_ENCODING_MIRRORED:
///         void;
///     case FFV2_ENCODING_MOJETTE_SYSTEMATIC:
///     case FFV2_ENCODING_MOJETTE_NON_SYSTEMATIC:
///         ffv2_mojette_faulty_devices4
///                       fetd_mojette_potection_configuration;
/// };
]]></sourcecode>
        </figure>
        <t>This addition of FFV2_ENCODING_MOJETTE_SYSTEMATIC and
FFV2_ENCODING_MOJETTE_NON_SYSTEMATIC to the ffv2_encoding_type_data4
(<xref target="ffv2_encoding_type_data4"/>) allows for the metadata server to inform
the client as to the expected distribution of FFV2_DS_FLAGS_ACTIVE and
FFV2_DS_FLAGS_SPARE projection blocks inside the ffm_data_servers arm
for the Mojette erasure encoding types.</t>
      </section>
    </section>
    <section anchor="examples-tying-it-all-together">
      <name>Examples Tying It All Together</name>
      <section anchor="blocksizes">
        <name>Block_Sizes</name>
        <t>Consider a FFV2_ENCODING_MOJETTE_NON_SYSTEMATIC encoding type which
needs 6 active blocks and 2 spare blocks in the payload (Not a valid
ffv2_mojette_faulty_devices4, but needed to show varied block sizes).
As can be seen in <xref target="example-sizes"/> , 4kB data blocks need blocks about
1kB in size.  But not all blocks are the same size.</t>
        <table anchor="example-sizes">
          <name>Example sizes of a Mojette Projection</name>
          <thead>
            <tr>
              <th align="left">Projection ID</th>
              <th align="left">0</th>
              <th align="left">1</th>
              <th align="left">2</th>
              <th align="left">3</th>
              <th align="left">4</th>
              <th align="left">5</th>
              <th align="left">6</th>
              <th align="left">7</th>
            </tr>
          </thead>
          <tbody>
            <tr>
              <td align="left">p value</td>
              <td align="left">-3</td>
              <td align="left">-2</td>
              <td align="left">-1</td>
              <td align="left">0</td>
              <td align="left">1</td>
              <td align="left">2</td>
              <td align="left">0</td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">q value</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">1</td>
              <td align="left">0</td>
              <td align="left">0</td>
            </tr>
            <tr>
              <td align="left">size (bytes)</td>
              <td align="left">1048</td>
              <td align="left">1080</td>
              <td align="left">1080</td>
              <td align="left">1048</td>
              <td align="left">1064</td>
              <td align="left">1048</td>
              <td align="left">0</td>
              <td align="left">0</td>
            </tr>
          </tbody>
        </table>
      </section>
    </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 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:</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 document has the same security considerations as both Flex Files
Layout Type version 1 (<xref section="15" sectionFormat="of" target="RFC8435"/>) and NFSv4.2 (<xref section="17" sectionFormat="of" target="RFC7862"/>).</t>
    </section>
    <section anchor="iana-considerations">
      <name>IANA Considerations</name>
      <t>This document introduces changes in the 'Flex Files V2 Erasure
Encoding Type Registry'.  This document defines both the
FFV2_ENCODING_MOJETTE_SYSTEMATIC and
FFV2_ENCODING_MOJETTE_NON_SYSTEMATIC types for Client-Side Mojette
Transformations.</t>
      <table anchor="type-assignments">
        <name>Flex Files V2 Erasure Encoding Type Assignments</name>
        <thead>
          <tr>
            <th align="left">Erasure Encoding Type Name</th>
            <th align="left">Value</th>
            <th align="left">RFC</th>
            <th align="left">How</th>
            <th align="left">Minor Versions</th>
          </tr>
        </thead>
        <tbody>
          <tr>
            <td align="left">FFV2_ENCODING_MOJETTE_SYSTEMATIC</td>
            <td align="left">2</td>
            <td align="left">RFCTBD10</td>
            <td align="left">L</td>
            <td align="left">2</td>
          </tr>
          <tr>
            <td align="left">FFV2_ENCODING_MOJETTE_NON_SYSTEMATIC</td>
            <td align="left">3</td>
            <td align="left">RFCTBD10</td>
            <td align="left">L</td>
            <td align="left">2</td>
          </tr>
        </tbody>
      </table>
    </section>
  </middle>
  <back>
    <references anchor="sec-combined-references">
      <name>References</name>
      <references anchor="sec-normative-references">
        <name>Normative References</name>
        <reference anchor="RFC2119" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4506.xml">
          <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="RFC7530" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7530.xml">
          <front>
            <title>Network File System (NFS) Version 4 Protocol</title>
            <author fullname="T. Haynes" initials="T." role="editor" surname="Haynes"/>
            <author fullname="D. Noveck" initials="D." role="editor" surname="Noveck"/>
            <date month="March" year="2015"/>
            <abstract>
              <t>The Network File System (NFS) version 4 protocol is a distributed file system protocol that builds on the heritage of NFS protocol version 2 (RFC 1094) and version 3 (RFC 1813). Unlike earlier versions, the NFS version 4 protocol supports traditional file access while integrating support for file locking and the MOUNT protocol. In addition, support for strong security (and its negotiation), COMPOUND operations, client caching, and internationalization has been added. Of course, attention has been applied to making NFS version 4 operate well in an Internet environment.</t>
              <t>This document, together with the companion External Data Representation (XDR) description document, RFC 7531, obsoletes RFC 3530 as the definition of the NFS version 4 protocol.</t>
            </abstract>
          </front>
          <seriesInfo name="RFC" value="7530"/>
          <seriesInfo name="DOI" value="10.17487/RFC7530"/>
        </reference>
        <reference anchor="RFC7862" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7862.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7863.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174.xml">
          <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" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8178.xml">
          <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="RFC8435" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8435.xml">
          <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>
        <reference anchor="RFC8881" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8881.xml">
          <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="I-D.haynes-nfsv4-erasure-encoding">
          <front>
            <title>Erasure Encoding of Files in NFSv4.2</title>
            <author fullname="Thomas Haynes" initials="T." surname="Haynes">
              <organization>Hammerspace</organization>
            </author>
            <date day="5" month="November" year="2024"/>
            <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 Version 2 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.  Data replication is also added to
   provide integrity.

              </t>
            </abstract>
          </front>
          <seriesInfo name="Internet-Draft" value="draft-haynes-nfsv4-erasure-encoding-03"/>
        </reference>
      </references>
      <references anchor="sec-informative-references">
        <name>Informative References</name>
        <reference anchor="RFC1813" xml:base="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.1813.xml">
          <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>
      </references>
    </references>
    <?line 428?>

<section numbered="false" anchor="acknowledgments">
      <name>Acknowledgments</name>
      <t>The following from Hammerspace were instrumental in driving the
incorporation of the Mojette Transformation into an encoding type for
Flexible Files Version 2 Layout Type: David Flynn, Trond Myklebust,
Tom Haynes, Didier Feron, Jean-Pierre Monchanin, Pierre Evenou, and
Brian Pawlowski.</t>
    </section>
  </back>
  <!-- ##markdown-source:
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

-->

</rfc>
