Re: [nfsv4] [Technical Errata Reported] RFC8166 (6528)

Tom Talpey <tom@talpey.com> Wed, 21 April 2021 13:20 UTC

Return-Path: <tom@talpey.com>
X-Original-To: nfsv4@ietfa.amsl.com
Delivered-To: nfsv4@ietfa.amsl.com
Received: from localhost (localhost [127.0.0.1]) by ietfa.amsl.com (Postfix) with ESMTP id 8859A3A2775 for <nfsv4@ietfa.amsl.com>; Wed, 21 Apr 2021 06:20:17 -0700 (PDT)
X-Virus-Scanned: amavisd-new at amsl.com
X-Spam-Flag: NO
X-Spam-Score: -1.9
X-Spam-Level:
X-Spam-Status: No, score=-1.9 tagged_above=-999 required=5 tests=[BAYES_00=-1.9, NICE_REPLY_A=-0.001, RCVD_IN_DNSWL_BLOCKED=0.001, RCVD_IN_MSPIKE_H2=-0.001, SPF_HELO_NONE=0.001, SPF_PASS=-0.001, URIBL_BLOCKED=0.001] autolearn=ham autolearn_force=no
Received: from mail.ietf.org ([4.31.198.44]) by localhost (ietfa.amsl.com [127.0.0.1]) (amavisd-new, port 10024) with ESMTP id J2pBwbQp92PP for <nfsv4@ietfa.amsl.com>; Wed, 21 Apr 2021 06:20:12 -0700 (PDT)
Received: from p3plsmtpa07-02.prod.phx3.secureserver.net (p3plsmtpa07-02.prod.phx3.secureserver.net [173.201.192.231]) (using TLSv1.2 with cipher ECDHE-RSA-AES256-GCM-SHA384 (256/256 bits)) (No client certificate requested) by ietfa.amsl.com (Postfix) with ESMTPS id A0CB13A2774 for <nfsv4@ietf.org>; Wed, 21 Apr 2021 06:20:12 -0700 (PDT)
Received: from [192.168.0.116] ([71.184.94.153]) by :SMTPAUTH: with ESMTPSA id ZCm2lwYytXD9QZCm2lPZ4w; Wed, 21 Apr 2021 06:20:10 -0700
X-CMAE-Analysis: v=2.4 cv=QOGt+iHL c=1 sm=1 tr=0 ts=6080268b a=vbvdVb1zh1xTTaY8rfQfKQ==:117 a=vbvdVb1zh1xTTaY8rfQfKQ==:17 a=IkcTkHD0fZMA:10 a=SEc3moZ4AAAA:8 a=BqEg4_3jAAAA:8 a=pGLkceISAAAA:8 a=48vgC7mUAAAA:8 a=TIseoMMHhBnfPi-vrcwA:9 a=QEXdDO2ut3YA:10 a=5oRCH6oROnRZc2VpWJZ3:22 a=0mFWnFbQd5xWBqmg7tTt:22 a=w1C3t2QeGrPiZgrLijVG:22
X-SECURESERVER-ACCT: tom@talpey.com
To: Chuck Lever III <chuck.lever@oracle.com>
Cc: "nfsv4@ietf.org" <nfsv4@ietf.org>
References: <20210412164024.82CB8F4075A@rfc-editor.org> <A4A2576B-A0BD-4B29-B1C1-C5498AC938DC@oracle.com> <296b1959-4f6c-d24b-7eaf-d26f185bc5f2@talpey.com> <17D8AEB3-5D3F-4E77-918B-98E9716E30BB@oracle.com>
From: Tom Talpey <tom@talpey.com>
Message-ID: <17d9ad34-50c6-611a-8e2a-888239b33a8d@talpey.com>
Date: Wed, 21 Apr 2021 09:20:10 -0400
User-Agent: Mozilla/5.0 (Windows NT 10.0; Win64; x64; rv:68.0) Gecko/20100101 Thunderbird/68.12.1
MIME-Version: 1.0
In-Reply-To: <17D8AEB3-5D3F-4E77-918B-98E9716E30BB@oracle.com>
Content-Type: text/plain; charset="utf-8"; format="flowed"
Content-Language: en-US
Content-Transfer-Encoding: 7bit
X-CMAE-Envelope: MS4xfOLspQqWIXEK+HHUWB/mKIeT4hQs6HZ/WntZiFbOxkXZalF6Uv4zG+5gvNIr2fJwP1TdKljJhaC2e6dx84XE4jtvyx3DIN494LWegsVWFyobrCvRM/53 XVGMGY8YOH0mmt4dNYQd58AwXzCOXvORXVvh7Z6gLRWN3lBBm/McyzprLn0iwP749rCY23jhvY/0cdgFt4riRc1dSUZJOgJaP+0=
Archived-At: <https://mailarchive.ietf.org/arch/msg/nfsv4/KnZn93TFypxun1PqC9b1KEoy850>
Subject: Re: [nfsv4] [Technical Errata Reported] RFC8166 (6528)
X-BeenThere: nfsv4@ietf.org
X-Mailman-Version: 2.1.29
Precedence: list
List-Id: NFSv4 Working Group <nfsv4.ietf.org>
List-Unsubscribe: <https://www.ietf.org/mailman/options/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=unsubscribe>
List-Archive: <https://mailarchive.ietf.org/arch/browse/nfsv4/>
List-Post: <mailto:nfsv4@ietf.org>
List-Help: <mailto:nfsv4-request@ietf.org?subject=help>
List-Subscribe: <https://www.ietf.org/mailman/listinfo/nfsv4>, <mailto:nfsv4-request@ietf.org?subject=subscribe>
X-List-Received-Date: Wed, 21 Apr 2021 13:20:18 -0000

