rfc9737.original.xml | rfc9737.xml | |||
---|---|---|---|---|
<?xml version='1.0' encoding='utf-8'?> | <?xml version='1.0' encoding='UTF-8'?> | |||
<!DOCTYPE rfc> | ||||
<?xml-stylesheet type='text/xsl' href='rfc2629.xslt'?> | ||||
<rfc | <!DOCTYPE rfc [ | |||
category='std' | <!ENTITY nbsp " "> | |||
docName='draft-ietf-nfsv4-layrec-04' | <!ENTITY zwsp "​"> | |||
ipr='trust200902' | <!ENTITY nbhy "‑"> | |||
obsoletes='' | <!ENTITY wj "⁠"> | |||
scripts='Common,Latin' | ]> | |||
sortRefs='true' | ||||
submissionType='IETF' | ||||
symRefs='true' | ||||
tocDepth='3' | ||||
tocInclude='true' | ||||
consensus='true' | ||||
version='3' | ||||
xml:lang='en'> | ||||
<front> | <rfc xmlns:xi="http://www.w3.org/2001/XInclude" category='std' docName='draft-ie | |||
<title abbrev='LAYOUT_RECOVERY'> | tf-nfsv4-layrec-04' number="9737" ipr='trust200902' obsoletes='' updates="" sort | |||
Reporting of Errors via LAYOUTRETURN in NFSv4.2 | Refs='true' submissionType='IETF' symRefs='true' tocDepth='3' tocInclude='true' | |||
</title> | consensus='true' version='3' xml:lang='en'> | |||
<seriesInfo name='Internet-Draft' value='draft-ietf-nfsv4-layrec-04'/> | ||||
<front> | ||||
<title abbrev='Reporting Errors via LAYOUTRETURN'>Reporting Errors in NFSv4.2 | ||||
via LAYOUTRETURN</title> | ||||
<seriesInfo name='RFC' value='9737'/> | ||||
<author fullname='Thomas Haynes' initials='T.' surname='Haynes'> | <author fullname='Thomas Haynes' initials='T.' surname='Haynes'> | |||
<organization abbrev='Hammerspace'>Hammerspace</organization> | <organization abbrev='Hammerspace'>Hammerspace</organization> | |||
<address> | <address> | |||
<email>loghyr@gmail.com</email> | <email>loghyr@gmail.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<author fullname='Trond Myklebust' initials='T.' surname='Myklebust'> | <author fullname='Trond Myklebust' initials='T.' surname='Myklebust'> | |||
<organization abbrev='Hammerspace'>Hammerspace</organization> | <organization abbrev='Hammerspace'>Hammerspace</organization> | |||
<address> | <address> | |||
<email>trondmy@hammerspace.com</email> | <email>trondmy@hammerspace.com</email> | |||
</address> | </address> | |||
</author> | </author> | |||
<date year='2024' month='November' day='21'/> | <date year='2025' month='February'/> | |||
<area>Transport</area> | <area>WIT</area> | |||
<workgroup>Network File System Version 4</workgroup> | <workgroup>nfsv4</workgroup> | |||
<keyword>NFSv4</keyword> | <keyword>NFSv4</keyword> | |||
<abstract> | <abstract> | |||
<t> | <t> | |||
<!--[rfced] We note that "MDS" and "DS" are expanded as "metadata | ||||
server" and "data server", respectively, in RFC 8435. May we | ||||
expand these terms in the Abstract as shown below (option A) to | ||||
match RFC 8435? | ||||
After these terms are expanded, would you like to use the abbreviations? | ||||
There are 37 instances of "metadata server" and 2 instances of | ||||
"data server". If not, and it is desired to have the term written out, | ||||
should "MDS" and "DS" simply be removed since they are not used elsewhere | ||||
in the document (option B)? Please let us know your preference. | ||||
Original: | ||||
The Parallel Network File System (pNFS) allows for a file's metadata | ||||
(MDS) and data (DS) to be on different servers. When the metadata | ||||
server is restarted, the client can still modify the data file | ||||
component. During the recovery phase of startup, the metadata server | ||||
and the data servers work together to recover state (which files are | ||||
open, last modification time, size, etc.). | ||||
Perhaps A: | ||||
The Parallel Network File System (pNFS) allows for a file's metadata | ||||
and data to be on different servers (i.e., the metadata server (MDS) | ||||
and the data server (DS)). | ||||
or | ||||
Perhaps B: | ||||
The Parallel Network File System (pNFS) allows for a file's metadata | ||||
and data to be on different servers. | ||||
--> | ||||
The Parallel Network File System (pNFS) allows | The Parallel Network File System (pNFS) allows | |||
for a file's metadata (MDS) and data (DS) to be on different | for a file's metadata and data to be on different | |||
servers. When the metadata server is restarted, the client | servers (i.e., the metadata server (MDS) and the data server (DS)). When t | |||
can still modify the data file component. During the | he MDS is restarted, the client | |||
recovery phase of startup, the metadata server and the | can still modify the data file component. | |||
data servers work together to recover state (which files | ||||
are open, last modification time, size, etc.). If the client | <!--[rfced] Please clarify "which files are open, last modification | |||
time, size, etc.)". Are these files used by the servers during | ||||
the recovery phase? | ||||
Original: | ||||
During the recovery phase of startup, the metadata server | ||||
and the data servers work together to recover state | ||||
(which files are open, last modification time, size, etc.). | ||||
Perhaps: | ||||
During the recovery phase of startup, the metadata server | ||||
and the data servers work together to recover state | ||||
(the files used are "open", "last modification time", | ||||
"size", etc.). | ||||
RFC EDITOR: needs AD approval | ||||
--> | ||||
During the | ||||
recovery phase of startup, the MDS and the | ||||
DSs work together to recover state. If the client | ||||
has not encountered errors with the data files, then the state can be | has not encountered errors with the data files, then the state can be | |||
recovered, avoiding resilvering of the data files. With any | recovered and the resilvering of the data files can be avoided. With any | |||
errors, there is no means by which the client can report errors to the | errors, there is no means by which the client can report errors to the | |||
metadata server. As such, the metadata server has to | MDS. As such, the MDS has to | |||
assume that file needs resilvering. This document presents an | assume that a file needs resilvering. This document presents an | |||
extension to RFC8435 to allow the client to update the metadata | extension to RFC 8435 to allow the client to update the metadata | |||
and avoid the resilvering. | via LAYOUTRETURN and avoid the resilvering. | |||
</t> | </t> | |||
</abstract> | </abstract> | |||
<note removeInRFC='true'> | ||||
<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> | </front> | |||
<middle> | <middle> | |||
<section anchor='sec_intro' numbered='true' removeInRFC='false' toc='default'> | <section anchor='sec_intro' numbered='true' toc='default'> | |||
<name>Introduction</name> | <name>Introduction</name> | |||
<t> | <t> | |||
In the Network File System version4 (NFSv4) with a Parallel NFS | In the Network File System version 4 (NFSv4) with a Parallel NFS | |||
(pNFS) Flexible File Layout (<xref target='RFC8435' format='default' | (pNFS) flexible file layout <xref target='RFC8435' format='default' | |||
sectionFormat='of'/>) server, during recovery after a restart, | sectionFormat='of'/> server, during recovery after a restart, | |||
there is no mechanism for the client | there is no mechanism for the client | |||
to inform the metadata server about an error which occurred during a | to inform the metadata server (MDS) about an error that occurred during a | |||
WRITE (see Section 18.32 of <xref target='RFC8881' format='default' | WRITE operation (see <xref section="18.32" target='RFC8881' format='default' | |||
sectionFormat='of'/>) operation to the data servers in the period of | sectionFormat='of'/>) to the data servers (DSs) in the period of | |||
the outage. | the outage. | |||
</t> | </t> | |||
<t> | <t> | |||
Using the process detailed in <xref target='RFC8178' format='default' | Using the process detailed in <xref target='RFC8178' format='default' | |||
sectionFormat='of'/>, the revisions in this document become an | sectionFormat='of'/>, the revisions in this document become an | |||
extension of NFSv4.2 <xref target='RFC7862' format='default' | extension of NFSv4.2 <xref target='RFC7862' format='default' | |||
sectionFormat='of'/>. They are built on top of the external data | sectionFormat='of'/>. They are built on top of the External Data | |||
representation (XDR) <xref target='RFC4506' format='default' | Representation (XDR) <xref target='RFC4506' format='default' | |||
sectionFormat='of'/> generated from <xref target='RFC7863' | sectionFormat='of'/> generated from <xref target='RFC7863' | |||
format='default' sectionFormat='of'/>. | format='default' sectionFormat='of'/>. | |||
</t> | </t> | |||
<section anchor='sec_defs' numbered='true' removeInRFC='false' toc='default'> | <section anchor='sec_defs' numbered='true' toc='default'> | |||
<name>Definitions</name> | <name>Definitions</name> | |||
<t> | <t> | |||
See Section 1.1 of <xref target='RFC8435' format='default' | See <xref section="1.1" target='RFC8435' format='default' | |||
sectionFormat='of'/> for a set of definitions. | sectionFormat='of'/> for a set of definitions. | |||
</t> | </t> | |||
</section> | </section> | |||
<section numbered='true' removeInRFC='false' toc='default'> | <section numbered='true' toc='default'> | |||
<name>Requirements Language</name> | <name>Requirements Language</name> | |||
<t> | <t> | |||
The key words '<bcp14>MUST</bcp14>', '<bcp14>MUST NOT</bcp14>', | The key words "<bcp14>MUST</bcp14>", "<bcp14>MUST NOT</bcp14>", "<bcp14>REQU | |||
'<bcp14>REQUIRED</bcp14>', '<bcp14>SHALL</bcp14>', '<bcp14>SHALL | IRED</bcp14>", "<bcp14>SHALL</bcp14>", "<bcp14>SHALL | |||
NOT</bcp14>', '<bcp14>SHOULD</bcp14>', '<bcp14>SHOULD NOT</bcp14>', | NOT</bcp14>", "<bcp14>SHOULD</bcp14>", "<bcp14>SHOULD NOT</bcp14>", "<bcp14> | |||
'<bcp14>RECOMMENDED</bcp14>', '<bcp14>NOT RECOMMENDED</bcp14>', | RECOMMENDED</bcp14>", "<bcp14>NOT RECOMMENDED</bcp14>", | |||
'<bcp14>MAY</bcp14>', and '<bcp14>OPTIONAL</bcp14>' in this | "<bcp14>MAY</bcp14>", and "<bcp14>OPTIONAL</bcp14>" in this document are to | |||
document are to be interpreted as described in BCP 14 <xref | be interpreted as | |||
target='RFC2119' format='default' sectionFormat='of'/> <xref | described in BCP 14 <xref target="RFC2119"/> <xref target="RFC8174"/> | |||
target='RFC8174' format='default' sectionFormat='of'/> when, | when, and only when, they appear in all capitals, as shown here. | |||
and only when, they appear in all capitals, as shown here. | </t> | |||
</t> | ||||
</section> | </section> | |||
</section> | </section> | |||
<section anchor='layout_state_recovery' numbered='true' removeInRFC='false' toc= 'default'> | <section anchor='layout_state_recovery' numbered='true' toc='default'> | |||
<name>Layout State Recovery</name> | <name>Layout State Recovery</name> | |||
<t> | <t> | |||
When a metadata server restarts, clients are provided a grace recovery perio d where | When an MDS restarts, clients are provided a grace recovery period where | |||
they are allowed to recover any state that | they are allowed to recover any state that | |||
they had established. With open files, the client can send an OPEN (see | they had established. With open files, the client can send an OPEN operation | |||
Section 18.16 of <xref target='RFC8881' format='default' sectionFormat='of'/ | (see | |||
>) | <xref section="18.16" target='RFC8881' format='default' sectionFormat='of'/> | |||
operation with a claim type of CLAIM_PREVIOUS (see Section 9.11 of | ) | |||
<xref target='RFC8881' format='default' sectionFormat='of'/>). The client | with a claim type of CLAIM_PREVIOUS (see <xref section="9.11" target='RFC888 | |||
uses the RECLAIM_COMPLETE (see Section 18.51 | 1' format='default' sectionFormat='of'/>). The client | |||
of <xref target='RFC8881' format='default' sectionFormat='of'/>) operation | uses the RECLAIM_COMPLETE operation (see <xref section="18.51" target='RFC88 | |||
to notify the metadata server that it is done reclaiming state. | 81' format='default' sectionFormat='of'/>) | |||
to notify the MDS that it is done reclaiming state. | ||||
</t> | </t> | |||
<t> | <t> | |||
The NFSv4 Flexible File Layout Type allows for the client to mirror files | The NFSv4 flexible file layout type allows for the client to mirror files | |||
(see Section 8 of <xref target='RFC8435' format='default' sectionFormat='of' | (see <xref section="8" target='RFC8435' format='default' sectionFormat='of'/ | |||
/>). | >). | |||
With client side mirroring, it is important for the client to inform | With client-side mirroring, it is important for the client to inform | |||
the metadata server of any I/O errors encountered with one of the mirrors. | the MDS of any I/O errors encountered with one of the mirrors. | |||
This is the only way for the metadata server to determine one or more | This is the only way for the MDS to determine if one or more | |||
of the mirrors is corrupt and then repair the mirrors via resilvering | of the mirrors are corrupt and then repair the mirrors via resilvering | |||
(see Section 1.1 of <xref target='RFC8435' format='default' sectionFormat='o | (see <xref section="1.1" target='RFC8435' format='default' sectionFormat='of | |||
f'/>). | '/>). | |||
The client can use LAYOUTRETURN (see | The client can use LAYOUTRETURN (see | |||
Section 18.44 of <xref target='RFC8881' format='default' sectionFormat='of'/ | <xref section="18.44" target='RFC8881' format='default' sectionFormat='of'/> | |||
>) | ) | |||
and the ff_ioerr4 (see Section 9.1.1 of <xref target='RFC8435' format='defau | and the ff_ioerr4 structure (see <xref section="9.1.1" target='RFC8435' form | |||
lt' sectionFormat='of'/>) structure to inform | at='default' sectionFormat='of'/>) to inform | |||
the metadata server of I/O errors. | the MDS of I/O errors. | |||
</t> | </t> | |||
<t> | <t> | |||
A problem is that when the metadata server restarts and the client has | A problem arises when the MDS restarts and the client has | |||
errors it needs to report, it can not do so. Section 12.7.4 of | errors it needs to report but cannot do so. <xref section="12.7.4" target='R | |||
<xref target='RFC8881' format='default' sectionFormat='of'/> requires | FC8881' format='default' sectionFormat='of'/> requires | |||
that the client <bcp14>MUST</bcp14> stop using layouts. While the | that the client <bcp14>MUST</bcp14> stop using layouts. While the | |||
intent there is that the client <bcp14>MUST</bcp14> stop doing I/O | intent there is that the client <bcp14>MUST</bcp14> stop doing I/O | |||
to the storage devices, it is also true that the layout stateids | to the storage devices, it is also true that the layout stateids | |||
are no longer valid. The LAYOUTRETURN needs | are no longer valid. The LAYOUTRETURN needs | |||
a layout stateid to proceed and the client can not get a layout | a layout stateid to proceed, and the client cannot get a layout | |||
during grace recovery (see Section 12.7.4 of | during grace recovery (see <xref section="12.7.4" target='RFC8881' format='d | |||
<xref target='RFC8881' format='default' sectionFormat='of'/>) to | efault' sectionFormat='of'/>) to | |||
recover layout state. As such, clients have no choice but to not recover | recover layout state. As such, clients have no choice but to not recover | |||
files with I/O errors. In turn, the metadata server <bcp14>MUST</bcp14> | files with I/O errors. In turn, the MDS <bcp14>MUST</bcp14> | |||
assume that the mirrors are inconsistent and pick one for resilvering. | assume that the mirrors are inconsistent and pick one for resilvering. | |||
It is a <bcp14>MUST</bcp14> because even if the metadata server can | It is a <bcp14>MUST</bcp14> because even if the MDS can | |||
determine that the client did modify data during the outage, it <bcp14>MUST NOT</bcp14> | determine that the client did modify data during the outage, it <bcp14>MUST NOT</bcp14> | |||
assume those modifications were consistent. | assume those modifications were consistent. | |||
</t> | </t> | |||
<t> | <t> | |||
To fix this issue, the metadata server <bcp14>MUST</bcp14> accept | To fix this issue, the MDS <bcp14>MUST</bcp14> accept | |||
for the lrf_stateid in LAYOUTRETURN (see Section 18.44.1 of | the anonymous stateid of all zeros (see <xref section="8.2.3" target='RFC888 | |||
<xref target='RFC8881' format='default' sectionFormat='of'/>) | 1' format='default' sectionFormat='of'/>) for the lrf_stateid in LAYOUTRETURN (s | |||
the anonymous stateid of all zeros | ee <xref section="18.44.1" target='RFC8881' format='default' sectionFormat='of'/ | |||
(see Section 8.2.3 of <xref target='RFC8881' format='default' sectionFormat= | >). | |||
'of'/>). | ||||
The client can use this anonymous stateid to | The client can use this anonymous stateid to | |||
inform the metadata server of errors | inform the MDS of errors | |||
encountered. The metadata server can then | encountered. The MDS can then | |||
accurately resilver the file by picking the mirror(s) that do not | accurately resilver the file by picking the mirror(s) that does not | |||
have any associated errors. | have any associated errors. | |||
</t> | </t> | |||
<t> | <t> | |||
During the grace period, if the client sends a lrf_stateid | During the grace period, if the client sends an lrf_stateid | |||
in the LAYOUTRETURN with any value other than the | in the LAYOUTRETURN with any value other than the | |||
anonymous stateid of all zeros, then the metadata server | anonymous stateid of all zeros, then the MDS | |||
<bcp14>MUST</bcp14> now respond with an error of | <bcp14>MUST</bcp14> respond with an error of | |||
NFS4ERR_GRACE (see Section of 15.1.9.2 <xref target='RFC8881' format='defaul | NFS4ERR_GRACE (see <xref section="15.1.9.2" target='RFC8881' format='default | |||
t' sectionFormat='of'/>). | ' sectionFormat='of'/>). | |||
After the grace period, if the client sends a lrf_stateid | After the grace period, if the client sends an lrf_stateid | |||
in the LAYOUTRETURN with a value of the anonymous stateid of all zeros, then | in the LAYOUTRETURN with a value of the anonymous stateid of all zeros, then | |||
the metadata server | the MDS | |||
<bcp14>MUST</bcp14> now respond with an error of | <bcp14>MUST</bcp14> respond with an error of | |||
NFS4ERR_NO_GRACE (see Section 15.1.9.3 of <xref target='RFC8881' format='def | NFS4ERR_NO_GRACE (see <xref section="15.1.9.3" target='RFC8881' format='defa | |||
ault' sectionFormat='of'/>). | ult' sectionFormat='of'/>). | |||
</t> | </t> | |||
<t> | <t> | |||
Also, when the metadata server builds the reply to the LAYOUTRETURN | ||||
when a lrf_stateid with the value of the anonymous stateid of all zeros | Also, when the MDS builds the reply to the LAYOUTRETURN | |||
with an lrf_stateid with the value of the anonymous stateid of all zeros, | ||||
it <bcp14>MUST NOT</bcp14> bump the seqid of the lorr_stateid. | it <bcp14>MUST NOT</bcp14> bump the seqid of the lorr_stateid. | |||
</t> | </t> | |||
<t> | <t> | |||
If the metadata server detects that the layout being returned in | If the MDS detects that the layout being returned in | |||
the LAYOUTRETURN does not match the current mirror instances found | the LAYOUTRETURN does not match the current mirror instances found | |||
for the file, then it <bcp14>MUST</bcp14> ignore the LAYOUTRETURN and resilv er the | for the file, then it <bcp14>MUST</bcp14> ignore the LAYOUTRETURN and resilv er the | |||
file in question. | file in question. | |||
</t> | </t> | |||
<t> | <t> | |||
The metadata server <bcp14>MUST</bcp14> resilver any files | The MDS <bcp14>MUST</bcp14> resilver any files | |||
which are neither explicitly recovered with a CLAIM_PREVIOUS nor | that are neither explicitly recovered with a CLAIM_PREVIOUS nor | |||
have a reported error via a LAYOUTRETURN. | have a reported error via a LAYOUTRETURN. | |||
The client has most likely restarted and lost any state. | The client has most likely restarted and lost any state. | |||
</t> | </t> | |||
<section anchor='sec_when_to_resilver' numbered='true' removeInRFC='false' toc ='default'> | <section anchor='sec_when_to_resilver' numbered='true' toc='default'> | |||
<name>When to Resilver</name> | <name>When to Resilver</name> | |||
<t> | <t> | |||
A write intent occurs when a client opens a file and gets | A write intent occurs when a client opens a file and gets | |||
a LAYOUTIOMODE4_RW from the metadata server. The metadata server | a LAYOUTIOMODE4_RW from the MDS. The MDS | |||
<bcp14>MUST</bcp14> track outstanding write intents and when it | <bcp14>MUST</bcp14> track outstanding write intents, and when it | |||
restarts, it <bcp14>MUST</bcp14> track recovery of those | restarts, it <bcp14>MUST</bcp14> track recovery of those | |||
write intents. | write intents. | |||
The method that the metadata server uses to track write intents is | The method that the MDS uses to track write intents is | |||
implementation specific, i.e., outside of the scope of this document. | implementation specific, i.e., outside the scope of this document. | |||
</t> | </t> | |||
<t> | <t> | |||
The decision to resilver a file depends on how the client recovers the | The decision to resilver a file depends on how the client recovers the | |||
file before the grace period ends. If the client reclaims the file | file before the grace period ends. If the client reclaims the file | |||
and reports no errors, the metadata server <bcp14>MUST NOT</bcp14> | and reports no errors, the MDS <bcp14>MUST NOT</bcp14> | |||
resilver the file. If the client reports an error on the file, | resilver the file. If the client reports an error on the file, | |||
then the file <bcp14>MUST</bcp14> be resilvered. If the client | then the file <bcp14>MUST</bcp14> be resilvered. If the client | |||
does not reclaim or report an error before the grace period ends, | does not reclaim or report an error before the grace period ends, | |||
then under the old behavior, the metadata server <bcp14>MUST</bcp14> | then under the old behavior, the MDS <bcp14>MUST</bcp14> | |||
resilver the file. | resilver the file. | |||
</t> | </t> | |||
<t> | <t> | |||
The resilvering process is broadly to: | The resilvering process is broadly to: | |||
</t> | </t> | |||
<ol> | <ol> | |||
<li> | <li> | |||
fence the file (see Section 2.2 | fence the file (see <xref section="2.2" target='RFC8435' format='default | |||
of <xref target='RFC8435' format='default' sectionFormat='of'/>), | ' sectionFormat='of'/>), | |||
</li> | </li> | |||
<li> | <li> | |||
record the need to resilver, | record the need to resilver, | |||
</li> | </li> | |||
<li> | <li> | |||
release the write intent, and | release the write intent, and | |||
</li> | </li> | |||
<li> | <li> | |||
once there are no write intents on the file, start the resilvering proce ss. | once there are no write intents on the file, start the resilvering proce ss. | |||
</li> | </li> | |||
</ol> | </ol> | |||
<t> | <t> | |||
The metadata server <bcp14>MUST NOT</bcp14> resilver a file if there | The MDS <bcp14>MUST NOT</bcp14> resilver a file if there | |||
are clients with outstanding write intents. I.e., multiple clients | are clients with outstanding write intents, i.e., multiple clients | |||
might have the file open with write intents. As it <bcp14>MUST</bcp14> | might have the file open with write intents. As the MDS <bcp14>MUST</bcp1 | |||
4> | ||||
track write intents, it <bcp14>MUST</bcp14> also track the need to | track write intents, it <bcp14>MUST</bcp14> also track the need to | |||
resilver. I.e., if the metadata server restarts during the grace | resilver, i.e., if the MDS restarts during the grace | |||
period, it <bcp14>MUST</bcp14> restart the file recovery if it | period, it <bcp14>MUST</bcp14> restart the file recovery if it | |||
replays the write intent else it <bcp14>MUST</bcp14> start | replays the write intent, or else it <bcp14>MUST</bcp14> start | |||
the resilvering if it replays the resilvering intent. | the resilvering if it replays the resilvering intent. | |||
</t> | </t> | |||
<t> | <t> | |||
Whether the metadata server prevents all I/O to | Whether the MDS prevents all I/O to | |||
the file until the resilvering is done or forces all I/O to go through | the file until the resilvering is done, forces all I/O to go through | |||
the metadata server or allows a proxy server to update the new data | the MDS, or allows a proxy server to update the new data | |||
file as it is being reslivered is all an implementation choice. The | file as it is being resilvered is all an implementation choice. The | |||
constraint is that the metadata server is responsible for the | constraint is that the MDS is responsible for the | |||
reconstruction of the data file and for the consistency of the | reconstruction of the data file and for the consistency of the | |||
mirrors. | mirrors. | |||
</t> | </t> | |||
<t> | <t> | |||
If the metadata server does allow the client access to the | If the MDS does allow the client access to the | |||
file during the resilvering, then the client <bcp14>MUST</bcp14> have | file during the resilvering, then the client <bcp14>MUST</bcp14> have | |||
the same layout (set of mirror instances) after the metadata server | the same layout (set of mirror instances) after the MDS | |||
as before. One way that such a resilvering can occur is for a proxy | as before. One way that such a resilvering can occur is for a proxy | |||
server to be inserted into the layout. That server will be copying | server to be inserted into the layout. That server will be copying | |||
a good mirror instance to a new instance. As it gets I/O via the | a good mirror instance to a new instance. As it gets I/O via the | |||
layout, it will be responsible for updating the copy it is performing. | layout, it will be responsible for updating the copy it is performing. | |||
This requirement is that the proxy server <bcp14>MUST</bcp14> | This requirement is that the proxy server <bcp14>MUST</bcp14> | |||
stay in the layout until the grace period is finished. | stay in the layout until the grace period is finished. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor='sec_vers_mismatch' numbered='true' removeInRFC='false' toc='d efault'> | <section anchor='sec_vers_mismatch' numbered='true' toc='default'> | |||
<name>Version Mismatch Considerations</name> | <name>Version Mismatch Considerations</name> | |||
<t> | <t> | |||
The metadata server has no expectations for the client to use this | The MDS has no expectations for the client to use this | |||
new functionality. Therefore, if the client does not use it, the | new functionality. Therefore, if the client does not use it, the | |||
metadata server will function normally. | MDS will function normally. | |||
</t> | </t> | |||
<t> | <t> | |||
If the client does use the new functionality and the metadata server does | If the client does use the new functionality and the MDS does | |||
not support it, then the metadata server <bcp14>MUST</bcp14> reply with | not support it, then the MDS <bcp14>MUST</bcp14> reply with | |||
a NFS4ERR_BAD_STATEID to the LAYOUTRETURN. If the client detects | a NFS4ERR_BAD_STATEID to the LAYOUTRETURN. If the client detects | |||
a NFS4ERR_BAD_STATEID error in this scenario, it should fall back to | a NFS4ERR_BAD_STATEID error in this scenario, it should fall back to | |||
the old behavior of not reporting errors. | the old behavior of not reporting errors. | |||
</t> | </t> | |||
</section> | </section> | |||
</section> | </section> | |||
<section anchor='sec_security' numbered='true' removeInRFC='false' toc='default' > | <section anchor='sec_security' numbered='true' toc='default'> | |||
<name>Security Considerations</name> | <name>Security Considerations</name> | |||
<t> | <t> | |||
There are no new security considerations beyond those in | There are no new security considerations beyond those in | |||
<xref target='RFC7862' format='default' sectionFormat='of'/>. | <xref target='RFC7862' format='default' sectionFormat='of'/>. | |||
</t> | </t> | |||
</section> | </section> | |||
<section anchor='sec_iana' numbered='true' removeInRFC='false' toc='default'> | <section anchor='sec_iana' numbered='true' toc='default'> | |||
<name>IANA Considerations</name> | <name>IANA Considerations</name> | |||
<t> | <t> | |||
There are no IANA considerations for this document. | This document has no IANA actions. | |||
</t> | </t> | |||
</section> | </section> | |||
</middle> | </middle> | |||
<back> | <back> | |||
<references> | <references> | |||
<name>References</name> | <name>References</name> | |||
<references> | <references> | |||
<name>Normative References</name> | <name>Normative References</name> | |||
<xi:include xmlns:xi='http://www.w3.org/2001/XInclude' | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.2119. | |||
href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.2119 | xml"/> | |||
.xml'/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.4506. | |||
<xi:include xmlns:xi='http://www.w3.org/2001/XInclude' | xml"/> | |||
href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.4506 | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7862. | |||
.xml'/> | xml"/> | |||
<xi:include xmlns:xi='http://www.w3.org/2001/XInclude' | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.7863. | |||
href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7862 | xml"/> | |||
.xml'/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8174. | |||
<xi:include xmlns:xi='http://www.w3.org/2001/XInclude' | xml"/> | |||
href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.7863 | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8178. | |||
.xml'/> | xml"/> | |||
<xi:include xmlns:xi='http://www.w3.org/2001/XInclude' | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8435. | |||
href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8174 | xml"/> | |||
.xml'/> | <xi:include href="https://bib.ietf.org/public/rfc/bibxml/reference.RFC.8881. | |||
<xi:include xmlns:xi='http://www.w3.org/2001/XInclude' | xml"/> | |||
href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8178 | ||||
.xml'/> | ||||
<xi:include xmlns:xi='http://www.w3.org/2001/XInclude' | ||||
href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8435 | ||||
.xml'/> | ||||
<xi:include xmlns:xi='http://www.w3.org/2001/XInclude' | ||||
href='https://xml2rfc.tools.ietf.org/public/rfc/bibxml/reference.RFC.8881 | ||||
.xml'/> | ||||
</references> | </references> | |||
</references> | </references> | |||
<section numbered='true' removeInRFC='false' toc='default'> | <section numbered='false' toc='default'> | |||
<name>Acknowledgments</name> | <name>Acknowledgments</name> | |||
<t> | <t><contact fullname="Tigran Mkrtchyan"/>, <contact fullname="Jeff | |||
Tigran Mkrtchyan, Jeff Layton, and Rick Macklem provided reviews of the | Layton"/>, and <contact fullname="Rick Macklem"/> provided reviews of | |||
document. | the document.</t> | |||
</t> | ||||
</section> | </section> | |||
</back> | </back> | |||
</rfc> | </rfc> | |||
End of changes. 58 change blocks. | ||||
188 lines changed or deleted | 213 lines changed or added | |||
This html diff was produced by rfcdiff 1.48. |