NFSv4 D. Noveck
Internet-Draft HP
Intended status: Standards Track July 12, 2015
Expires: January 13, 2016

NFSv4 Version Management
draft-ietf-nfsv4-versioning-01

Abstract

This document describes the management of versioning within 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 RFC5661.

Status of This Memo

This Internet-Draft is submitted in full conformance with the provisions of BCP 78 and BCP 79.

Internet-Drafts are working documents of the Internet Engineering Task Force (IETF). Note that other groups may also distribute working documents as Internet-Drafts. The list of current Internet-Drafts is at http://datatracker.ietf.org/drafts/current/.

Internet-Drafts are draft documents valid for a maximum of six months and may be updated, replaced, or obsoleted by other documents at any time. It is inappropriate to use Internet-Drafts as reference material or to cite them other than as "work in progress."

This Internet-Draft will expire on January 13, 2016.

Copyright Notice

Copyright (c) 2015 IETF Trust and the persons identified as the document authors. All rights reserved.

This document is subject to BCP 78 and the IETF Trust's Legal Provisions Relating to IETF Documents (http://trustee.ietf.org/license-info) in effect on the date of publication of this document. Please review these documents carefully, as they describe your rights and restrictions with respect to this document. Code Components extracted from this document must include Simplified BSD License text as described in Section 4.e of the Trust Legal Provisions and are provided without warranty as described in the Simplified BSD License.


Table of Contents

1. Introduction

To address the requirement for an NFS protocol that can evolve as the need arises, the Network File System (NFS) version 4 (NFSv4) protocol provides rules and a framework to allow for future changes via the creation of new protocol versions and certain forms of modification of existing versions. These version management rules allow changes to be implemented in a way that maintains compatibility with existing clients and servers.

1.1. Existing Minor Versions

Previously, all such changes had been part of new minor versions. The COMPOUND procedure (see Section 14.2 of [RFC7530]) specifies the minor version being used by the client in making requests. The CB_COMPOUND (see Section 15.2 of [RFC7530]) procedure specifies the minor version being used by the server on callback requests.

Each existing minor version has been specified by one or more standards track RFCs:

1.2. Updated NFSv4 Version Management Framework

A number of significant changes from previous version management practices should be noted here:

This document starts by presenting the conceptual framework on which NFSv4 versioning is built.

Using this framework, we then look at the ways the NFSv4 protocol can be changed.

2. Terminology

A basic familiarity with the NFSv4 terminology is assumed in this document and the reader is pointed to [RFC7530].

The word "feature" has been used inconsistently in previous treatments of NFSv4 versioning. Sometimes it is used to indicate a specific XDR extension, while at other times it has been used to indicate a set of multiple such extensions which are either supported or not supported together.

In this document, we use the word "feature" in the second sense, while individual protocol extensions which are incorporated in a feature are referred to as "protocol elements." The term "feature elements" is similar but it differs in that it includes changes in field interpretation and use (Section 4.2.1) and protocol behavior (See Section 4.2.2). See Section 6 for more details.

We also need to introduce our vocabulary regarding specification of features and minor versions. Given the ongoing shift to a finer-grained documentation model, it is important to be clear here.

As noted above, the keywords defined by [RFC2119] have special meanings which this document intends to adhere to. However, due to the nature of this document and some special circumstances, there are some complexities to take note of:

3. Consolidation of Version Management Rules

In the past, the only existing version management rules were the minor versioning rules that had been being maintained and specified in the Standards Track RFCs which defined the individual minor versions. As a result, these minor versioning rules were modified on an ad hoc basis for each new minor version.

More recently, minor versioning rules were specified in [RFC5661] while modifications to those rules were allowed in subsequent minor versions.

This document defines a set of version management rules, including rules for minor version construction. These rules apply to all future changes to the NFSv4 protocol. The rules are subject to change but any such change should be part of a standards track RFC obsoleting or updating this document.

Rather than a single list of minor versioning rules, as in [RFC5661], this document defines multiple sets of rules that deal with the various forms of versioning provided for in the NFSv4 version management framework.

