NFSv4 D. Noveck
Internet-Draft HPE
Updates: 5661 (if approved) June 4, 2016
Intended status: Standards Track
Expires: December 6, 2016

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

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 December 6, 2016.

Copyright Notice

Copyright (c) 2016 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 a framework to allow for future changes via the creation of new protocol versions including minor versions and certain forms of modification of existing minor versions. The version management rules contained in this document allow extensions and other changes to be implemented in a way that maintains compatibility with existing clients and servers.

1.1. Existing Minor Versions

Previously, all protocol 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 procedure (see Section 15.2 of [RFC7530]) 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:

Existing minor versions can be divided into two groups, based on compatibility considerations. NFSv4.0 is one group, while NFSv4.1, NFSv4.2, and potentially other minor versions, form a second group. The definition of NFSv4 minor version groups is explained in more detail in Section 2.3, as is the concept of variants within minor versions and version groups.

1.2. Updated NFSv4 Version Management Framework

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

After dealing with some preliminary matters, this document focuses on presenting the conceptual framework on which NFSv4 versioning is built.

Using this framework, we look at the ways that those changes can be incorporated into the NFSv4 protocol.

We then discuss (in Section 10) how features, minor versions, and protocol corrections will be documented.

2. Terminology

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

In this document, the term "version" is not limited to minor versions. When minor versions are meant, the term "minor version" is used explicitly. For more discussion of this and related terms, see Section 2.3

In this document, the word "feature" is used , except in the case of quotations, to denote a key structuring concept. By organizing changes into features, defining RFCs can clearly specify what protocol elements a server must be able to recognize and what protocol elements a server must support. See Section 6 for more which allows the defining RFCs to clearly specify what protocol elements must be supported together by the server and when a given server must be able to correctly interpret the corresponding associated protocol constructs. See Section 6 for more details.

A feature contains one or more "feature elements". Often, at least one feature element will be a protocol extension that can help a sender determine whether the receiver supports a given feature. See Section 4.1.3 for more details. A feature element may also be one of a set of other types of protocol change as described in Section 5.

A "feature package" is a set of features that are defined together, either as part of a minor version or as part of the same protocol extension.

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.

2.1. Use of Keywords Defined in RFC2119

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:

2.2. Use of Feature Statuses

There has been some confusion, during the history of NFSv4, about the correct use of these terms, and instances in which the keywords defined in [RFC2119] were used in ways that appear to be at variance with the definitions in that document.

In this document, the keywords "OPTIONAL" and "REQUIRED" and the phrase "mandatory to not implement" are used to denote the status of features and individual protocol elements within a given minor version. In using these terms, RFCs which specify the status of features or protocol elements inform:

When the status of a protocol feature is specified, the support requirements for associated protocol elements are defined by the status of the protocol elements with regard to the feature in question as described in Section 6.4.

The fact that such statuses and the organization of protocol features may change between minor version groups may raise interoperability issues which the authors of minor version RFCs and the working group need to carefully consider. See Section 8.1.2 for guidance in this regard.

2.3. NFSv4 Versions

The term "version" denotes any valid protocol variant constructed according to the rules in this document. It includes minor versions, but there are situations which allow multiple variant versions to be associated with and co-exist within a single minor version:

Because of the above, there can be multiple version variants that are part of a given minor version. Two of these are worthy of special terms:

Each version variant which is part of a given minor version is a subset of the current minor version and a superset of the base minor version. When the term "minor version" is used without either of these qualifiers, it should refer to something which is true of all variants within that minor version. For example, one may refer the set of REQUIRED features in a given minor version since it is the same for all variants within the minor version.

Each client and server which implements a specific minor version will implement some particular variant of that minor version. Each of these will be a superset of the appropriate base minor version.

A minor version group is defined as a successive set of minor versions having exactly the same set of REQUIRED and mandatory to not implement protocol elements. The union of the sets of variants for all these minor versions provides a high degree of inter-variant compatibility. Clients and servers which implement variants within this group should be compatible as long as each takes proper care, as it should, to properly deal with the case in which the other party does not know of or has no support for OPTIONAL protocol elements.

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. In the past, 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. XDR Considerations