On 4/20/2021 1:13 PM, Chuck Lever III wrote:
> 
> 
>> On Apr 20, 2021, at 11:36 AM, Tom Talpey <tom@talpey.com> wrote:
>>
>> On 4/20/2021 11:17 AM, Chuck Lever III wrote:
>>> Sorry for the delay, I wasn't sure where to begin further conversation
>>> on this errata.
>>>> On Apr 12, 2021, at 12:40 PM, RFC Errata System <rfc-editor@rfc-editor.org> wrote:
>>>>
>>>> The following errata report has been submitted for RFC8166,
>>>> "Remote Direct Memory Access Transport for Remote Procedure Call Version 1".
>>>>
>>>> --------------------------------------
>>>> You may review the report below and at:
>>>> https://www.rfc-editor.org/errata/eid6528
>>>>
>>>> --------------------------------------
>>>> Type: Technical
>>>> Reported by: David Noveck <davenoveck@gmail.com>
>>>>
>>>> Section: 4.2.4
>>>>
>>>> Original Text
>>>> -------------
>>>> A Requester MUST NOT send an RPC-over-RDMA header with the RDMA_ERROR
>>>> procedure.  A Responder MUST silently discard RDMA_ERROR procedures
>>> Stated as a co-author of this document, I agree that this text is
>>> problematic for version negotiation, which uses the RDMA_ERROR
>>> procedure/header type.
>>> One vote for "verified".
>>>> Corrected Text
>>>> --------------
>>>> An RDMA_ERROR header cannot be sent without an assurance that, the receiver
>>>> has posted a receive operation which its sending will satisfy.  In most cases,
>>>> this means that a Requester (i.e. one sending RPC Calls) MUST NOT send an
>>>> RPC-over-RDMA header with the RDMA_ERROR procedure.  Similarly, a Responder
>>>> (i.e. one sending RPC Replies) MUST silently discard RDMA_ERROR procedures.
>>> I don't recall that the issue that prompted the addition of the
>>> original text was the requirement for a posted Receive. That
>>> might be slightly revisionist.
>>> Though it is true sending an RDMA_ERROR when there is no Receive
>>> waiting will likely result in loss of connection, I think the
>>> typical scenario is that RDMA_ERROR is in response to a previous
>>> message; thus missing a Receive would be an implementation bug.
>>
>> Why is this particular RDMA_ERROR so important? It seems to me like
>> a ton of normative text for a version mismatch, which basically
>> should never happen.
> 
> It will happen now that we have rpcrdma-version-two.
> 
> 
>> If anything, changing "silently discard" to
>> "close the connection" would be just as appripriate.
> 
> I prefer to avoid "close the connection" as a first resort since
> it can impact other RPC transactions that are ongoing. That might
> not be a concern for ERR_VERS, but it could very well be a
> problem for ERR_CHUNK.
> 
> 
>> Can someone motivate the scenario for me?
> 
> The problem is that RFC 8166 defines only forward-direction
> operation, where the Requester/Responder roles are clear. With
> the introduction of reverse-direction operation and control
> plane operations, it becomes impossible to implement the
> requirements stipulated in S4.2.4 because there are now scenarios
> where the Receiver has no way to determine whether it is a
> Requester or a Responder.