This document supersedes minor versioning rules appearing in the minor version specification RFC's, including those in [RFC5661]. As a result, potential conflicts among these documents should be addressed as follows:

Future minor version specification documents should avoid specifying minor versioning rules and reference this document in connection with rules for NFSv4 version management.

4. NFSv4 Protocol Changes

Protocol changes that are to be managed within the NFSv4 versioning framework may be of a number of types, which are discussed in the sections below. Such changes include, but are not limited to, changes in the underlying protocol XDR.

Each such change will be organized, documented and effected as part of a given feature. The way this will be done depends on a number of factors, including the types of changes included in the feature. This subject is discussed in Section 6.5.

4.1. XDR Extension

When an NFSv4 version change requires a modification to the protocol XDR, this is effected within a framework based on the idea of XDR extension. This is opposed to transitions between major NFS versions (including that between NFSv3 and NFSv4.0) in which the XDR for one version was replaced by a different XDR for a newer version.

The use of XDR extension can facilitate compatibility between different versions of the NFSv4 protocol. When XDR extension is used to implement non-required features, the greatest degree of inter-version compatibility is obtained. For specifics regarding rules for interversion compatibility, see Section 9.2.2.

4.1.1. XDR Extension in General

XDR extension allows an XDR description to be extended in a way which retains the structure of all previously valid messages. If a base XDR description is extended to create a second XDR description, the following will be true for the second description to be a valid extension of the first:

An extension of a given XDR description consists of any of the following:

However, none of the following may happen:

4.1.2. Particulars of XDR Extension within NFSv4

There are issues, particular to NFSv4, that affect the definition of a valid XDR extension within NFSv4.

4.1.3. Rules for XDR Extension within NFSv4

In the context of NFSv4, an extension of a given XDR description consists of one or more of the following:

However, none of the following is allowed to happen:

4.2. Non-XDR Protocol Changes

Despite the previous emphasis on XDR changes, additions and changes to the NFSv4 protocols have not been limited to those that involve changes (in the form of extensions) to the protocol XDR. Examples of other sorts of changes have been taken from NFSv4.1.

4.2.1. Field Interpretation and Use

The XDR description of a protocol does not constitute a complete description of the protocol. Therefore, versioning needs to consider the role of changes in the use of fields, even when there is no change to the underlying XDR.

Although any XDR element is potentially subject to a change in its interpretation and use the likelihood of such change will vary with the XDR type, as discussed below:.

Another form of protocol change that changes how fields are presented, without affecting the XDR occurs when there is a change in the data elements which may be presented as RDMA chunks.

4.2.2. Behavioral Changes

Changes in the behavior of NFSv4 operations are possible, even if there is no change in the underlying XDR or change to field interpretation and use.

Many such behavioral changes have occurred in connection with the addition of the session concept in NFSv4.1.

Also changes were made regarding the required server behavior as to the interaction of the MODE and ACL attributes.

4.2.3. Rules for non-XDR changes

In the past (e.g. in [RFC5661]) there was often uncertainty about whether any particular difference from NFSv4.0 was:

In order to avoid such situations, all such changes will be documented as part of a feature, specifying the specific changes relative to protocol versions that do not incorporate that new feature. Also, to provide greater clarity about such changes, the following rules apply:

4.3. Specification of Associated Protocols

The definition of ancillary protocols is a form of protocol extension that is provided as part of pNFS and might be made available for other uses in the future.

As in the case of pNFS, the NFSv4 protocol proper would provide the basic framework for performing some protocol-related task, while allowing multiple independent means of performing that task to be defined. The version management considerations appropriate to creating such additional forms of protocol extension are discussed in Section 4.3.2

4.3.1. Associated Protocols via pNFS Mapping Types

pNFS is structured around the ability to define alternate mapping types in addition to the one defined in [RFC5661], (e.g. [RFC5663], [RFC5664]). Each mapping type specifies the data-transfer protocol to be used to access data represented by layouts as well as mapping-type-specific XDR definitions of layout-related data structures.