As an extensible XDR-based protocol, NFSv4 has to ensure interversion compatibility, in situations in which the client and server use different XDR descriptions. For example, the client may implement different variants of the same minor version or different variants that are part of the same minor version group. The XDR extension paradigm, discussed in Section 4.1, assures that these descriptions are compatible, with clients and servers able to determine and use those portions of the protocol that they both share according to the methods described in Sections 4.4.2 and 4.4.4.

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 OPTIONAL features, the greatest degree of inter-version compatibility is obtained. For specifics regarding rules for interversion compatibility, see Section 8.3.2. For a discussion of compatibility issues that might arise between different version groups, see Sections 8.1.2 and 8.3.3.

4.1.1. XDR Extension in General

The XDR extension approach provides a way for 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:

In general, an extension of a given XDR description consists of any set of the following changes:

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. Handling of Protocol Elements

Implementations handle protocol elements in one of three ways. Which of the following ways are valid depends on the status of the protocol element in the variant being implemented:

Which of these are validly returned by the responder depends on the status of the feature element in the minor version specified in the COMPOUND or CB_COMPOUND. The possibilities which can exist are listed below.

The listing of possibilities above does not mean that a requester always needs to be prepared for all such possibilities. Often, depending on the scope of the feature of which the protocol element is a part, handling of a previous request using the same or related protocol elements, will allow the requester to be sure that certain of these possibilities cannot occur.

Requesters, typically clients, may test for knowledge of or support for protocol elements as part of connection establishment. This may allow the requester to be aware of responder lack of knowledge of or support for problematic requests before they are actually issued.

4.3. Organization of Protocol Elements

To enable compatible operation within a version group, all of the protocol elements within an NFSv4 minor version are organized as follows:

4.4. Inter-version Interoperability

Because of NFSv4's use of XDR extension, any communicating client and server versions have XDR definitions that are each valid extensions of a third version. Once that version is determined, it may be used by both client and server to communicate. Each party can successfully use a subset of protocol elements that are both known and supported by both parties.

4.4.1. Requirements for Knowledge of Protocol Elements

With regard to requirements for knowledge of protocol elements, the following rules apply. These rules are the result of the use of XDR extension paradigm combined with the way in which extensions are incorporated in existing minor versions (for details of which see Section 7.1).

For many minor versions, all existing protocol elements, are required to be known by both the client and the server, and so requesters do not have to test for the presence or absence of knowledge regarding protocol elements for which knowledge might be optional. This is the case if there has been no extension for the minor version in question. Extensions can be added to extensible minor versions as described in Section 7.1 and can be used to correct protocol flaws as described in Section 9.

Requesters can ascertain the knowledge of the responder in two ways:

In making this determination, the requester can rely on two basic facts:

4.4.2. Establishing Interoperability

When a client and a server interact, they need to able to take advantage of the compatibility provided by NFSv4's use of XDR extension.

In this section, we will deal with situation in which the client and server are of the same version group. Later, in Section 4.4.4, we will discuss possible extensions to the inter-version-group case.

In this context, the client and server would arrive at a common variant which the client would uses to send requests which the server would then accept. The server would use that variant to send callbacks which the client would then accept. This state of affairs could arise in a number of ways:

There are a number of cases to consider based on the characteristics of the minor version chosen.

In either case, the client must determine which of the OPTIONAL protocol elements within the common version are supported by the server as described in Section 6.6.

4.4.3. Determining Knowledge of Protocol Elements

A requester may test the responder's knowledge of particular protocol elements as defined below, based on the type of protocol element.

A determination of the knowledge or lack of knowledge of a particular protocol element is expected to remain valid as long as the clientid associated with the request remains valid.

The above assumes, as should be the case, that the server will accept the minor version used by the client. For more detail regarding this issue, see Section 8.3.2.

4.4.4. Interoperability Between Version Groups

Within a minor version group, we have complete compatibility in the sense that:

The same level of compatibility is not provided between different minor version groups. Nevertheless, the same guarantees of inter-XDR comprehensibility apply across minor version groups. For a discussion of how this comprehensibility can be used between minor version groups, see Section 8.3.3.

5. Other NFSv4 Protocol Changes

There are a number of types of protocol changes that are outside the XDR extension framework discussed in Section 4. These changes are also managed within the NFSv4 versioning framework and may be of a number of types, which are discussed in the sections below