Oh. So, the idea is that the ULP reverse channel might attempt to
establish an RPCRDMA version which might be different from the forward
channel? How is that useful, or even plausible? I think the answer will
guide the proposed fix.

I don't think, in any case, that it's at all useful to allow the
version to change after both sides have exchanged messages with
matching versions. If that happens, closing the connection is the
only valid action.

Tom.

> I think Dave is concerned about how these requirements impact the
> operation of versions subsequent to v1, or during version negotiation
> between a v1-only implementation and a polyglot.
> 
> 
>>> "In most cases," is not appropriate with MUST/MUST NOT. We could
>>> stipulate that the exact cases where these requirements hold is
>>> when sending ERR_CHUNK. These requirements do not hold for ERR_VERS.
>>
>> I'll go further - "in most cases" isn't appropriate for a spec.
>>
>> Tom.
>>
>>>> However, in the case of providing an RDMA_ERROR headers containing an error
>>>> code of ERR_VERS, such a schema is not realizable, since there is no way for
>>>> a receiver who does not support a particular version, to determine whether
>>>> an RPC Call or Reply is being sent, leaving the receiver uncertain as to whether
>>>> it is being Addressed as a Requester or a Responder, leaving it unable to
>>>> participate in version negotiation.
>>> The particular issue is that either:
>>> - the Sender of the message with the unsupported version might be
>>> using a procedure of the new protocol version that is not supported
>>> in the protocol version the Receiver supports, or
>>> - the Sender of the message with the unsupported version might be
>>> using a procedure that does not bear an RPC message or any other
>>> indication of message direction.
>>> Thus the Receiver would not be able to determine the direction of
>>> the incoming message.
>>> I'm not convinced that RFC 8166 Section 4.2 is an appropriate place
>>> to explain this reasoning. (Stating it here in the errata is OK).
>>> The above could be dropped in the Corrected text.
>>>> In the case of version errors, the
>>>> implementation is to rely on the assumption that forward direction requests
>>>> are being done and reserve direction requests only done once the version is
>>>> properly negotiated.
>>> Shorter:
>>> "For the purpose of version negotiation, the receiver is to assume
>>> that reverse-direction operation is started only once the connection's
>>> transport protocol version has been fixed using forward direction
>>> operations."
>>> One problem with this is that reverse-direction operation is defined
>>> in a separate RFC (8167).
>>>> As a result, such messages MUST NOT be sent by the
>>>> client and MUST be silently discarded by servers.
>>> I'd like to confirm that what the reporter intended in the second
>>> sentence above was "client" and "servers" and not "Requester" and
>>> "Responders".
>>>> Notes
>>>> -----
>>>> Even if one feels that this is not an appropriate correction, the existing text must be fixed somehow.   In assuming that the terms Requester and Responder can be used this way in this context is likely to result in some implementers concluding that version errors can never be sent while other might be unabble to coonclude that given the effort expended in the spec to make such errors be interpretable by anf rpc-over-rdma version.
>>>>
>>>> Instructions:
>>>> -------------
>>>> This erratum is currently posted as "Reported". If necessary, please
>>>> use "Reply All" to discuss whether it should be verified or
>>>> rejected. When a decision is reached, the verifying party
>>>> can log in to change the status and edit the report, if necessary.
>>>>
>>>> --------------------------------------
>>>> RFC8166 (draft-ietf-nfsv4-rfc5666bis-11)
>>>> --------------------------------------
>>>> Title               : Remote Direct Memory Access Transport for Remote Procedure Call Version 1
>>>> Publication Date    : June 2017
>>>> Author(s)           : C. Lever, Ed., W. Simpson, T. Talpey
>>>> Category            : PROPOSED STANDARD
>>>> Source              : Network File System Version 4
>>>> Area                : Transport
>>>> Stream              : IETF
>>>> Verifying Party     : IESG
>>> --
>>> Chuck Lever
>>> _______________________________________________
>>> nfsv4 mailing list
>>> nfsv4@ietf.org
>>> https://www.ietf.org/mailman/listinfo/nfsv4
>>
>> _______________________________________________
>> nfsv4 mailing list
>> nfsv4@ietf.org
>> https://www.ietf.org/mailman/listinfo/nfsv4
> 
> --
> Chuck Lever
> 
> 
> 
>