Specifying a new mapping type is an additional form of protocol change within the NFSv4 version management framework. A feature consisting of the new mapping type is not tied to a specific minor version. As explained in Section 7, it is available in multiple minor versions upon publication.

4.3.2. Additional Forms of Associated Protocols

The same sort of approach used for pNFS might be used in other circumstances where there is a clear need to standardize a set of protocol-related requirements and where it is desirable, for various reasons, to leave open the choice of mechanism by which those requirements might be met.

Such cases might arise where the function to be performed is likely to be too enmeshed with the structure of the file system implementation to allow a single protocol mechanism to be specified. In such cases, multiple approaches might themselves be standardized, each fitting into a template established previously using any or all of the elements used by pNFS:

New instances of such a two-level approach might be established in the future, subject to the following restrictions:

The above are a minimal set of restrictions for establishing such an additional extension mechanism. The working group may, as part of defining the core feature establishing the extension mechanism may specify further restrictions governing when minor versions may incorporate particular instances of that extension mechanism.

5. Documentation Approach

Documentation of future changes to the NFSv4 protocol will use feature specification documents as described in Section 6.4. There are a number of ways in which such documents may be used, as discussed in Section 6.5

5.1. Indexing material

The following items, referred to collectively as "Indexing material" will be useful in many contexts. The reason for frequently publishing such material is to prevent a situation in which large numbers of documents must be scanned to find the most current description of a particular protocol element.

6. NFSv4 Features

Individual changes, whether they are XDR extensions or other sorts of changes, are organized in term of features. This is in order to

6.1. Rules for Feature Construction

A feature consists of one or more valid NFSv4 changes, which work together as a functional whole. The change elements may be of any of the types described in Section 4 although the specific types of changes will affect how the feature can be integrated in the NFSv4 protocol.

6.2. Feature Statuses

Each feature has one of three statuses with regard to each minor version of which it might be a part.

These statuses define whether a client implementing the minor version has to be prepared for the existence of the feature and/or its non-support by the server.

The working group is still free to make recommendations regarding the desirability of server and client support for particular features in particular minor versions in the minor version definition document, or in other, presumably informational, documents.

In addition to feature status, there may be other constraints that define when an implementation must or may support a feature. In particular, support for one feature may require support for another, or the presence of one feature may require that another feature not be supported.

6.3. Feature Discovery

The presence or absence of particular features may be determined in a number of ways:

6.4. Feature Specification Documents

Features will be documented in the form of a working-group standards- track document which define one or more features. Generally, only closely related features should be defined in the same document.

The definition of each of the new features may include one or more "feature elements" which change the protocol in any of the ways discussed in Section 4. Feature elements include new operations, callbacks, attributes, and enumeration values. The functionality of some existing operations may be extended by the addition of new flags bits in existing flag words, by new cases in existing switched unions, and by valid semantic changes to existing operations.

Such feature definition documents would contain a number of items, following the pattern of the NFSv4.2 specification. The only difference would be that while the NFSv4.2 specification defines a number of features to be incorporated into NFSv4.2, the feature definition documents would each define a single feature, or a small set of closely related features.

In addition to a general explanation of the feature in question, the items to be included in such feature definition documents would be:

6.5. Feature Incorporation

All protocol changes will be organized, documented and effected as part of a given feature. This includes XDR extension and the various sorts of non-XDR-based changes allowed.

Such features may be made part of the protocol in a number of ways:

7. Extensions within Minor Versions

The NFSv4 version management framework allows, with certain restrictions, features to be added to existing minor versions

8. Adding Features to Extensible Minor Versions

Addition of features to an extensible minor version will take advantage of the existing NFSv4 infrastructure that allows optional features to be added to new minor versions, but without in this case requiring any change in the minor version number. Adding features in this way will enable compatibility with existing clients and servers, who may be unaware of the new feature.

8.1. Use of Feature Specification Documents