Each such change will be organized, documented and effected as part of a given feature, just as changes discussed in Section 4 are. The way such features will be incorporated in the NFSv4 protocol depends on a number of factors, including the types of changes included in the feature. This subject is discussed in Sections 6.7 and 7.

5.1. 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.

Because these sorts of changes do not involve XDR extensions, it is not possible to use the techniques discussed in Section 4.4.3 to distinguish responders which have the change those which do not. To avoid this situation resulting in implementation incompatibility, all such changes need to be made in a minor version, rather than in an extension with to an existing minor version.

5.1.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-specified type of the element, 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.

5.1.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.

One class of behavioral change involves changes in the set of errors to be returned in the event of various errors. When the set of valid requests remain the same, and the behavior for each of them remains the same, such changes can be implemented with only limited disruption to existing clients.

Many more substantial 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.

5.1.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. As specified in Section 5.1, such changes may not be made in an extension.

Also, to provide greater clarity about such changes, the following rules apply to features which include the sort non-XDR changes described in Sections 5.1.1 and 5.1.2.

5.2. 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 5.2.2

5.2.1. Associated Protocols via pNFS Mapping Types

pNFS is structured around the ability to define alternative 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, if a feature consists only of that single change, it is available in multiple minor versions upon publication.

Such a feature has a file system scope and the attribute fs_layout_type can used to determine whether support is present.

5.2.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 specify further restrictions governing as to when minor versions are allowed to incorporate particular instances of that extension mechanism. In the absence of such restrictions, particular extensions will be incorporated, as is the case with pNFS mapping types, in all minor versions upon publication of the instance as a Proposed Standard.

6. NFSv4 Protocol Features

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

In contrast with some previous uses of the feature concept, every protocol element is defined as a member of exactly one protocol feature.

Because support for particular protocol features may depend on facilities provided by the underlying file systems, or may vary based on characteristics of the session within which communication is occurring, each protocol feature will be defined as having a particular scope, which may be any of the following:

6.1. Previous Uses of the Feature Concept

The word "feature" has been used inconsistently in previous documents bearing on issues related NFSv4 versioning, making it necessary to offer some clarification here.

Often, as in previous minor versioning rules, it is not always clear which sense of the word "feature" is meant.

6.2. Rules for Protocol Feature Construction

A protocol 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 5 although the specific types of changes will affect how the feature can be integrated in the NFSv4 protocol.

A critical distinction in this regard is the one between features which can added to the protocol without a new minor version and those which require a new minor version. In this document:

6.3. Statuses of Features

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 protocol feature's non-support by a server implementation, even if the feature in question is known 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.

Particular protocol elements have similar statuses, which are derived from a combination of the status of feature of which the protocol element, the status of that protocol element within its feature, and, in some cases, within other supported features. See Section 6.4 for details.

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.4. Statuses of Protocol Elements Within Features

This section discusses three classes of information that a requester might use in order to allow it to avoid individually testing the responder's knowledge of and support for each possible protocol element. This information includes:

The purpose of specifying this information is to allow the knowledge of and support for one protocol element to be determined based on responses for others, avoiding the complexity that a client would have to deal with if each such support decision were independent. A simpler model would have been to simply assign protocol elements to feature-based support equivalence classes and require all protocol elements in a feature to be supported or not supported together. This approach was not adopted because it is not compatible with many current and expected feature patterns:

The following are noteworthy E-to-F statuses.

It needs to be clear how a client may determine whether any particular OPTIONAL feature is supported. Typically there will be one or more protocol elements belonging to the feature whose E-F status is "IFF" or "SVAL". In these cases, support for the protocol elements in question can be determined as described in Section 6.5

In more complicated cases, the feature specification should clearly specify how to determine whether support is present.

The following are possible F-to-E statuses.

The overall status of a feature element within a minor version is generally determined as follows:

In some cases the overall status may be different from that specified above. For example, it could be that there were two features, each of which is OPTIONAL, and it is specified that exactly one of these must always me supported. In such a case, if both features assign a protocol element an F-to-E status of REQUIRED, then the overall status of the protocol element is REQUIRED.

6.5. Determining Protocol Element Support

If it has already been determined that a particular protocol element is known to the server, the client can determine whether it is supported based on its type, as follows:

