draft-ietf-nfsv4-flex-files-02.txt | draft-ietf-nfsv4-flex-files-03.txt | |||
---|---|---|---|---|
NFSv4 B. Halevy | NFSv4 B. Halevy | |||
Internet-Draft T. Haynes | Internet-Draft T. Haynes | |||
Intended status: Informational Primary Data | Intended status: Informational Primary Data | |||
Expires: April 10, 2015 October 07, 2014 | Expires: June 4, 2015 December 01, 2014 | |||
Parallel NFS (pNFS) Flexible File Layout | Parallel NFS (pNFS) Flexible File Layout | |||
draft-ietf-nfsv4-flex-files-02.txt | draft-ietf-nfsv4-flex-files-03.txt | |||
Abstract | Abstract | |||
The Parallel Network File System (pNFS) allows a separation between | The Parallel Network File System (pNFS) allows a separation between | |||
the metadata and data for a file. The metadata file access is | the metadata and data for a file. The metadata file access is | |||
handled via Network File System version 4 (NFSv4) minor version 1 | handled via Network File System version 4 (NFSv4) minor version 1 | |||
(NFSv4.1) and the data file access is specific to the protocol being | (NFSv4.1) and the data file access is specific to the protocol being | |||
used between the client and storage device. The client is informed | used between the client and storage device. The client is informed | |||
by the metadata server as to which protocol to use via a Layout Type. | by the metadata server as to which protocol to use via a Layout Type. | |||
The Flexible File Layout Type is defined in this document as an | The Flexible File Layout Type is defined in this document as an | |||
skipping to change at page 1, line 38 | skipping to change at page 1, line 38 | |||
Internet-Drafts are working documents of the Internet Engineering | Internet-Drafts are working documents of the Internet Engineering | |||
Task Force (IETF). Note that other groups may also distribute | Task Force (IETF). Note that other groups may also distribute | |||
working documents as Internet-Drafts. The list of current Internet- | working documents as Internet-Drafts. The list of current Internet- | |||
Drafts is at http://datatracker.ietf.org/drafts/current/. | Drafts is at http://datatracker.ietf.org/drafts/current/. | |||
Internet-Drafts are draft documents valid for a maximum of six months | Internet-Drafts are draft documents valid for a maximum of six months | |||
and may be updated, replaced, or obsoleted by other documents at any | and may be updated, replaced, or obsoleted by other documents at any | |||
time. It is inappropriate to use Internet-Drafts as reference | time. It is inappropriate to use Internet-Drafts as reference | |||
material or to cite them other than as "work in progress." | material or to cite them other than as "work in progress." | |||
This Internet-Draft will expire on April 10, 2015. | This Internet-Draft will expire on June 4, 2015. | |||
Copyright Notice | Copyright Notice | |||
Copyright (c) 2014 IETF Trust and the persons identified as the | Copyright (c) 2014 IETF Trust and the persons identified as the | |||
document authors. All rights reserved. | document authors. All rights reserved. | |||
This document is subject to BCP 78 and the IETF Trust's Legal | This document is subject to BCP 78 and the IETF Trust's Legal | |||
Provisions Relating to IETF Documents | Provisions Relating to IETF Documents | |||
(http://trustee.ietf.org/license-info) in effect on the date of | (http://trustee.ietf.org/license-info) in effect on the date of | |||
publication of this document. Please review these documents | publication of this document. Please review these documents | |||
skipping to change at page 2, line 15 | skipping to change at page 2, line 15 | |||
include Simplified BSD License text as described in Section 4.e of | include Simplified BSD License text as described in Section 4.e of | |||
the Trust Legal Provisions and are provided without warranty as | the Trust Legal Provisions and are provided without warranty as | |||
described in the Simplified BSD License. | described in the Simplified BSD License. | |||
Table of Contents | Table of Contents | |||
1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | 1. Introduction . . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 3 | 1.1. Definitions . . . . . . . . . . . . . . . . . . . . . . . 3 | |||
1.2. Difference Between a Data Server and a Storage Device . . 5 | 1.2. Difference Between a Data Server and a Storage Device . . 5 | |||
1.3. Requirements Language . . . . . . . . . . . . . . . . . . 5 | 1.3. Requirements Language . . . . . . . . . . . . . . . . . . 5 | |||
2. Coupling of Storage Devices . . . . . . . . . . . . . . . . . 5 | 2. Coupling of Storage Devices . . . . . . . . . . . . . . . . . 6 | |||
2.1. LAYOUTCOMMIT . . . . . . . . . . . . . . . . . . . . . . 6 | 2.1. LAYOUTCOMMIT . . . . . . . . . . . . . . . . . . . . . . 6 | |||
2.2. Security Models . . . . . . . . . . . . . . . . . . . . . 6 | 2.2. Security Models . . . . . . . . . . . . . . . . . . . . . 6 | |||
2.3. State and Locking Models . . . . . . . . . . . . . . . . 6 | 2.3. State and Locking Models . . . . . . . . . . . . . . . . 7 | |||
3. XDR Description of the Flexible File Layout Type . . . . . . 7 | 3. XDR Description of the Flexible File Layout Type . . . . . . 7 | |||
3.1. Code Components Licensing Notice . . . . . . . . . . . . 8 | 3.1. Code Components Licensing Notice . . . . . . . . . . . . 8 | |||
4. Device Addressing and Discovery . . . . . . . . . . . . . . . 9 | 4. Device Addressing and Discovery . . . . . . . . . . . . . . . 9 | |||
4.1. ff_device_addr . . . . . . . . . . . . . . . . . . . . . 9 | 4.1. ff_device_addr4 . . . . . . . . . . . . . . . . . . . . . 9 | |||
4.2. Storage Device Multipathing . . . . . . . . . . . . . . . 10 | 4.2. Storage Device Multipathing . . . . . . . . . . . . . . . 10 | |||
5. Flexible File Layout Type . . . . . . . . . . . . . . . . . . 11 | 5. Flexible File Layout Type . . . . . . . . . . . . . . . . . . 11 | |||
5.1. ff_layout4 . . . . . . . . . . . . . . . . . . . . . . . 12 | 5.1. ff_layout4 . . . . . . . . . . . . . . . . . . . . . . . 12 | |||
5.2. Interactions Between Devices and Layouts . . . . . . . . 14 | ||||
6. Striping via Sparse Mapping . . . . . . . . . . . . . . . . . 14 | 6. Striping via Sparse Mapping . . . . . . . . . . . . . . . . . 14 | |||
7. Recovering from Client I/O Errors . . . . . . . . . . . . . . 14 | 7. Recovering from Client I/O Errors . . . . . . . . . . . . . . 15 | |||
8. Mirroring . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | 8. Mirroring . . . . . . . . . . . . . . . . . . . . . . . . . . 15 | |||
8.1. Selecting a Mirror . . . . . . . . . . . . . . . . . . . 15 | 8.1. Selecting a Mirror . . . . . . . . . . . . . . . . . . . 16 | |||
8.2. Writing to Mirrors . . . . . . . . . . . . . . . . . . . 16 | 8.2. Writing to Mirrors . . . . . . . . . . . . . . . . . . . 17 | |||
8.3. Metadata Server Resilvering of the File . . . . . . . . . 16 | 8.3. Metadata Server Resilvering of the File . . . . . . . . . 17 | |||
9. Flexible Files Layout Type Return . . . . . . . . . . . . . . 16 | 9. Flexible Files Layout Type Return . . . . . . . . . . . . . . 17 | |||
9.1. ff_ioerr . . . . . . . . . . . . . . . . . . . . . . . . 17 | 9.1. I/O Error Reporting . . . . . . . . . . . . . . . . . . . 18 | |||
9.2. ff_iostats . . . . . . . . . . . . . . . . . . . . . . . 18 | 9.1.1. ff_ioerr4 . . . . . . . . . . . . . . . . . . . . . . 18 | |||
9.3. ff_layoutreturn . . . . . . . . . . . . . . . . . . . . . 19 | 9.2. Layout Usage Statistics . . . . . . . . . . . . . . . . . 19 | |||
10. Flexible Files Layout Type LAYOUTERROR . . . . . . . . . . . 19 | 9.2.1. ff_io_latency4 . . . . . . . . . . . . . . . . . . . 19 | |||
11. Flexible Files Layout Type LAYOUTSTATS . . . . . . . . . . . 19 | 9.2.2. ff_layoutupdate4 . . . . . . . . . . . . . . . . . . 19 | |||
12. Flexible File Layout Type Creation Hint . . . . . . . . . . . 20 | 9.2.3. ff_iostats4 . . . . . . . . . . . . . . . . . . . . . 20 | |||
12.1. ff_layouthint4 . . . . . . . . . . . . . . . . . . . . . 20 | 9.3. ff_layoutreturn4 . . . . . . . . . . . . . . . . . . . . 21 | |||
13. Recalling Layouts . . . . . . . . . . . . . . . . . . . . . . 20 | 10. Flexible Files Layout Type LAYOUTERROR . . . . . . . . . . . 21 | |||
13.1. CB_RECALL_ANY . . . . . . . . . . . . . . . . . . . . . 21 | 11. Flexible Files Layout Type LAYOUTSTATS . . . . . . . . . . . 21 | |||
14. Client Fencing . . . . . . . . . . . . . . . . . . . . . . . 21 | 12. Flexible File Layout Type Creation Hint . . . . . . . . . . . 21 | |||
15. Security Considerations . . . . . . . . . . . . . . . . . . . 22 | 12.1. ff_layouthint4 . . . . . . . . . . . . . . . . . . . . . 22 | |||
16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 22 | 13. Recalling Layouts . . . . . . . . . . . . . . . . . . . . . . 22 | |||
17. References . . . . . . . . . . . . . . . . . . . . . . . . . 23 | 13.1. CB_RECALL_ANY . . . . . . . . . . . . . . . . . . . . . 22 | |||
17.1. Normative References . . . . . . . . . . . . . . . . . . 23 | 14. Client Fencing . . . . . . . . . . . . . . . . . . . . . . . 23 | |||
17.2. Informative References . . . . . . . . . . . . . . . . . 23 | 15. Security Considerations . . . . . . . . . . . . . . . . . . . 24 | |||
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 24 | 15.1. Kerberized File Access . . . . . . . . . . . . . . . . . 24 | |||
Appendix B. RFC Editor Notes . . . . . . . . . . . . . . . . . . 24 | 15.1.1. Loosely Coupled . . . . . . . . . . . . . . . . . . 24 | |||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 24 | 15.1.2. Tightly Coupled . . . . . . . . . . . . . . . . . . 25 | |||
16. IANA Considerations . . . . . . . . . . . . . . . . . . . . . 25 | ||||
17. References . . . . . . . . . . . . . . . . . . . . . . . . . 25 | ||||
17.1. Normative References . . . . . . . . . . . . . . . . . . 25 | ||||
17.2. Informative References . . . . . . . . . . . . . . . . . 26 | ||||
Appendix A. Acknowledgments . . . . . . . . . . . . . . . . . . 26 | ||||
Appendix B. RFC Editor Notes . . . . . . . . . . . . . . . . . . 26 | ||||
Authors' Addresses . . . . . . . . . . . . . . . . . . . . . . . 27 | ||||
1. Introduction | 1. Introduction | |||
In the parallel Network File System (pNFS), the metadata server | In the parallel Network File System (pNFS), the metadata server | |||
returns Layout Type structures that describe where file data is | returns Layout Type structures that describe where file data is | |||
located. There are different Layout Types for different storage | located. There are different Layout Types for different storage | |||
systems and methods of arranging data on storage devices. This | systems and methods of arranging data on storage devices. This | |||
document defines the Flexible File Layout Type used with file-based | document defines the Flexible File Layout Type used with file-based | |||
data servers that are accessed using the Network File System (NFS) | data servers that are accessed using the Network File System (NFS) | |||
protocols: NFSv3 [RFC1813], NFSv4 [RFC3530], NFSv4.1 [RFC5661], and | protocols: NFSv3 [RFC1813], NFSv4 [RFC3530], NFSv4.1 [RFC5661], and | |||
skipping to change at page 3, line 30 | skipping to change at page 3, line 38 | |||
yet the requirements for the protocol are specified in [RFC5661] and | yet the requirements for the protocol are specified in [RFC5661] and | |||
clarified in [pNFSLayouts]. | clarified in [pNFSLayouts]. | |||
1.1. Definitions | 1.1. Definitions | |||
control protocol: is a set of requirements for the communication of | control protocol: is a set of requirements for the communication of | |||
information on layouts, stateids, file metadata, and file data | information on layouts, stateids, file metadata, and file data | |||
between the metadata server and the storage devices (see | between the metadata server and the storage devices (see | |||
[pNFSLayouts]). | [pNFSLayouts]). | |||
Client-side Mirroring: is when the client and not the server is | ||||
responsible for updating all of the mirrored copies of a file. | ||||
data file: is that part of the file system object which describes | data file: is that part of the file system object which describes | |||
the payload and not the object. E.g., it is the file contents. | the payload and not the object. E.g., it is the file contents. | |||
Data Server (DS): is one of the pNFS servers which provide the | Data Server (DS): is one of the pNFS servers which provide the | |||
contents of a file system object which is a regular file. | contents of a file system object which is a regular file. | |||
Depending on the layout, there might be one or more data servers | Depending on the layout, there might be one or more data servers | |||
over which the data is striped. Note that while the metadata | over which the data is striped. Note that while the metadata | |||
server is strictly accessed over the NFSv4.1 protocol, depending | server is strictly accessed over the NFSv4.1 protocol, depending | |||
on the Layout Type, the data server could be accessed via any | on the Layout Type, the data server could be accessed via any | |||
protocol that meets the pNFS requirements. | protocol that meets the pNFS requirements. | |||
skipping to change at page 4, line 31 | skipping to change at page 4, line 43 | |||
metadata file: is that part of the file system object which | metadata file: is that part of the file system object which | |||
describes the object and not the payload. E.g., it could be the | describes the object and not the payload. E.g., it could be the | |||
time since last modification, access, etc. | time since last modification, access, etc. | |||
Metadata Server (MDS): is the pNFS server which provides metadata | Metadata Server (MDS): is the pNFS server which provides metadata | |||
information for a file system object. It also is responsible for | information for a file system object. It also is responsible for | |||
generating layouts for file system objects. Note that the MDS is | generating layouts for file system objects. Note that the MDS is | |||
responsible for directory-based operations. | responsible for directory-based operations. | |||
Mirror: is a copy of a file. While mirroring can be used for | Mirror: is a copy of a file. While mirroring can be used for | |||
backing up a file, the copies can be distrbuted such that each | backing up a file, the copies can be distributed such that each | |||
remote site has a locally cached copy. Note that if one copy of | remote site has a locally cached copy. Note that if one copy of | |||
the mirror is updated, then all copies must be updated. | the mirror is updated, then all copies must be updated. | |||
Object Layout Type: is a Layout Type in which the storage devices | Object Layout Type: is a Layout Type in which the storage devices | |||
are accessed via the OSD protocol [ANSI400-2004]. It is defined | are accessed via the OSD protocol [ANSI400-2004]. It is defined | |||
in [RFC5664]. | in [RFC5664]. | |||
recalling a layout: is when the metadata server uses a back channel | recalling a layout: is when the metadata server uses a back channel | |||
to inform the client that the layout is to be returned in a | to inform the client that the layout is to be returned in a | |||
graceful manner. Note that the client could be able to flush any | graceful manner. Note that the client could be able to flush any | |||
skipping to change at page 9, line 25 | skipping to change at page 9, line 33 | |||
/// */ | /// */ | |||
/// | /// | |||
4. Device Addressing and Discovery | 4. Device Addressing and Discovery | |||
Data operations to a storage device require the client to know the | Data operations to a storage device require the client to know the | |||
network address of the storage device. The NFSv4.1 GETDEVICEINFO | network address of the storage device. The NFSv4.1 GETDEVICEINFO | |||
operation (Section 18.40 of [RFC5661]) is used by the client to | operation (Section 18.40 of [RFC5661]) is used by the client to | |||
retrieve that information. | retrieve that information. | |||
4.1. ff_device_addr | 4.1. ff_device_addr4 | |||
The ff_device_addr data structure is returned by the server as the | The ff_device_addr4 data structure is returned by the server as the | |||
storage protocol specific opaque field da_addr_body in the | storage protocol specific opaque field da_addr_body in the | |||
device_addr4 structure by a successful GETDEVICEINFO operation. | device_addr4 structure by a successful GETDEVICEINFO operation. | |||
/// struct ff_device_addr { | /// struct ff_device_addr4 { | |||
/// multipath_list4 ffda_netaddrs; | /// multipath_list4 ffda_netaddrs; | |||
/// uint32_t ffda_version; | /// uint32_t ffda_version; | |||
/// uint32_t ffda_minorversion; | /// uint32_t ffda_minorversion; | |||
/// uint32_t ffda_rsize; | /// uint32_t ffda_rsize; | |||
/// uint32_t ffda_wsize; | /// uint32_t ffda_wsize; | |||
/// bool ffda_tightly_coupled; | /// bool ffda_tightly_coupled; | |||
/// }; | /// }; | |||
/// | /// | |||
The ffda_netaddrs field is used to locate the storage device. It | The ffda_netaddrs field is used to locate the storage device. It | |||
MUST be set by the server to a list holding one or more of the device | MUST be set by the server to a list holding one or more of the device | |||
network addresses. | network addresses. | |||
The ffda_version and ffda_minorversion represent the NFS protocol to | The ffda_version and ffda_minorversion represent the NFS protocol to | |||
be used to access the storage device. This layout specification | be used to access the storage device. This layout specification | |||
defines the semantics for ffda_versions 3 and 4. If ffda_version | defines the semantics for ffda_versions 3 and 4. If ffda_version | |||
skipping to change at page 11, line 30 | skipping to change at page 11, line 36 | |||
the data consist of exact replicas. | the data consist of exact replicas. | |||
5. Flexible File Layout Type | 5. Flexible File Layout Type | |||
The layout4 type is defined in [RFC5662] as follows: | The layout4 type is defined in [RFC5662] as follows: | |||
enum layouttype4 { | enum layouttype4 { | |||
LAYOUT4_NFSV4_1_FILES = 1, | LAYOUT4_NFSV4_1_FILES = 1, | |||
LAYOUT4_OSD2_OBJECTS = 2, | LAYOUT4_OSD2_OBJECTS = 2, | |||
LAYOUT4_BLOCK_VOLUME = 3, | LAYOUT4_BLOCK_VOLUME = 3, | |||
LAYOUT4_FLEX_FILES = 0x80000004 | LAYOUT4_FLEX_FILES = 0x80000005 | |||
[[RFC Editor: please modify the LAYOUT4_FLEX_FILES | [[RFC Editor: please modify the LAYOUT4_FLEX_FILES | |||
to be the layouttype assigned by IANA]] | to be the layouttype assigned by IANA]] | |||
}; | }; | |||
struct layout_content4 { | struct layout_content4 { | |||
layouttype4 loc_type; | layouttype4 loc_type; | |||
opaque loc_body<>; | opaque loc_body<>; | |||
}; | }; | |||
struct layout4 { | struct layout4 { | |||
offset4 lo_offset; | offset4 lo_offset; | |||
length4 lo_length; | length4 lo_length; | |||
layoutiomode4 lo_iomode; | layoutiomode4 lo_iomode; | |||
layout_content4 lo_content; | layout_content4 lo_content; | |||
}; | }; | |||
[[AI10: Remember, using experimental version number to track changes | ||||
to the XDR via LAYOUT4_FLEX_FILES! --TH]] | ||||
This document defines structure associated with the layouttype4 value | This document defines structure associated with the layouttype4 value | |||
LAYOUT4_FLEX_FILES. [RFC5661] specifies the loc_body structure as an | LAYOUT4_FLEX_FILES. [RFC5661] specifies the loc_body structure as an | |||
XDR type "opaque". The opaque layout is uninterpreted by the generic | XDR type "opaque". The opaque layout is uninterpreted by the generic | |||
pNFS client layers, but obviously must be interpreted by the Flexible | pNFS client layers, but obviously must be interpreted by the Flexible | |||
File Layout Type implementation. This section defines the structure | File Layout Type implementation. This section defines the structure | |||
of this opaque value, ff_layout4. | of this opaque value, ff_layout4. | |||
5.1. ff_layout4 | 5.1. ff_layout4 | |||
/// struct ff_data_server4 { | /// struct ff_data_server4 { | |||
skipping to change at page 12, line 46 | skipping to change at page 12, line 49 | |||
layout segment. Each layout segment MAY represent different striping | layout segment. Each layout segment MAY represent different striping | |||
parameters, applying respectively only to the layout segment byte | parameters, applying respectively only to the layout segment byte | |||
range. | range. | |||
The ffl_stripe_unit field is the stripe unit size in use for the | The ffl_stripe_unit field is the stripe unit size in use for the | |||
current layout segment. The number of stripes is given inside each | current layout segment. The number of stripes is given inside each | |||
mirror by the number of elements in ffm_data_servers. If the number | mirror by the number of elements in ffm_data_servers. If the number | |||
of stripes is one, then the value for ffl_stripe_unit MUST default to | of stripes is one, then the value for ffl_stripe_unit MUST default to | |||
zero. The only supported mapping scheme is sparse and is detailed in | zero. The only supported mapping scheme is sparse and is detailed in | |||
Section 6. Note that there is an assumption here that both the | Section 6. Note that there is an assumption here that both the | |||
stripe unit size and the number of of stripes is the same across all | stripe unit size and the number of stripes is the same across all | |||
mirrors. | mirrors. | |||
The ffl_mirrors field is the array of mirrored storage devices which | The ffl_mirrors field is the array of mirrored storage devices which | |||
provide the storage for the current stripe, see Figure 1. | provide the storage for the current stripe, see Figure 1. | |||
+-----------+ | +-----------+ | |||
| | | | | | |||
| | | | | | |||
| File | | | File | | |||
| | | | | | |||
skipping to change at page 13, line 43 | skipping to change at page 13, line 46 | |||
data file. | data file. | |||
ffds_fhandle provides the filehandle of the data file on the given | ffds_fhandle provides the filehandle of the data file on the given | |||
storage device. For tight coupling, ffds_stateid provides the | storage device. For tight coupling, ffds_stateid provides the | |||
stateid to be used by the client to access the file. For loose | stateid to be used by the client to access the file. For loose | |||
coupling and a NFSv4 storage device, the client may use an anonymous | coupling and a NFSv4 storage device, the client may use an anonymous | |||
stateid to perform I/O on the storage device as there is no use for | stateid to perform I/O on the storage device as there is no use for | |||
the metadata server stateid (no control protocol). In such a | the metadata server stateid (no control protocol). In such a | |||
scenario, the server MUST set the ffds_stateid to be zero. | scenario, the server MUST set the ffds_stateid to be zero. | |||
For NFSv3 storage devices, ffds_auth provides the RPC credentials to | For loosely coupled storage devices, ffds_auth provides the RPC | |||
be used by the client to access the data files. For NFSv4.x storage | credentials to be used by the client to access the data files. For | |||
devices, the server SHOULD use the AUTH_NONE flavor and a zero length | tightly coupled storage devices, the server SHOULD use the AUTH_NONE | |||
opaque body to minimize the returned structure length. The client | flavor and a zero length opaque body to minimize the returned | |||
MUST ignore ffds_auth in this case. [[AI6: Even for tightly coupled | structure length. I.e., if ffda_tightly_coupled (see Section 4.1) is | |||
systems, that cannot be correct! --TH]] | set, then the client MUST ignore ffds_auth in this case. | |||
ffds_efficiency describes the metadata server's evaluation as to the | ffds_efficiency describes the metadata server's evaluation as to the | |||
effectiveness of each mirror. Note that this is per layout and not | effectiveness of each mirror. Note that this is per layout and not | |||
per device as the metric may change due to perceived load, | per device as the metric may change due to perceived load, | |||
availability to the metadata server, etc. Higher values denote | availability to the metadata server, etc. Higher values denote | |||
higher perceived utility. The way the client can select the best | higher perceived utility. The way the client can select the best | |||
mirror to access is discussed in Section 8.1. | mirror to access is discussed in Section 8.1. | |||
5.2. Interactions Between Devices and Layouts | ||||
In [RFC5661], the File Layout Type is defined such that the | ||||
relationship between multipathing and filehandles can result in | ||||
either 0, 1, or N filehandles (see Section 13.3). Some rationals for | ||||
this are clustered servers which share the same filehandle or | ||||
allowing for multiple read-only copies of the file on the same | ||||
storage device. In the Flexible File Layout Type, there is only one | ||||
filehandle, independent of the multipathing being used. If the | ||||
metadata server wants to provide multiple read-only copies of the | ||||
same file on the same storage device, then it should provide multiple | ||||
ff_device_addr4, each as a mirror. The client can then determine | ||||
that since the ffds_fhandle are different, then there a multiple | ||||
copies of the file available. | ||||
If the metadata server wants to allow access to the file with | ||||
different versions and/or minor versions of NFS, then for each | ||||
allowed version and/or minor version, a new ff_device_addr4 must be | ||||
defined. The client should not assume any relationship (or lack of | ||||
relationship) between the filehandles presented in ffds_fhandle. | ||||
I.e., even if the filehandles are binary equivalent for different | ||||
versions, they may have varying semantics. | ||||
6. Striping via Sparse Mapping | 6. Striping via Sparse Mapping | |||
While other Layout Types support both dense and sparse mapping of | While other Layout Types support both dense and sparse mapping of | |||
logical offsets to phyisical offsets within a file (see for example | logical offsets to phyisical offsets within a file (see for example | |||
Section 13.4 of [RFC5661]), the Flexible File Layout Type only | Section 13.4 of [RFC5661]), the Flexible File Layout Type only | |||
supports a sparse mapping. | supports a sparse mapping. | |||
With sparse mappings, the logical offset within a file (L) is also | With sparse mappings, the logical offset within a file (L) is also | |||
the physical offset on the storage device. As detailed in | the physical offset on the storage device. As detailed in | |||
Section 13.4.4 of [RFC5661], this results in holes across each | Section 13.4.4 of [RFC5661], this results in holes across each | |||
skipping to change at page 14, line 37 | skipping to change at page 15, line 22 | |||
N: stripe number | N: stripe number | |||
N = L / S | N = L / S | |||
7. Recovering from Client I/O Errors | 7. Recovering from Client I/O Errors | |||
The pNFS client may encounter errors when directly accessing the | The pNFS client may encounter errors when directly accessing the | |||
storage devices. However, it is the responsibility of the metadata | storage devices. However, it is the responsibility of the metadata | |||
server to recover from the I/O errors. When the LAYOUT4_FLEX_FILES | server to recover from the I/O errors. When the LAYOUT4_FLEX_FILES | |||
layout type is used, the client MUST report the I/O errors to the | layout type is used, the client MUST report the I/O errors to the | |||
server at LAYOUTRETURN time using the ff_ioerr structure (see | server at LAYOUTRETURN time using the ff_ioerr4 structure (see | |||
Section 9.1). | Section 9.1.1). | |||
The metadata server analyzes the error and determines the required | The metadata server analyzes the error and determines the required | |||
recovery operations such as recovering media failures or | recovery operations such as recovering media failures or | |||
reconstructing missing data files. | reconstructing missing data files. | |||
The metadata server SHOULD recall any outstanding layouts to allow it | The metadata server SHOULD recall any outstanding layouts to allow it | |||
exclusive write access to the stripes being recovered and to prevent | exclusive write access to the stripes being recovered and to prevent | |||
other clients from hitting the same error condition. In these cases, | other clients from hitting the same error condition. In these cases, | |||
the server MUST complete recovery before handing out any new layouts | the server MUST complete recovery before handing out any new layouts | |||
to the affected byte ranges. | to the affected byte ranges. | |||
skipping to change at page 15, line 32 | skipping to change at page 16, line 17 | |||
Figure 1). | Figure 1). | |||
The metadata server is responsible for determining the number of | The metadata server is responsible for determining the number of | |||
mirrored copies and the location of each mirror. While the client | mirrored copies and the location of each mirror. While the client | |||
may provide a hint to how many copies it wants (see Section 12), the | may provide a hint to how many copies it wants (see Section 12), the | |||
metadata server can ignore that hint and in any event, the client has | metadata server can ignore that hint and in any event, the client has | |||
no means to dictate neither the storage device (which also means the | no means to dictate neither the storage device (which also means the | |||
coupling and/or protocol levels to access the file) nor the location | coupling and/or protocol levels to access the file) nor the location | |||
of said storage device. | of said storage device. | |||
The updating of mirrored files is done via client-side mirroring. | ||||
With this approach, the client is responsible for making sure | ||||
modifications get to all copies of the file it is informed of via the | ||||
layout. If a file is being resilvered to a storage device, that | ||||
mirrored copy will not be in the layout. Thus the metadata server | ||||
MUST update that copy until the client is presented it in a layout. | ||||
Also, if the client is writing to the file via the metadata server, | ||||
e.g., using an earlier version of the protocol, then the metadata | ||||
server MUST update all copies of the mirror. As seen in Section 8.3, | ||||
during the resilvering, the layout is recalled, and the client has to | ||||
make modifications via the metadata server. | ||||
8.1. Selecting a Mirror | 8.1. Selecting a Mirror | |||
When the metadata server grants a layout to a client, it can let the | When the metadata server grants a layout to a client, it can let the | |||
client know how fast it expects each mirror to be once the request | client know how fast it expects each mirror to be once the request | |||
arrives at the storage devices via the ffds_efficiency member. While | arrives at the storage devices via the ffds_efficiency member. While | |||
the algorithms to calculate that value are left to the metadata | the algorithms to calculate that value are left to the metadata | |||
server implementations, factors that could contribute to that | server implementations, factors that could contribute to that | |||
calculation include speed of the storage device, physical memory | calculation include speed of the storage device, physical memory | |||
available to the device, operating system version, current load, etc. | available to the device, operating system version, current load, etc. | |||
However, what SHOULD not be involved in that calculation is a | However, what SHOULD not be involved in that calculation is a | |||
perceived network distance between the client and the storage device. | perceived network distance between the client and the storage device. | |||
The client is better situated for making that determination based on | The client is better situated for making that determination based on | |||
past interaction with the storage device over the different available | past interaction with the storage device over the different available | |||
network intefaces bewteen the two. I.e., the metadata server might | network interfaces between the two. I.e., the metadata server might | |||
not know about a transient outage between the client and storage | not know about a transient outage between the client and storage | |||
device because it has no presence on the given subnet. | device because it has no presence on the given subnet. | |||
As such, it is the client which decides which mirror to access for | As such, it is the client which decides which mirror to access for | |||
reading the file. The requirements for writing to a mirrored file | reading the file. The requirements for writing to a mirrored file | |||
are presented below. | are presented below. | |||
8.2. Writing to Mirrors | 8.2. Writing to Mirrors | |||
The client is responsible for updating all mirrored copies of the | The client is responsible for updating all mirrored copies of the | |||
skipping to change at page 16, line 38 | skipping to change at page 17, line 34 | |||
The metadata server may elect to create a new mirror of the file at | The metadata server may elect to create a new mirror of the file at | |||
any time. This might be to resilver a copy on a storage device which | any time. This might be to resilver a copy on a storage device which | |||
was down for servicing, to provide a copy of the file on storage with | was down for servicing, to provide a copy of the file on storage with | |||
different storage performance characteristics, etc. As the client | different storage performance characteristics, etc. As the client | |||
will not be aware of the new mirror and the metadata server will not | will not be aware of the new mirror and the metadata server will not | |||
be aware of updates that the client is making to the file, the | be aware of updates that the client is making to the file, the | |||
metadata server MUST recall the writable layout segment(s) that it is | metadata server MUST recall the writable layout segment(s) that it is | |||
resilvering. If the client issues a LAYOUTGET for a writable layout | resilvering. If the client issues a LAYOUTGET for a writable layout | |||
segment which is in the process of being resilvered, then the | segment which is in the process of being resilvered, then the | |||
metadata server MUST deny that request with a NFS4ERR_LAYOUTTRYLATER. | metadata server MUST deny that request with a NFS4ERR_LAYOUTTRYLATER. | |||
The client can then perform the IO through the metadata server. | The client can then perform the I/O through the metadata server. | |||
9. Flexible Files Layout Type Return | 9. Flexible Files Layout Type Return | |||
layoutreturn_file4 is used in the LAYOUTRETURN operation to convey | layoutreturn_file4 is used in the LAYOUTRETURN operation to convey | |||
layout-type specific information to the server. It is defined in | layout-type specific information to the server. It is defined in | |||
[RFC5661] as follows: | [RFC5661] as follows: | |||
struct layoutreturn_file4 { | struct layoutreturn_file4 { | |||
offset4 lrf_offset; | offset4 lrf_offset; | |||
length4 lrf_length; | length4 lrf_length; | |||
skipping to change at page 17, line 30 | skipping to change at page 18, line 21 | |||
struct LAYOUTRETURN4args { | struct LAYOUTRETURN4args { | |||
/* CURRENT_FH: file */ | /* CURRENT_FH: file */ | |||
bool lora_reclaim; | bool lora_reclaim; | |||
layoutreturn_stateid lora_recallstateid; | layoutreturn_stateid lora_recallstateid; | |||
layouttype4 lora_layout_type; | layouttype4 lora_layout_type; | |||
layoutiomode4 lora_iomode; | layoutiomode4 lora_iomode; | |||
layoutreturn4 lora_layoutreturn; | layoutreturn4 lora_layoutreturn; | |||
}; | }; | |||
If the lora_layout_type layout type is LAYOUT4_FLEX_FILES, then the | If the lora_layout_type layout type is LAYOUT4_FLEX_FILES, then the | |||
lrf_body opaque value is defined by the ff_layoutreturn4 type. The | lrf_body opaque value is defined by ff_layoutreturn4 (See | |||
new type allows the client to report I/O error information or layout | Section 9.3). It allows the client to report I/O error information | |||
usage statistics back to the metadata server as defined below. | or layout usage statistics back to the metadata server as defined | |||
below. | ||||
9.1. ff_ioerr | 9.1. I/O Error Reporting | |||
9.1.1. ff_ioerr4 | ||||
/// struct ff_ioerr4 { | /// struct ff_ioerr4 { | |||
/// offset4 ffie_offset; | /// offset4 ffie_offset; | |||
/// length4 ffie_length; | /// length4 ffie_length; | |||
/// stateid4 ffie_stateid; | /// stateid4 ffie_stateid; | |||
/// device_error4 ffie_errors; | /// device_error4 ffie_errors; | |||
/// }; | /// }; | |||
/// | /// | |||
Recall that [NFSv42] defines device_error4 as: | Recall that [NFSv42] defines device_error4 as: | |||
struct device_error4 { | struct device_error4 { | |||
deviceid4 de_deviceid; | deviceid4 de_deviceid; | |||
nfsstat4 de_status; | nfsstat4 de_status; | |||
nfs_opnum4 de_opnum; | nfs_opnum4 de_opnum; | |||
}; | }; | |||
The ff_ioerr4 structure is used to return error indications for data | The ff_ioerr4 structure is used to return error indications for data | |||
files that generated errors during data transfers. These are hints | files that generated errors during data transfers. These are hints | |||
to the metadata server that there are problems with that file. For | to the metadata server that there are problems with that file. For | |||
each error, ffie_errors.de_deviceid, ffie_offset, and ffie_length | each error, ffie_errors.de_deviceid, ffie_offset, and ffie_length | |||
represent the storage device and byte range within the file in which | represent the storage device and byte range within the file in which | |||
the error occurred; ffie_errors represents the operation and type of | the error occurred; ffie_errors represents the operation and type of | |||
error. The use of device_error4 is described in Section 16.6 of | error. The use of device_error4 is described in Section 15.6 of | |||
[NFSv42]. | [NFSv42]. | |||
9.2. ff_iostats | Even though the storage device might be accessed via NFSv3 and | |||
reports back NFSv3 errors to the client, the client is responsible | ||||
for mapping these to appropriate NFSv4 status codes as de_status. | ||||
Likewise, the NFSv3 operations need to be mapped to equivalent NFSv4 | ||||
operations. | ||||
9.2. Layout Usage Statistics | ||||
9.2.1. ff_io_latency4 | ||||
/// struct ff_io_latency4 { | ||||
/// nfstime4 ffil_min; | ||||
/// nfstime4 ffil_max; | ||||
/// nfstime4 ffil_avg; | ||||
/// uint32_t ffil_count; | ||||
/// }; | ||||
/// | ||||
When determining latencies, the client can collect the minimum via | ||||
ffil_min, the maximum via ffil_max, and the average via ffil_avg. | ||||
Further, ffil_count relates how many data points were collected in | ||||
the reported period. | ||||
9.2.2. ff_layoutupdate4 | ||||
/// struct ff_layoutupdate4 { | ||||
/// netaddr4 ffl_addr; | ||||
/// nfs_fh4 ffl_fhandle; | ||||
/// ff_io_latency4 ffl_read; | ||||
/// ff_io_latency4 ffl_write; | ||||
/// uint32_t ffl_queue_depth; | ||||
/// nfstime4 ffl_duration; | ||||
/// bool ffl_local; | ||||
/// }; | ||||
/// | ||||
ffl_addr differentiates which network address the client connected to | ||||
on the storage device. In the case of multipathing, ffl_fhandle | ||||
indicates which read-only copy was selected. ffl_read and ffl_write | ||||
convey the latencies respectively for both read and write operations. | ||||
ffl_queue_depth can be used to indicate how long the I/O had to wait | ||||
on internal queues before being serviced. ffl_duration is used to | ||||
indicate the time period over which the statistics were collected. | ||||
ffl_local if true indicates that the I/O was serviced by the client's | ||||
cache. This flag allows the client to inform the metadata server | ||||
about "hot" access to a file it would not normally be allowed to | ||||
report on. | ||||
9.2.3. ff_iostats4 | ||||
/// struct ff_iostats4 { | /// struct ff_iostats4 { | |||
/// offset4 ffis_offset; | /// offset4 ffis_offset; | |||
/// length4 ffis_length; | /// length4 ffis_length; | |||
/// stateid4 ffis_stateid; | /// stateid4 ffis_stateid; | |||
/// uint32_t ffis_duration; | /// io_info4 ffis_read; | |||
/// io_info4 ffis_read; | /// io_info4 ffis_write; | |||
/// io_info4 ffis_write; | /// deviceid4 ffis_deviceid; | |||
/// layoutupdate4 ffis_layoutupdate; | /// layoutupdate4 ffis_layoutupdate; | |||
/// }; | /// }; | |||
/// | /// | |||
Recall that [NFSv42] defines io_info4 as: | Recall that [NFSv42] defines io_info4 as: | |||
struct io_info4 { | struct io_info4 { | |||
uint32_t ii_count; | uint32_t ii_count; | |||
uint64_t ii_bytes; | uint64_t ii_bytes; | |||
}; | }; | |||
With pNFS, the data transfers are performed directly between the pNFS | With pNFS, the data transfers are performed directly between the pNFS | |||
client and the storage devices. Therefore, the metadata server has | client and the storage devices. Therefore, the metadata server has | |||
no visibility to the I/O stream and cannot use any statistical | no visibility to the I/O stream and cannot use any statistical | |||
information about client I/O to optimize data storage location. | information about client I/O to optimize data storage location. | |||
ff_iostats4 MAY be used by the client to report I/O statistics back | ff_iostats4 MAY be used by the client to report I/O statistics back | |||
to the metadata server upon returning the layout. Since it is | to the metadata server upon returning the layout. Since it is | |||
infeasible for the client to report every I/O that used the layout, | infeasible for the client to report every I/O that used the layout, | |||
the client MAY identify "hot" byte ranges for which to report I/O | the client MAY identify "hot" byte ranges for which to report I/O | |||
statistics. The definition and/or configuration mechanism of what is | statistics. The definition and/or configuration mechanism of what is | |||
considered "hot" and the size of the reported byte range is out of | considered "hot" and the size of the reported byte range is out of | |||
the scope of this document. It is suggested for client | the scope of this document. It is suggested for client | |||
implementation to provide reasonable default values and an optional | implementation to provide reasonable default values and an optional | |||
run-time management interface to control these parameters. For | run-time management interface to control these parameters. For | |||
example, a client can define the default byte range resolution to be | example, a client can define the default byte range resolution to be | |||
1 MB in size and the thresholds for reporting to be 1 MB/second or 10 | 1 MB in size and the thresholds for reporting to be 1 MB/second or 10 | |||
I/O operations per second. For each byte range, ffis_offset and | I/O operations per second. For each byte range, ffis_offset and | |||
ffis_length represent the starting offset of the range and the range | ffis_length represent the starting offset of the range and the range | |||
length in bytes. ffis_duration represents the number of seconds the | length in bytes. ffis_read.ii_count, ffis_read.ii_bytes, | |||
reported burst of I/O lasted. ffis_read.ii_count, | ffis_write.ii_count, and ffis_write.ii_bytes represent, respectively, | |||
ffis_read.ii_bytes, ffis_write.ii_count, and ffis_write.ii_bytes | the number of contiguous read and write I/Os and the respective | |||
represent, respectively, the number of contiguous read and write I/Os | aggregate number of bytes transferred within the reported byte range. | |||
and the respective aggregate number of bytes transferred within the | ||||
reported byte range. [[AI7: Need to define whether we are using | ||||
ffis_layoutupdate or not. --TH]] [[AI8: Actually, ffis_duration | ||||
might be what we plop down in there. In any event, ffis_duration | ||||
needs some work. --TH]] | ||||
9.3. ff_layoutreturn | The combination of ffis_deviceid and ffl_addr uniquely identify both | |||
the storage path and the network route to it. Additionally, the | ||||
ffis_deviceid informs the metadata server as to the version and/or | ||||
minor version being used for I/O to the storage device. Finally, the | ||||
ffl_fhandle allows the metadata server to differentiate between | ||||
multiple read-only copies of the file on the same storage device. | ||||
/// struct ff_layoutreturn { | 9.3. ff_layoutreturn4 | |||
/// ff_ioerr4 fflr_ioerr_report<>; | ||||
/// ff_iostats4 fflr_iostats_report<>; | /// struct ff_layoutreturn4 { | |||
/// ff_ioerr4 fflr_ioerr_report<>; | ||||
/// ff_iostats4 fflr_iostats_report<>; | ||||
/// }; | /// }; | |||
/// | /// | |||
When data file I/O operations fail, fflr_ioerr_report<> is used to | When data file I/O operations fail, fflr_ioerr_report<> is used to | |||
report these errors to the metadata server as an array of elements of | report these errors to the metadata server as an array of elements of | |||
type ff_ioerr4. Each element in the array represents an error that | type ff_ioerr4. Each element in the array represents an error that | |||
occurred on the data file identified by ffie_errors.de_deviceid. If | occurred on the data file identified by ffie_errors.de_deviceid. If | |||
no errors are to be reported, the size of the fflr_ioerr_report<> | no errors are to be reported, the size of the fflr_ioerr_report<> | |||
array is set to zero. The client MAY also use fflr_iostats_report<> | array is set to zero. The client MAY also use fflr_iostats_report<> | |||
to report a list of I/O statistics as an array of elements of type | to report a list of I/O statistics as an array of elements of type | |||
ff_iostats4. Each element in the array represents statistics for a | ff_iostats4. Each element in the array represents statistics for a | |||
particular byte range. Byte ranges are not guaranteed to be disjoint | particular byte range. Byte ranges are not guaranteed to be disjoint | |||
and MAY repeat or intersect. | and MAY repeat or intersect. | |||
10. Flexible Files Layout Type LAYOUTERROR | 10. Flexible Files Layout Type LAYOUTERROR | |||
If the client is using NFSv4.2 to communicate with the metadata | If the client is using NFSv4.2 to communicate with the metadata | |||
server, then instead of waiting for a LAYOUTRETURN to send error | server, then instead of waiting for a LAYOUTRETURN to send error | |||
information to the metadata server (see Section 9.1), it can use | information to the metadata server (see Section 9.1), it can use | |||
LAYOUTERROR (see Section 16.6 of [NFSv42]) to communicate that | LAYOUTERROR (see Section 15.6 of [NFSv42]) to communicate that | |||
information. | information. For the Flexible Files Layout Type, this means that | |||
LAYOUTERROR4args is treated the same as ff_ioerr4. | ||||
11. Flexible Files Layout Type LAYOUTSTATS | 11. Flexible Files Layout Type LAYOUTSTATS | |||
If the client is using NFSv4.2 to communicate with the metadata | If the client is using NFSv4.2 to communicate with the metadata | |||
server, then instead of waiting for a LAYOUTRETURN to send I/O | server, then instead of waiting for a LAYOUTRETURN to send I/O | |||
statistics to the metadata server (see Section 9.2), it can use | statistics to the metadata server (see Section 9.2), it can use | |||
LAYOUTSTATS (see Section 16.7 of [NFSv42]) to communicate that | LAYOUTSTATS (see Section 15.7 of [NFSv42]) to communicate that | |||
information. | information. For the Flexible Files Layout Type, this means that | |||
LAYOUTSTATS4args.lsa_layoutupdate is overloaded with the same | ||||
contents as in ffis_layoutupdate. | ||||
12. Flexible File Layout Type Creation Hint | 12. Flexible File Layout Type Creation Hint | |||
The layouthint4 type is defined in the [RFC5661] as follows: | The layouthint4 type is defined in the [RFC5661] as follows: | |||
struct layouthint4 { | struct layouthint4 { | |||
layouttype4 loh_type; | layouttype4 loh_type; | |||
opaque loh_body<>; | opaque loh_body<>; | |||
}; | }; | |||
skipping to change at page 21, line 20 | skipping to change at page 23, line 14 | |||
const RCA4_TYPE_MASK_FF_LAYOUT_MIN = -2; | const RCA4_TYPE_MASK_FF_LAYOUT_MIN = -2; | |||
const RCA4_TYPE_MASK_FF_LAYOUT_MAX = -1; | const RCA4_TYPE_MASK_FF_LAYOUT_MAX = -1; | |||
[[RFC Editor: please insert assigned constants]] | [[RFC Editor: please insert assigned constants]] | |||
struct CB_RECALL_ANY4args { | struct CB_RECALL_ANY4args { | |||
uint32_t craa_layouts_to_keep; | uint32_t craa_layouts_to_keep; | |||
bitmap4 craa_type_mask; | bitmap4 craa_type_mask; | |||
}; | }; | |||
[[AI13: No, 5661 does not define these above values. The ask here is | ||||
to create these and _add_ them to 5661. --TH]] | ||||
Typically, CB_RECALL_ANY will be used to recall client state when the | Typically, CB_RECALL_ANY will be used to recall client state when the | |||
server needs to reclaim resources. The craa_type_mask bitmap | server needs to reclaim resources. The craa_type_mask bitmap | |||
specifies the type of resources that are recalled and the | specifies the type of resources that are recalled and the | |||
craa_layouts_to_keep value specifies how many of the recalled | craa_layouts_to_keep value specifies how many of the recalled | |||
Flexible File Layouts the client is allowed to keep. The Flexible | Flexible File Layouts the client is allowed to keep. The Flexible | |||
File Layout Type mask flags are defined as follows: | File Layout Type mask flags are defined as follows: | |||
/// enum ff_cb_recall_any_mask { | /// enum ff_cb_recall_any_mask { | |||
/// FF_RCA4_TYPE_MASK_READ = -2, | /// FF_RCA4_TYPE_MASK_READ = -2, | |||
/// FF_RCA4_TYPE_MASK_RW = -1 | /// FF_RCA4_TYPE_MASK_RW = -1 | |||
skipping to change at page 22, line 43 | skipping to change at page 24, line 43 | |||
permissions or ACL, it SHOULD recall all layouts for that file and it | permissions or ACL, it SHOULD recall all layouts for that file and it | |||
MUST fence off the clients holding outstanding layouts for the | MUST fence off the clients holding outstanding layouts for the | |||
respective file by implicitly invalidating the outstanding | respective file by implicitly invalidating the outstanding | |||
credentials on all data files comprising before committing to the new | credentials on all data files comprising before committing to the new | |||
permissions and ACL. Doing this will ensure that clients re- | permissions and ACL. Doing this will ensure that clients re- | |||
authorize their layouts according to the modified permissions and ACL | authorize their layouts according to the modified permissions and ACL | |||
by requesting new layouts. Recalling the layouts in this case is | by requesting new layouts. Recalling the layouts in this case is | |||
courtesy of the server intended to prevent clients from getting an | courtesy of the server intended to prevent clients from getting an | |||
error on I/Os done after the client was fenced off. | error on I/Os done after the client was fenced off. | |||
15.1. Kerberized File Access | ||||
15.1.1. Loosely Coupled | ||||
Under this coupling model, the principal used to authenticate the | ||||
metadata file is different than that used to authenticate the data | ||||
file. I.e., the synthetic principals generated to control access to | ||||
the data file could prove to be difficult to manage. | ||||
While RPCSEC_GSS version 3 (RPCSEC_GSSv3) [rpcsec_gssv3] could be | ||||
used to authorize the client to the storage device on behalf of the | ||||
metadata server, such a requirement exceeds the loose coupling model. | ||||
I.e., each of the metadata server, storage device, and client would | ||||
have to implement RPCSEC_GSSv3. | ||||
In all, while either an elaborate schema could be used to | ||||
automatically authenticate principals or RPCSEC_GSSv3 aware clients, | ||||
metadata server, and storage devices could be deployed, if more | ||||
secure authentication is desired, tight coupling should be considered | ||||
as described in the next section. | ||||
15.1.2. Tightly Coupled | ||||
With tight coupling, the principal used to access the metadata file | ||||
is exactly the same as used to access the data file. Thus there are | ||||
no security issues related to kerberization of a tightly coupled | ||||
system. | ||||
16. IANA Considerations | 16. IANA Considerations | |||
As described in [RFC5661], new layout type numbers have been assigned | As described in [RFC5661], new layout type numbers have been assigned | |||
by IANA. This document defines the protocol associated with the | by IANA. This document defines the protocol associated with the | |||
existing layout type number, LAYOUT4_FLEX_FILES. | existing layout type number, LAYOUT4_FLEX_FILES. | |||
17. References | 17. References | |||
17.1. Normative References | 17.1. Normative References | |||
[LEGAL] IETF Trust, "Legal Provisions Relating to IETF Documents", | [LEGAL] IETF Trust, "Legal Provisions Relating to IETF Documents", | |||
November 2008, <http://trustee.ietf.org/docs/ | November 2008, <http://trustee.ietf.org/docs/ | |||
IETF-Trust-License-Policy.pdf>. | IETF-Trust-License-Policy.pdf>. | |||
[NFSv42] Haynes, T., "NFS Version 4 Minor Version 2", draft-ietf- | [NFSv42] Haynes, T., "NFS Version 4 Minor Version 2", draft-ietf- | |||
nfsv4-minorversion2-22 (Work In Progress), April 2014. | nfsv4-minorversion2-28 (Work In Progress), November 2014. | |||
[RFC1813] IETF, "NFS Version 3 Protocol Specification", RFC 1813, | [RFC1813] IETF, "NFS Version 3 Protocol Specification", RFC 1813, | |||
June 1995. | June 1995. | |||
[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | [RFC2119] Bradner, S., "Key words for use in RFCs to Indicate | |||
Requirement Levels", BCP 14, RFC 2119, March 1997. | Requirement Levels", BCP 14, RFC 2119, March 1997. | |||
[RFC3530] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., | [RFC3530] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., | |||
Beame, C., Eisler, M., and D. Noveck, "Network File System | Beame, C., Eisler, M., and D. Noveck, "Network File System | |||
(NFS) version 4 Protocol", RFC 3530, April 2003. | (NFS) version 4 Protocol", RFC 3530, April 2003. | |||
skipping to change at page 23, line 44 | skipping to change at page 26, line 20 | |||
"Network File System (NFS) Version 4 Minor Version 1 | "Network File System (NFS) Version 4 Minor Version 1 | |||
External Data Representation Standard (XDR) Description", | External Data Representation Standard (XDR) Description", | |||
RFC 5662, January 2010. | RFC 5662, January 2010. | |||
[RFC5664] Halevy, B., Ed., Welch, B., Ed., and J. Zelenka, Ed., | [RFC5664] Halevy, B., Ed., Welch, B., Ed., and J. Zelenka, Ed., | |||
"Object-Based Parallel NFS (pNFS) Operations", RFC 5664, | "Object-Based Parallel NFS (pNFS) Operations", RFC 5664, | |||
January 2010. | January 2010. | |||
[pNFSLayouts] | [pNFSLayouts] | |||
Haynes, T., "Considerations for a New pNFS Layout Type", | Haynes, T., "Considerations for a New pNFS Layout Type", | |||
draft-haynes-nfsv4-layout-types-02 (Work In Progress), | draft-ietf-nfsv4-layout-types-02 (Work In Progress), | |||
April 2014. | October 2014. | |||
17.2. Informative References | 17.2. Informative References | |||
[ANSI400-2004] | [ANSI400-2004] | |||
Weber, R., Ed., "ANSI INCITS 400-2004, Information | Weber, R., Ed., "ANSI INCITS 400-2004, Information | |||
Technology - SCSI Object-Based Storage Device Commands | Technology - SCSI Object-Based Storage Device Commands | |||
(OSD)", December 2004. | (OSD)", December 2004. | |||
[rpcsec_gssv3] | ||||
Adamson, W. and N. Williams, "Remote Procedure Call (RPC) | ||||
Security Version 3", November 2014. | ||||
Appendix A. Acknowledgments | Appendix A. Acknowledgments | |||
Those who provided miscellaneous comments to early drafts of this | Those who provided miscellaneous comments to early drafts of this | |||
document include: Matt W. Benjamin, Adam Emerson, Tom Haynes, J. | document include: Matt W. Benjamin, Adam Emerson, Tom Haynes, J. | |||
Bruce Fields, and Lev Solomonov. | Bruce Fields, and Lev Solomonov. | |||
Appendix B. RFC Editor Notes | Appendix B. RFC Editor Notes | |||
[RFC Editor: please remove this section prior to publishing this | [RFC Editor: please remove this section prior to publishing this | |||
document as an RFC] | document as an RFC] | |||
End of changes. 41 change blocks. | ||||
100 lines changed or deleted | 235 lines changed or added | |||
This html diff was produced by rfcdiff 1.41. The latest version is available from http://tools.ietf.org/tools/rfcdiff/ |