Each such extension will be in the form of a working-group standards- track document which defines one or more new non-required features. The definition of each of the new feature may include one or more "protocol elements" which extend the existing XDR as already discussed (in Section 4.1). Other sorts of XDR modification are not allowed. Protocol elements include new operations, callbacks, attributes, and enumeration values. The functionality of some existing operations may be extended by the addition of new flags bits in existing flag words and new cases in existing switched unions. New error codes may be added but the set of valid error codes to be returned by an operation is fixed, except that existing operations may return new errors to respond to situations that only arise when previously unused flag bits are set or when extensions to a switched union are used.

Each such additional feature will become, for all intents and purposes, part of the current NFSv4 minor version upon publication of the description as a Proposed Standard, enabling such extensions to be used by new client and server implementations without, as previously required, a change in the value of the minor version field within the COMPOUND operation.

The working group has two occasions to make sure that such features are appropriate ones:

8.2. Compatibility Issues

Because the receiver of a message may be unaware of the existence of a specific extension, certain compatibility rules need to be observed. In some cases (e.g., addition of new operations or callbacks or addition of new arms to an existing switched union) older clients or servers may be unable to do XDR parsing on an extension of whose existence they are unaware. In other cases (e.g., error returns) there are no XDR parsing issues but existing clients and servers may have expectations as to what may validly be returned. Detailed discussion of these compatibility issues appears below:

8.2.1. Compatibility Issues for Messages Sent to Servers

This section deals with compatibility issues that relate to messages sent to the server, i.e., requests and replies to callbacks. In the case of requests, it is the responsibility of the client to determine whether the server supports the extension in question before sending a request containing it for any purpose other than determining whether the server is aware of the extension. In the case of callback replies, the server demonstrates its awareness of proper parsing for callback replies by sending the associated callback.

Regarding the handling of requests:

Regarding the handling of responses to callbacks:

8.2.2. Compatibility Issues for Messages Sent to Clients

This sections deals with compatibility issues that relate to messages sent to clients, i.e., request replies and callbacks. In both cases, extensions are only sent to clients that have demonstrated awareness of the extensions in question by using an extension associated with the same feature.

Regarding the handling of request replies:

Regarding the handling of callback requests, the server needs to be sure that it only sends callbacks to those clients prepared to receive and parse them.

8.3. Additional Documents to be Produced

Additional documents will be required from time to time. These documents will eventually become RFC's (informational or standards track as described below), but the work of the working group and of implementers developing features will be facilitated by a progression of document drafts that incorporate information about new features that are being developed or have been approved as Proposed Standards.

8.3.1. Minor Version Indexing Document

One document will organize existing material for a minor version undergoing extension so that implementers will not have to scan a large set of feature definition documents or minor version specifications to find information being sought. Successive drafts of this document will serve as an index to the current state of the extensible minor version. Some desirable elements of this indexing document would include:

The frequency of updates for this document will be affected by implementer needs and the ability to easily generate document drafts, preferably by automated means. The most desirable situation is one in which a new draft is available soon after each feature reaches the status of a Proposed Standard.

8.3.2. Consolidated XDR Document

This document will consist of an updated XDR for the protocol as a whole including feature elements from all features and minor versions accepted as Proposed Standards.

A new draft should be prepared whenever a new feature within an extensible minor version is accepted as a Proposed Standard. In most cases, feature developers will be using a suitable XDR which can then be reviewed and published. In cases in which multiple features reach Proposed Standard status at approximately the same time, a merge of the XDR changes made by each feature may be necessary.

8.3.3. XDR Assignment Document

This document will contain consolidated lists of XDR value assignments that are relevant to the protocol extension process. It should contain lists of assignments for:

For each set of assignments, the individual assignments may be of three types:

  1. permanent assignments associated with a minor version or a feature extension that has achieved Proposed Standard status.

    These assignments are permanent in that the assigned value will never be re-used. However, a subsequent minor version may define some or all feature elements associated with a feature to be Mandatory to NOT support.
  2. provisional assignments associated with a feature under development (i.e., one which has been approved as a working group document but has not been approved as a Proposed Standard).

    Provisional assignments are not are not permanent and the values assigned can be re-used in certain circumstances. In particular, when a feature with provisional assignments is not progressing toward the goal of eventual Proposed Standard status, the working group can judge the feature effort to have been abandoned, allowing the codes formerly provisionally allocated to be reclaimed and reassigned.
  3. definition of individual assignments or ranges reserved for experimental use.

A new draft of this document should be produced, whenever:

8.3.4. Transition of Documents to RFC's

Each of these documents should be published as an RFC soon after the minor version in question ceases to be considered extensible. Typically this will happen when the working group makes the specification for the subsequent minor version into a working group document. Some specifics about the individual documents are listed below:

Handling of these documents in the event of a post-approval XDR correction is discussed in Section 10.1

8.4. Relationship Between Minor Versioning and Extensions within a Minor Version

Extensibility of minor versions are governed by the following rules:

Even when a minor version is non-extensible, or when a previous minor version is closed to further extension, the features that it contains are still subject to updates to effect protocol corrections. In many cases, making an XDR change, in the form of an extension will be the best way of correcting an issue. See Section 10 for details.

While making minor versions extensible will decrease the frequency of new minor versions, it will not eliminate the need for them. In particular:

9. Minor Versions

9.1. Minor Version Construction

In addition to the sorts of non-required features that may be made in the context of extensible minor version, a number of other sorts of changes may be made in a new minor version. Because such changes have the potential to disrupt inter-version such changes should only be made after careful consideration of the effects on interversion interoperability.

9.2. Minor Version Interaction

This section addresses issues related to rules #11 and #13 in the minor versioning rules in [RFC5661]. With regard to the supersession of minor versioning rules, the treatment here overrides that in [RFC5661] when either of the potentially interacting minor versions has not yet been published as a Proposed Standard.

Note that these rules are the only ones directed to minor version implementers, rather than to those specifying new minor versions.

9.2.1. Minor Version Identifier Transfer Issues

Each relationship between a client instance and a server instance, as represented by a clientid, is to be devoted to a single minor version. If a server detects that a COMPOUND with an inappropriate minor version is being used, it MUST reject the request. In doing so, it may return either NFS4ERR_BAD_CLIENTID or NFS4RR_MINOR_VERS_MISMATCH.

As a result of the above, the client has the assurance that the set of required and allowed features will not change within the context of a single clientid. Server implementations MUST ensure that the set of supported features does not change within such a context.

9.2.2. Minor Version Compatibility Issues

It is desirable for client and server implementations to support a wide range of minor versions. The difficulty of doing so can be affected by choices made by the working group in defining those minor versions.

Within a set of minor versions that have exactly the same set of required features, it is relatively easy for clients and servers to provide appropriate compatibility and they are well-advised to do so.

Servers SHOULD accept any minor version number within the range and return NFS4ERR_OPNOTSUPP or NFS4ERR_OP_ILLEGAL for non-supported operations based on the version number.

Clients SHOULD deal with an NFS4ERR_MINOR_VERS_MISMATCH error by searching the appropriate minor version range for one the server will accept.

Servers and clients MAY deal with changes in the set of required features by supporting at least the union of the set of required features for all minor versions within the range to be supported. This may involve logic to specifically withhold support for features when not allowed for a particular minor version.

9.3. Minor Version Documentation

Minor versions should be documented by specifying and explaining the changes made relative to the previous minor version.

Features added to the minor version should be documented in their own feature specification documents and normatively referenced.

Changes to the status or organization of existing features should be documented by presenting a summary of the status of all existing protocol elements, their relationship to non-required features, and any relevant feature dependencies.

In addition, to avoid situation where a large number of minor versions must be scanned to find the most recent valid treatment of a specific protocol element, minor version definition documents will contain the indexing material described in Section 5.1.

10. Correction of Existing Minor Versions and Features