Once this is done, all of the protocol elements the client is aware of can be divided into three sets:

Information obtained in the process of determining knowledge of protocol elements (see Section 4.4.3) may be saved and used in connection with the interrogations above. For example, in testing for knowledge of a given operation, the specific error code returned will indicate support or non-support as well as indicating support or non-support, as well as knowledge of the corresponding operation.

Note that in doing so care needs to be taken regarding protocol elements associated with features whose scope is more limited than that of an entire client, since support may be different for different sessions or different file systems.

6.6. Feature Discovery

In many cases, a client will need to determine whether particular features are supported before using protocol elements that are part of those features. While some clients may choose to defer this determination until the features in question are actually needed, others may make the determination as part of first connecting with a server, using a session or accessing a file system, depending on the scope of the feature in question.

Once such a determination of feature support or non-support are made, the client may assume that it remains valid and will not change so long as the object defining the feature scope remains valid.

In making this determination, the client is entitled to rely on, and the server is REQUIRED to obey any inter-feature constraints that are specified as applying to the minor version being used.

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

For the remaining features, which are all OPTIONAL and contain an XDR-extending protocol element, the E-to-F statuses of the constituent protocol elements (see Section 6.4) can be used to determine if support is present within the scope defined by the feature in question. In most cases, support for the protocol element is tested as described in Section 6.5.

Once the set of supported features is determined:

6.7. 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

7.1. 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.

7.2. 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 OPTIONAL 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.

Also, certain additional documents may be produced at this time to simplify the process of using new versions that contain the extension, and to help co-ordinate the process of making further extensions. See Section 10.5 for details.

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:

7.3. 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:

7.3.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:

7.3.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.

7.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 9 for details.