The possibility always exists that there will be a need to correct an existing feature in some way, after the acceptance of that feature or a minor version containing it, as a Proposed Standard. While the working group can reduce the probability of such situations arising by waiting for running code before considering a feature as done, it cannot reduce the probability to zero. As features are used more extensively and interact with other features, previously unseen flaws may be discovered and will need to be corrected.

Such corrections are best done in a bis document updating the RFC defining the relevant feature definition document or minor version specification. In making such a correction, the working will have to carefully consider how to assure interoperability with older clients and servers.

Often, corrections can be done without changing the protocol XDR. However, incompatible changes in server or client behavior should not be mandated in order to avoid XDR changes. When XDR changes are necessary as part of correcting a flaw, these should be done in a manner similar to that used when implementing new minor versions or features within them. In particular,

Issues related to the effect of XDR corrections on existing documents, including co-ordination with other minor versions, are discussed in Section 10.1.

By doing things this way, the protocol with the XDR modification can accommodate clients and servers that support either the corrected or the uncorrected version of the protocol and also clients and servers aware of and capable of supporting both alternatives.

By using extensions in this manner, the protocol creates a clear path which preserves the functioning of existing clients and servers and allowing client and server implementers to adopt the new version of the feature at a reasonable pace.

10.1. Documentation of XDR Changes

In the event of an XDR correction, as discussed above, some document updates will be required. For the purposes of this discussion we call the minor version for which XDR correction is required minor version X and the minor version on which development is occurring minor version Y.

The following discusses the specific updated documents which could be required:

The informational RFC's associated with minor version Y (version indexing document and XDR assignment document) will contain the effects of the correction when published. Similarly, the minor version specification RFC will contain the XDR changes associated with the correction.

11. Security Considerations

Since no substantive protocol changes are proposed here, no security considerations apply.

As features and minor versions are designed and specified in standards-track documents, their security issues will be addressed and each RFC candidate will receive the appropriate security review from the NFSv4 working group and IESG.

12. IANA Considerations

The current document does not require any actions by IANA.

Depending on decisions that the working group makes about how to address the issues raised in this document, future documents may require actions by IANA.

13. References

13.1. Normative References

[RFC2119] Bradner, S., "Key words for use in RFCs to Indicate Requirement Levels", BCP 14, RFC 2119, March 1997.

13.2. Informative References

[NFSv42] Haynes, T., "NFS Version 4 Minor Version 2", April 2015.

Work in progress.

[NFSv42-dot-x] Haynes, T., "NFS Version 4 Minor Version 2 Protocol External Data Representation Standard (XDR) Description", April 2015.

Work in progress.

[RFC3530] Shepler, S., Callaghan, B., Robinson, D., Thurlow, R., Beame, C., Eisler, M. and D. Noveck, "Network File System (NFS) version 4 Protocol", RFC 3530, April 2003.
[RFC5661] Shepler, S., Eisler, M. and D. Noveck, "Network File System (NFS) Version 4 Minor Version 1 Protocol", RFC 5661, January 2010.
[RFC5662] Shepler, S., Eisler, M. and D. Noveck, "Network File System (NFS) Version 4 Minor Version 1 External Data Representation Standard (XDR) Description", RFC 5662, January 2010.
[RFC5663] Black, D., Fridella, S. and J. Glasgow, "Parallel NFS (pNFS) Block/Volume Layout", RFC 5663, January 2010.
[RFC5664] Halevy, B., Welch, B. and J. Zelenka, "Object-Based Parallel NFS (pNFS) Operations", RFC 5664, January 2010.
[RFC7530] Haynes, T. and D. Noveck, "Network File System (NFS) Version 4 Protocol", RFC 7530, March 2015.
[RFC7531] Haynes, T. and D. Noveck, "Network File System (NFS) Version 4 External Data Representation Standard (XDR) Description", RFC 7531, March 2015.

Author's Address

David Noveck Hewlett-Packard 165 Dascomb Road Andover, MA 01810 US Phone: +1 978 474 2011 EMail: davenoveck@gmail.com