While making minor versions extensible will decrease the frequency of new minor versions, it will not eliminate the need for them. Protocol features that cannot be used as extensions (see Section 8.1.1 require a new minor version.

In addition, change which involve modifications to the set of protocol elements which are REQUIRED or mandatory to not implement require a new minor version which starts a new minor version group. Changes to the organization of protocol features are treated similarly, since they have a similar potential to cause interversion incompatibility. See Section 8.1.2 for details.

8. Minor Versions

8.1. Creation of New Minor Versions

It is important to note that this section, in describing situations that would require new minor versions or minor version groups to be created, does not thereby imply that situations will exist in the future. Judgments regarding desirability of future changes will be made by the working group or its successors and any guidance that can be offered at this point is necessarily quite limited.

Creation of a new minor version or minor version group is an option that the working group retains. The listing of situations below that would prompt such actions is not meant to be exhaustive.

New minor versions are to be documented as described in Section 10.6.

8.1.1. New Minor Versions within an Existing Group

The following sorts of features are not allowed as extensions and would require creation of a new minor version:

8.1.2. New Minor Version Groups

The following sorts of changes can only occur in the context of a new minor version group:

Changes to the status or organization of features will, in most case, result in changes to the status of individual protocol elements, changing them between REQUIRED and OPTIONAL, or making them mandatory to not implement.

Conversion of protocol elements to be mandatory to not implement, will not, as had previously been the practice, result in their deletion from the protocol XDR. However, the server will be REQUIRED to treat such protocol elements as not known when responding to requests within minor versions in which they are not to be implemented. See Sections 4.4.3 and 8.3.2 for details.

Such changes give rise to potential compatibility issues. In most cases in which such changes will actually be made, careful consideration of compatibility issues can limit the scope of such issues or ensure that compatibility issues actually experienced are quite limited.

This is opposed to the first new minor version group, that associated with minor version one, which resulted in a situation in which clients for minor version zero could not interoperate with servers for minor version one and vice versa. Issues related to the question of what to do about such situations are discussed in Section 8.1.3

The addition of REQUIRED features may serve to illustrate the issues. Such additions pose no compatibility issue for existing clients. On the other hand, all servers will need to be updated to support the new features. The effort required and any potential for disruption depend on the scope of the feature being added.

A number of features introduced as REQUIRED in NFSv4.1 can serve to illustrate the issues.

Some examples of potential feature status changes may be helpful in illustrating compatibility issues

A number of other changes allowed only in a new minor version group, raise analogous issues.

The tradeoff between interoperability issues and desirable changes to the protocol is one for the working group to make. If the decision is made to create a new minor version group, the working group has decided that absolute compatibility is not required. Nevertheless, it should strive to make necessary changes as non-disruptive as possible.

8.1.3. Limits on Minor Version Groups

The guidance that needs to be offered with regard to appropriate limits on changes that form new version groups does not appear reducible to specific rules.

Instead it is appropriate to return to the basic goal of allowing the NFSv4 protocol to adapt to future circumstances as they develop. Although this was not explicitly stated, it seems to be intended that this would not involve generation of an essentially a new protocol, even if that were, in some sense, a better one.

So the best way we can address the question of limits on new version groups is to state that the purpose of the rules in this document, including the creation of new minor version groups is not the creation of a successor protocol to NFSv4.

If this or a future working group does find itself defining a new file access protocol, it would be helpful if proper care were taken to retain what is valuable in the intellectual heritage of NFSv4. Nevertheless, in doing so, it is important not to assume that adherence to the rules in this document, is, in and of itself, a guarantee that the new protocol is thereby a version of NFSv4.

In dealing with such a future changed situation, the better option would be to face the issue of necessary change forthrightly and acknowledge that such a large change creates a fundamentally new situation. Appropriate responses might include replacing the XDR in whole or in part, using a successor to XDR, or other means.

8.2. Role of Minor Versions

Clearly, the ability to provide protocol extensions without creation of a new minor version, has lessened the role of minor versions in extending the NFSv4 protocol to meet future needs.

We have gone from a situation in which there was a single mechanism, creation of a new minor version, to extend the protocol, to a three-level approach:

This document does explore the situations that, if they arise, would require the creation of new minor versions or version groups. This does not imply that such situations will exist or that the working will choose to address things in that way. Such choices are left for future decision by the working group and the IESG.

The discussion in Section 8.1.3 raises similar issues. It is possible that situations might arise that would cause NFSv4 development to be done outside the framework established here. Nevertheless, this does not imply that such situations will arise.

8.3. Minor Version Interaction Rules

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.

8.3.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 OPTONAL features will not change within the context of a single clientid. Server implementations MUST ensure that the set of supported features and protocol elements does not change within such a context.

8.3.2. Minor Version Intra-Group Compatibility

Within a set of minor versions that belong to the same minor version group, it is relatively easy for clients and servers to provides the needed compatibility by following the following rules.

With regard to protocol elements not known in a given minor version, the appropriate error codes are given below. Essentially, the server, although it has a more extensive XDR reflective of a newer minor version, must act as a server with a more limited XDR would.

8.3.3. Minor Version Inter-Group Compatibility

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, and the particulars of the changes made which establish new version groups.

Options for compatibility are affected by the scale and frequency of the changes which require a new minor version group and the working group needs to take needs for inter-group compatibility into account when making such changes. In all cases, the following rules apply:

In some cases, the server needs to behave as a more restricted one for an earlier minor version might, despite it having extensions for protocol elements added in later minor versions. In these cases, the errors described in Section 8.3.2 should be returned in this case as well.

In the case in which the earlier version contains protocol elements subsequently made mandatory to not implement, the server needs to know of those protocol elements and not return the errors that would appropriate if the most up-to-date minor version were used. In cases in which support for these protocol elements is REQUIRED, support will have to be provided by the server and if it cannot do that, it MUST return NFS4ERR_MINOR_VERS_MISMATCH for any requests using that minor version.

In addition to using an appropriate subset of the protocol XDR definition, the server needs to respect the non-XDR elements of the earlier minor version group as well. In particular, the serve needs to:

9. 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 document obsoleting or updating the RFC defining the relevant feature definition document or minor version specification. In making such corrections, 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. In many cases, a change in client and server behavior can be implemented without taking special provision with regard to interoperability with earlier implementations. In those case, and in cases in which a revision merely clarifies an earlier protocol definition document, a new document can be published which simply updates the earlier protocol definition document. Subsequently, the indexing material would be updated to reflect the existence of the newer document.

In other cases, it is best if client or server behavior needs to change in a way which raises interoperability concerns. In such cases, incompatible changes in server or client behavior should not be mandated in order to avoid XDR changes.

9.1. XDR Changes to Implement Protocol Corrections

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.7.

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 allows client and server implementers to adopt the new version of the feature at a reasonable pace.

10. Documentation of Features, Extensions, Minor Versions, and Protocol Corrections

As mentioned previously, NFSv4 is evolving towards a finer-grained documentation model. This trend will be continued by:

10.1. Documentation Approach

Documentation of future changes to the NFSv4 protocol will use feature specification documents as described in Section 10.3. There are a number of ways in which such documents may be used, which reflect the different ways in which features are incorporated in the NFSv4 protocol, as discussed in Section 6.7

This documentation approach is intended to avoid the unnecessary production of large documents in which many unrelated features are tied together because either:

The production of a larger number of smaller documents will streamline document production and review. A potential problem is that a profusion of smaller documents might cause difficulty for those learning about and implementing the protocol.

The production of indexing material described in Section 10.2 is intended to limit such difficulties. The result will be that, for operations and attributes, we will have essentially a single table of contents, referencing material from multiple minor version definition documents and feature specification documents.

10.2. Indexing material

The items listed below, 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.

10.3. 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 5. Feature elements include new operations, attributes, and enumeration values. Note that in this context, "Operations" include both forward and callback operations. 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(s) in question, the items to be included in such feature definition documents would be as listed below. In some cases these items, in addition to descriptive text, would contain fragments of XDR code, to aid in preparation of XDR files that include the additions defined by the feature added to the base protocol that is being extended. For information regarding preparation of such XDR files, see Section 10.4.

Note that the listing above is not intended to define, in detail, the structure of the specification. Rather, the intention is to define the things it needs to contain. If there would be no content for a particular element, there is no need for an empty section corresponding to that list element. If it makes more sense to describe a new structure together with an extended one, then the need for a readily understandable document is primary.

10.4. XDR File Considerations

As mentioned previously, feature specification documents will contain, in addition to description of XDR extensions, XDR code fragments that embody those extensions. There will be various occasions on which people will have occasion to produce XDR files that combine one or more extensions together with the XDR for an existing minor version.

We are assuming here that the primary task is producing XDR files and that corresponding XDR documents can be produced relatively easily if there is a well understood process to produce the underlying XDR files.

The Feature specification document should contain all of the necessary lines of XDR codes to be added to a base XDR file to effect the extension. The only remaining issue is where to place each addition to arrive at the correct consolidated file.

10.5. Additional Documents to Support Protocol Extension

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.

10.5.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.

10.5.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.

10.5.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 implement.
  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:

10.5.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.7

10.6. Documentation of New Minor Versions

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 OPTIONAL 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 10.2.

10.7. Documentation of XDR Changes for Corrections

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, DOI 10.17487/RFC2119, March 1997.

13.2. Informative References

[NFSv42] Haynes, T., "NFS Version 4 Minor Version 2", January 2016.

Work in progress.

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

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, DOI 10.17487/RFC3530, April 2003.
[RFC5661] Shepler, S., Eisler, M. and D. Noveck, "Network File System (NFS) Version 4 Minor Version 1 Protocol", RFC 5661, DOI 10.17487/RFC5661, 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, DOI 10.17487/RFC5662, January 2010.
[RFC5663] Black, D., Fridella, S. and J. Glasgow, "Parallel NFS (pNFS) Block/Volume Layout", RFC 5663, DOI 10.17487/RFC5663, January 2010.
[RFC5664] Halevy, B., Welch, B. and J. Zelenka, "Object-Based Parallel NFS (pNFS) Operations", RFC 5664, DOI 10.17487/RFC5664, January 2010.
[RFC7530] Haynes, T. and D. Noveck, "Network File System (NFS) Version 4 Protocol", RFC 7530, DOI 10.17487/RFC7530, March 2015.
[RFC7531] Haynes, T. and D. Noveck, "Network File System (NFS) Version 4 External Data Representation Standard (XDR) Description", RFC 7531, DOI 10.17487/RFC7531, March 2015.

Appendix A. Acknowledgements

The author wishes to thank Tom Haynes of Primary Data for his role in getting this effort started and his work in co-authoring the first version of this document.

The author also wishes to thank Chuck Lever and Mike Kepfer of Oracle for their thorough document reviews and many helpful suggestions.

Author's Address

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